PHP Original

From CSE330 Wiki
Revision as of 18:57, 2 September 2009 by Wiseman (talk | contribs) (→‎Functions)
Jump to navigationJump to search

PHP5

PHP is a server-side language. When a web request for PHP file comes in, the web server processes the PHP file to produce HTML output. That is, the main function of most PHP scripts is to dynamically create HTML content. PHP5 support for Apache is provided by mod_php5. In Ubuntu, you can provide PHP5 support by installing php5. This will install the apache2 module and the php5 command line interpreter (useful for debugging). PHP files may have different extensions, but .php is the most common. In the Apache configuration, you can specify which extensions are going to be treated as PHP scripts by adding the extensions to the list in the /etc/apache2/mods-available/php5.conf file:

 AddType application/x-httpd-php .php .phtml .php3

Declaring PHP

If a PHP file is requested by a web user, Apache parses and interprets the file. Any code declared between PHP tags is then executed and the total HTML output is sent back to the user. PHP code can be declared in a script file in any of the following ways, with the first being the most common:

<?
  PHP Code In Here
?>
<?php
  PHP Code In Here
php?>
<script language="php">
  PHP Code In Here
</script>

For example, edit a new PHP file named info.php, and put these lines in the file:

<? 
  phpinfo();
?>

Put the file in the web directory for your user account (remember that this is ~username/.html/ if you completed the first Module). Then access the web page by going to http://server/~username/info.php. You will see something similar to the picture below:

Php info.png


If you look at the HTML code, you will see quite a lot of HTML output:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
 <html><head>
<style type="text/css">
 body {background-color: #ffffff; color: #000000;}
 body, td, th, h1, h2 {font-family: sans-serif;}
 pre {margin: 0px; font-family: monospace;}
 a:link {color: #000099; text-decoration: none; background-color: #ffffff;}
 a:hover {text-decoration: underline;}
 table {border-collapse: collapse;}
 .center {text-align: center;}
 .center table { margin-left: auto; margin-right: auto; text-align: left;}
 .center th { text-align: center !important; }
 td, th { border: 1px solid #000000; font-size: 75%; vertical-align: baseline;}
 h1 {font-size: 150%;}
 h2 {font-size: 125%;}
 .p {text-align: left;}
 .e {background-color: #ccccff; font-weight: bold; color: #000000;}
 .h {background-color: #9999cc; font-weight: bold; color: #000000;}
 .v {background-color: #cccccc; color: #000000;}
 .vr {background-color: #cccccc; text-align: right; color: #000000;}
 img {float: right; border: 0px;}
 hr {width: 600px; background-color: #cccccc; border: 0px; height: 1px; color: #000000;}
 </style>
 <title>phpinfo()</title></head>
 <body><div class="center">
 <table border="0" cellpadding="3" width="600">
 ....

Of course, none of that HTML was in the info.php file. Instead, the phpinfo() line is a built-in PHP function that produces all of that HTML.

Variables and Arrays

Variables require $ at the beginning of their names (regardless of the purpose, be it setting, be it accessing). You don't need to specify the type of the variable; PHP will use the variable as the correct type based on how it is used in the code.

<?
  #this is an integer
  $i=5;
  #this is a string
  $msg="my string";
?>

As in many other languages, statements end with a ;. To actually produce HTML output, you simply print the HTML from the PHP code. The simplest way is to use the print function:

print $msg;

If you use a variable inside of a string, the value of the variable will be put in the string (you might also look at the echo function):

<?
  $i=5;
  print "The value of i is $i";
?>

This will generate the string

The value of i is 5

If you create a file with just the above code, you will notice that your browser will only receive the above line. That is, there is no html tag or anything else. Thus, PHP files are normally a mix of HTML code and PHP code. Most PHP scripts, then, look more like this:

<html>
<body>
<?
  $i=5;
  print "The value of i is $i";
?>
</body>
</html>

The code that the browser will receive is then:

<html>
<body>
  The value of i is 5
</body>
</html>

You can have any number of PHP segments and HTML segments in a PHP file. For example:

<html>
<body>
<? $i=5; ?>
The value of i is <?  print "$i"; ?>
</body>
</html>

Of course, whatever you print out will be interpreted as HTML by the client's browser, so you can (and will) use HTML tags in the output you produce. For example:

 <? print "This is a <b> test </b> ?> 

This results in the following at the user's browser:

 This is a <b> test </b>

Which would then render test in bold.

Arrays

Declaring arrays is very easy in PHP. Either you can enter all elements one by one, or you can enter them together:

$student[0]="Alice";
$student[1]="Bruce";
$student[2]="Charlie";
$student[3]="Dan";

or alternatively

$student=array("Alice","Bruce","Charlie","Dan");

Then you can access the contents with an index into the array, as normal:

print $student[2];


You can find the size of an array with count function, e.g., count($student)

In PHP, you can also have associative arrays, which are arrays whose members can be accessible with string indices. Here is an example:

<?
$test["test1"]=1;
$test["test2"]=2;

echo "test1=",$test[test1],"<br>";
echo "test2=",$test[test2],"<br>";
?>

You can access array keys through array_keys function.

Conditional Statements

if/elseif/else statements provide the conditional statements. The general format is

if ( CONDITION )
{
  some statements
}
elseif( ANOTHER_CONDITION )
{
  more statements
}
else
{
   yet more statements
}

You can use standard comparison operators such as ==,<,> etc.

if ( $string == "this is my string") {
  echo "strings are equal";
}

or

 if ($average_temperature>100) {
   echo "No, no, there is no such thing as global warming!!!!";
 }

Loops

PHP has for and while loops, similar to Java and C:

for(initialization;condition;loop_increment){
}
 
while (condition){
}

For example, the following code will print the sum of numbers from 1 to 10.

  $sum=0;
  $i=1;
  while($i<=10) {
    $sum=$sum+$i;
    $i++;
  }
 
 echo "sum is $sum";
 

The advantage of loops becomes more obvious when you have to create a long table:

<table border="1">
<tr><td>Number</td><td>Square</td></tr>
<?
for($i=0;$i<100;$i++) {
echo "<tr><td>$i </td><td>",$i*$i,"</td></tr>\n";
}
?>
</table>

This creates a table with two columns, each row contains a number and its square.

break and continue are special commands that will interrupt normal control flow through a loop. break jumps out of the loop entirely, while continue jumps to the end of the current loop iteration and flow resumes with the next loop iteration.

Functions

PHP functions are identified with the keyword function followed by a function name and argument list for the function.

function name($arg1 [= constant], $arg2 [= constant], ...) {
}

For example

<? 
  function add($x,$y) {
    return ($x+$y);
  }
  echo "Sum of 2+5=",add(2,5); 
?>

If an argument has a default value, it can be specified with the argument on the list:

 <?
   function helloMsg($name="there") {
      print "hello $name how are you today?<br>";
   }
   helloMsg("Alice");
   helloMsg();
 ?>

The above code will output:

 hello Alice how are you today?<br>
 hello there how are you today?<br>

Passing Variables

The variables are passed either within URL or when php file receives data submitted by a form. Built in functions $_GET['variablename'] and $_POST[variablename] return the value of variablename depending on the access method. As we will see in the next section, the variables can also be passed through session variables. Finally, you can use cookies to store and retrieve the variables.

If you want to pass the variable values in URL, the format is http://yourserver/yourphpfile.php?var1=value1&var2=value2.....

For example, the following PHP code would be used to print previous hello message according to the name received at URL:

greeting.php:



<?
 $person= $_GET['name'];
 helloMsg($person);
 function helloMsg($name="there") {
     print "hello $name how are you today?</br>";
 }
?>

If you access this php file with greeting.php?name=Alice, it will show hello Alice how are you today?. However, if you access it with greeting.php, it will print hello how are you today. As you have noticed, it didn't used the default value there since $name is now a string (eventhough it is just "") hence there is an argument sent to helloMsg.


Receiving the data from a form is also very similar. Consider following form:

<FORM action="info.php" method="post">
    <P>
    <LABEL for="firstname">First name: </LABEL>
              <INPUT type="text" name="firstname"><BR>
    <LABEL for="lastname">Last name: </LABEL>
              <INPUT type="text" name="lastname"><BR>
    <LABEL for="birthyear">Birth Year: </LABEL>
              <INPUT type="text" name="birthyear"><BR>
    <INPUT type="radio" name="gender" value="Male"> Male<BR>
    <INPUT type="radio" name="gender" value="Female"> Female<BR>
    <INPUT type="submit" value="Send"> <INPUT type="reset">
    </P>
 </FORM>

This posts the form data to info.php. Notice that, inputs firstname, lastname, birthyear and gender.

Then we can access those variables through $_POST function in info.php

info.php

<?
 echo  "Personal Data:",$_POST['firstname'],' ', $_POST['lastname'], "<br>";
 $birthyear=$_POST['birthyear'];
 echo  "Birth year:", $_birthyear, " (Age:",2007-$birthyear,")<br>";
 echo "Gender: ", $_POST['gender'];
?>

Session Variables

PHP5 provides a global array, $_SESSION to provide variables that are available globally through a session. The variables will stay there until either you remove them, or you close your browser (or session expired).

In order to access session variables, you should first initiate the session with session_start() function call. After that, when ever you access a variable inside $_SESSION, it will become a session variable. For example:

setsessionvars.php

<?
session_start();

$_SESSION['SESSION']=1;
$_SESSION['UNAME']="burchan";
?>

will set two variables, SESSION and UNAME to be accessible by other pages. In another page, you can access them with

<?

session_start();
if (!isset($_SESSION["SESSION"])) {
  echo "error session is not registered";
  }
  else echo "Username=",$_SESSION['UNAME'];
?>

You can also remove a session variable from the session with unset command

unset($_SESSION['SESSION']);

Uploading files with PHP

First, you should a form that contains the input type file transfer.php [TAO: this sentence reads wierd...]


<form enctype="multipart/form-data" action="uploader.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form>


When this file is uploaded, you can access the properties of this file throug $_FILES variable. For example, we named the input as uploadedfile. So $_FILES['uploadedfile'] refers to this file. The name of the original file can be found as $_FILES['uploadedfile']['name']. When you upload a file, it is first put to a temporary file. The name of this file can be found as $_FILES['uploadedfile']['tmp_name']. So, in your PHP code, you can move a file from its original location to an upload location by calling a built-in function, move_uploaded_file, which takes an argument for the source and destination locations. Remember that, if you put a relative path, the path will start from the location of your uploader script.

uploader.php:

$target_path = "uploads/";

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['name']).
    " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}

Eclipse and PHP

[TAO: maybe add here what is Eclispe, why is it useful. Or a link to an external source that describes its usage. Also, we might want to move the following link to the class folder.] PHP Eclipse is installed locally at

/home/cec/faculty/cs/bayazit/eclipse-extensions

You can add this plugin directory to your eclipse workspace by adding an extension location

Help -> Software Updates ->  Manage Configuration -> Add an Extension Location