set06aphp

advertisement
Server-side Programming in PHP
History of PHP
• PHP originally stood for “Personal Home Page”
• It started out, in 1994, as a simple preprocessor of HTML
files
– built by Rasmus Lerdorf (born in Greenland, grew up in Denmark
and Canada, graduated from U of Waterloo in 1993, now
prominent member of Open Source movement)
– original purpose was to log people who viewed his on-line resume
• Since then, has been developed by a growing community
of open source developers
• Name now supposed to stand for “Hypertext PreProcessor”
PHP history (contd.)
• Initially, PHP comprised a simple parser plus a
library of C functions
• The parser would scan a HTML file looking for
instances of a new non-standard tag and replace
the contents of these tag instances with the result
of executing some functions in the C library
• As a result, much PHP syntax looks like C
• Other parts of it, however, have a Perl flavour –
but, of course, Perl also borrows C syntax
Enabling PHP in HTTP servers
• PHP is available on many servers today, in
Windows and all types of Unix
environments
• It is supported by Apache, AOLServer,
Roxen and others
• Servers can be configured to enable PHP in
different ways
• We will assume that the httpd recognizes a
file who name has the suffix .php as a PHP
file
A first PHP file
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php echo “<p>Hello World</p>"; ?>
</body>
</html>
How PHP files are processed
• The httpd demon simply copies regular HTML content in
the .php file to the message body that will be sent to a
client which requests the .php file
• The new non-standard tag is of the form
<?php … ?>
• The text inside the tag is PHP code
<?php echo “<p>Hello World</p>"; ?>
• The httpd demon executes this PHP code and copies the
output text, generated by this PHP code, to the message
body that will be sent to the client
• Thus, from the above, the client would see only
<p>Hello World</p>
Suppose we request this file
interzone.ucc.ie> telnet student.cs.ucc.ie 80
Trying 143.239.211.125...
Connected to student.cs.ucc.ie.
Escape character is '^]'.
GET /cs4400/jabowen/php/file1.php HTTP/1.1
Host: student.cs.ucc.ie
Here is the response
HTTP/1.1 200 OK
Date: Wed, 06 Feb 2002 12:34:15 GMT
Server: Apache/1.3.20 (Unix) PHP/4.0.6
X-Powered-By: PHP/4.0.6
Transfer-Encoding: chunked
Content-Type: text/html
58
<html>
<head>
<title>PHP test</title>
</head>
<body>
<p>Hello world!</p></body>
</html>
0
Connection closed by foreign host.
interzone.ucc.ie>
• cs 3314 got here on 27 oct 2005
Note following in response:
• Chunked transfer-encoding is used
– because the httpd demon does not know, before
executing the PHP content, how long the
message body will be
• PHP code has been replaced, in the message
body, by its output
PHP files are not special
• PHP files do not have to be executable
• They can be regarded as simply HTML files
with some new tags
PHP tags
• In the example just seen, the PHP tag was
<?php … ?>
• This is the best PHP tag to use – it is the one
which works best if we are also using XML,
because it avoids conflicts with XML Processing
Instructions
• However, you may occassionally see the following
tags being used in other people’s PHP code:
<? … ?>
<% … %>
<script language=“php”> … </script>
Variables in PHP
• Variables in PHP are denoted by a dollar
sign followed by the name of the variable.
• A variable name is case-sensitive.
• A valid variable name starts with a letter or
underscore, followed by any number of
letters, numbers, or underscores.
Example Usage of Variables
<html>
<head>
<title>Greetings</title>
</head>
<body>
<h1>Greetings</h1>
<p>
<?php $person = "Tom";
$Person = "Dick";
echo "Hello $person and $Person";
?>
</p>
</body>
</html>
Automatic variables in PHP
• One of the main benefits of PHP is that it
provides lots of variables automatically
• Consider, for example, the .php file on the
next slide
• It produces the output on the following two
slides when viewed by MSIE 6.0 and
Netscape 2.0
Example usage of automatic PHP variable
<html>
<head>
<title>Your browser</title>
</head>
<body>
<h1>Your Browser</h1>
<p>
You are using
<?php echo $HTTP_USER_AGENT; ?>
to view this page.
</p>
</body>
</html>
A warning about pre-defined variables
• The way in which PHP supports pre-defined
variables has changed recently.
• This will be discussed in a future lecture
Data Types in PHP
• PHP supports eight primitive data types
• There are four scalar types
–
–
–
–
boolean
integer
floating-point number
string
• There are two structured types
– array
– object
• There are two special data types
– resource
– NULL
• The programmer does not specify the type of a variable
– a variable’s type is determined from the context of its usage
Booleans
• The boolean data type admits two values
– true (case-insensitive)
– false (case-insensitive)
• Example usage
$itIsRainingToday = true;
$thePrinterIsBusy = True;
$theQueueIsEmpty = FALSE;
Integers
• Integers can be specified in decimal, hexadecimal
or octal notation, optionally preceded by a sign
– In octal notation, the number must have a leading 0
– In hexadecimal notation, the number must have a
leading 0x.
• Examples
$a = 1234;
$a = -123;
$a = 0123;
$a = 0x1B;
# decimal number
# a negative number
# octal number (equivalent to 83 decimal)
# hexadecimal number (equivalent to 27 decimal)
• The maximum size of an integer is platformdependent, but usually it’s 32 bits signed – about
2,000,000,000
• PHP does not support unsigned integers.
Floating Point Numbers
• These can be specified using any of these forms:
$a = 1.234;
$a = 1.2e3;
$a = 7E-10;
• The maximum size of a float is platformdependent, although most support a maximum of
about 1.8e308 with a precision of roughly 14
decimal digits
Strings
• A string literal can be specified in three different
ways:
–
–
–
single quoted
double quoted
heredoc syntax
• cs 3314 got here on 3 nov 2005
Single-quoted Strings
• In single-quoted strings, single-quotes and
backslashes must be escaped with a
preceding backslash
• Example usage
echo 'this is a simple string';
echo 'You can embed newlines in strings,
just like this.';
echo ‘Douglas MacArthur said "I\'ll be back” when leaving the Phillipines';
echo 'Are you sure you want to delete C:\\*.*?';
Double-quoted Strings
• In double-quoted strings,
– variables are interpreted to their values, and
– various characters can be escaped
•
•
•
•
•
•
•
•
\n linefeed
\r
carriage return
\t horizontal tab
\\ backslash
\$ dollar sign
\” double quote
\[0-7]{1,3} a character in octal notation
\x[0-9A-Fa-f]{1,2} a character in hexadecimal notation
Heredoc Strings
• Heredoc strings are like double-quoted strings without the
double quotes
• A heredoc string is delimited as follows
– The string is preceded by <<< followed by a label
– The string followed by a 2nd occurrence of the same label
• Example usage
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
String-manipulation functions
• PHP provides huge range of stringmanipulation functions:
–
–
–
–
–
–
–
–
–
–
–
–
–
addcslashes -- Quote string with slashes in a C style
addslashes -- Quote string with slashes
bin2hex -- Convert binary data into hexadecimal representation
chop -- Alias of rtrim()
chr -- Return a specific character
chunk_split -- Split a string into smaller chunks
convert_cyr_string -- Convert from one Cyrillic character set to another
count_chars -- Return information about characters used in a string
crc32 -- Calculates the crc32 polynomial of a string
crypt -- One-way string encryption (hashing)
echo -- Output one or more strings
explode -- Split a string by string
get_html_translation_table -- Returns the translation table used by
htmlspecialchars() and htmlentities()
– get_meta_tags -- Extracts all meta tag content attributes from a file and returns an
array
– hebrev -- Convert logical Hebrew text to visual text
– hebrevc -- Convert logical Hebrew text to visual text with newline conversion
– htmlentities -- Convert all applicable characters to HTML entities
– htmlspecialchars -- Convert special characters to HTML entities
– implode -- Join array elements with a string
– join -- Join array elements with a string
– levenshtein -- Calculate Levenshtein distance between two strings
– localeconv -- Get numeric formatting information
– ltrim -- Strip whitespace from the beginning of a string
– md5 -- Calculate the md5 hash of a string
– md5_file -- Calculates the md5 hash of a given filename
– metaphone -- Calculate the metaphone key of a string
– nl2br -- Inserts HTML line breaks before all newlines in a string
– ord -- Return ASCII value of character
– parse_str -- Parses the string into variables
– print -- Output a string
– printf -- Output a formatted string
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
quoted_printable_decode -- Convert a quoted-printable string to an 8 bit string
quotemeta -- Quote meta characters
str_rot13 -- Perform the rot13 transform on a string
rtrim -- Strip whitespace from the end of a string
sscanf -- Parses input from a string according to a format
setlocale -- Set locale information
similar_text -- Calculate the similarity between two strings
soundex -- Calculate the soundex key of a string
sprintf -- Return a formatted string
strncasecmp -- Binary safe case-insensitive string comparison of the first n
characters
strcasecmp -- Binary safe case-insensitive string comparison
strchr -- Find the first occurrence of a character
strcmp -- Binary safe string comparison
strcoll -- Locale based string comparison
strcspn -- Find length of initial segment not matching mask
strip_tags -- Strip HTML and PHP tags from a string
stripcslashes -- Un-quote string quoted with addcslashes()
stripslashes -- Un-quote string quoted with addslashes()
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
stristr -- Case-insensitive strstr()
strlen -- Get string length
strnatcmp -- String comparisons using a "natural order" algorithm
strnatcasecmp -- Case insensitive string comparisons using a "natural order"
algorithm
strncmp -- Binary safe string comparison of the first n characters
str_pad -- Pad a string to a certain length with another string
strpos -- Find position of first occurrence of a string
strrchr -- Find the last occurrence of a character in a string
str_repeat -- Repeat a string
strrev -- Reverse a string
strrpos -- Find position of last occurrence of a char in a string
strspn -- Find length of initial segment matching mask
strstr -- Find first occurrence of a string
strtok -- Tokenize string
strtolower -- Make a string lowercase
strtoupper -- Make a string uppercase
str_replace -- Replace all occurrences of the search string with the replacement
string
–
–
–
–
–
–
–
–
–
–
strtr -- Translate certain characters
substr -- Return part of a string
substr_count -- Count the number of substring occurrences
substr_replace -- Replace text within a portion of a string
trim -- Strip whitespace from the beginning and end of a string
ucfirst -- Make a string's first character uppercase
ucwords -- Uppercase the first character of each word in a string
vprintf -- Output a formatted string
vsprintf -- Return a formatted string
wordwrap -- Wraps a string to a given number of characters using a string
break character.
– nl_langinfo -- Query language and locale information
Arrays
• An array in PHP is a structure which maps
keys to values
• The keys can specified explicitly or they
can be omitted
• If keys are omited, integers starting with 0
are keys
• The value mapped to a key can, itself, be an
array, so we can have nested arrays
Specifying an array
• A special function is used to specify arrays
array( )
• Format of Usage
array( [key =>] value, … )
• A key is either a string or a non-negative
integer
• A value can be anything
Specifying an array (contd.)
• Format of array specification
array( [key =>] value, ... )
• Here is a hash array:
$mothers =
array (“tom"=>“mary", “mick"=>“ann", “bill"=>“orla");
• Implicit indices are integers, starting at 0
– Here is an ordinary array (indexed by integers,
starting at 0):
$places = array (“Cork”, “Dublin”, “Galway”);
Specifying an array (contd.)
• If an explicit integer index is followed by
implicit indices, they follow on from the
highest previous index
– Here is an array indexed by integers 1, 2, 3
$places = array (1 => “Cork”, “Dublin”, “Galway”);
– Here is an array indexed by integers 1, 5, 6
$places = array (5=> “Cork”, 1 => “Dublin”, “Galway”);
Specifying an array (contd.)
• A two-dimensional hash array
$parents =
array ( “tom” => array (“father” => “bill”, “mother”=> “mary”),
“dave” => array(“father” => “tom”, “mother” => orla”)
);
• A two-dimensional ordinary array
$heights =
array ( array (10,20),
array(100,200)
);
Array Example 1
<html>
<head><title>Array Demo</title></head>
<body>
<h1>Array Demo</h1>
<p>
<?php
$capital = array ('France'=>'Paris','Ireland'=>'Dublin');
echo 'The capital of Ireland is ';
echo $capital['Ireland'];
?>
</p>
</body>
</html>
Array Example 2
<html>
<head><title>Array Demo</title></head>
<body>
<h1>Array Demo</h1>
<p>
<?php
$capital = array ('France'=>'Paris', ‘Ireland'=>'Dublin');
echo "The various capitals are\n<ul>";
foreach ($capital as $city) { echo "<li>$city</li>"; };
echo "</ul>"
?>
</p>
</body>
</html>
Array Example 3
<html>
<head><title>Array Demo</title></head>
<body>
<h1>Array Demo</h1>
<p>
<?php
$capital = array ('France'=>'Paris', 'Ireland'=>'Dublin');
echo "The various capitals are\n<ul>";
foreach ($capital as $country => $city)
{ echo "<li>The capital of $country is $city</li>"; };
echo "</ul>"
?>
</p>
</body>
</html>
Array Example 4
<html>
<head>
<title>Details about Fred</title>
</head>
<body>
<h1>Details about Fred</h1>
<?php
$ages = array ("Fred" => 2, "Tom"=> 45);
$parents = array ("Fred" => array("father" => "Tom", "mother"=>"Mary"));
print "<p> Fred's age is ";
print $ages["Fred"];
print ".</p>";
print "<p>His father is ";
print $parents["Fred"]["father"];
print ".</p>";
?>
</body>
</html>
Array-manupulation functions
• PHP provides a huge set of array-manipulation
functions
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
array -- Create an array
array_change_key_case -- Returns an array with all string keys lowercased or
uppercased
array_chunk -- Split an array into chunks
array_count_values -- Counts all the values of an array
array_diff -- Computes the difference of arrays
array_filter -- Filters elements of an array using a callback function
array_flip -- Flip all the values of an array
array_fill -- Fill an array with values
array_intersect -- Computes the intersection of arrays
array_key_exists -- Checks if the given key or index exists in the array
array_keys -- Return all the keys of an array
array_map -- Applies the callback to the elements of the given arrays
array_merge -- Merge two or more arrays
array_merge_recursive -- Merge two or more arrays recursively
array_multisort -- Sort multiple or multi-dimensional arrays
array_pad -- Pad array to the specified length with a value
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
array_pop -- Pop the element off the end of array
array_push -- Push one or more elements onto the end of array
array_rand -- Pick one or more random entries out of an array
array_reverse -- Return an array with elements in reverse order
array_reduce -- Iteratively reduce the array to a single value using a callback function
array_shift -- Shift an element off the beginning of array
array_slice -- Extract a slice of the array
array_splice -- Remove a portion of the array and replace it with something else
array_sum -- Calculate the sum of values in an array.
array_unique -- Removes duplicate values from an array
array_unshift -- Prepend one or more elements to the beginning of array
array_values -- Return all the values of an array
array_walk -- Apply a user function to every member of an array
arsort -- Sort an array in reverse order and maintain index association
asort -- Sort an array and maintain index association
compact -- Create array containing variables and their values
count -- Count elements in a variable
current -- Return the current element in an array
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
each -- Return the current key and value pair from an array and advance the
array cursor
end -- Set the internal pointer of an array to its last element
extract -- Import variables into the current symbol table from an array
in_array -- Return TRUE if a value exists in an array
array_search -- Searches the array for a given value and returns the
corresponding key if successful
key -- Fetch a key from an associative array
krsort -- Sort an array by key in reverse order
ksort -- Sort an array by key
list -- Assign variables as if they were an array
natsort -- Sort an array using a "natural order" algorithm
natcasesort -- Sort an array using a case insensitive "natural order" algorithm
next -- Advance the internal array pointer of an array
pos -- Get the current element from an array
prev -- Rewind the internal array pointer
range -- Create an array containing a range of elements
reset -- Set the internal pointer of an array to its first element
•
•
•
•
•
•
•
rsort -- Sort an array in reverse order
shuffle -- Shuffle an array
sizeof -- Get the number of elements in variable
sort -- Sort an array
uasort -- Sort an array with a user-defined comparison function and maintain
index association
uksort -- Sort an array by keys using a user-defined comparison function
usort -- Sort an array by values using a user-defined comparison function
Objects
• PHP supports object-oriented
programming
• The subject is too big to cover here
• But here’s an example
<?php
class thingAMeBob
{
function say_hello()
{ echo “Hello, World!"; }
}
$thing1 = new thingAMeBob;
$thing1->say_hello();
?>
Resources
• This data type is used for maintaining links
to external resources, such as data bases etc.
• A full treatment is beyond our scope here
The NULL data type
• This data type contains only one value
NULL
• It is case-insensitive
• This is a value which is returned when some
expression has no value
• Example
$capital = array ('France'=>'Paris', 'Ireland'=>'Dublin');
$capitalOfEngland = $capital[‘England’];
• In this case, $capitalOfEngland would get
the value NULL
Cs 3314 got here on 7/11/2005
Changing Data Type
• PHP will, in some circumstances, change
the type of a datum
– For example, it will treat a string of digits as a
number if it finds in an arithmetic expression
• PHP also supports type casting
<?php $myInteger = 12;
$myFloat = 1.3;
$result = $myFloat + (float) $myInteger;
echo $result ?>
Automatic Variables (again)
• PHP’s automatic variables come from the
following sources:
–
–
–
–
–
the Environment
query expressions in GET requests
message bodies in POST requests
cookies
the Server
CGI environment variables
• CGI environment variables are automatically
available
• Example:
<html>
<head>
<title>What I know about you</title>
</head>
<body>
<h1>I know some things about you</h1>
<?php
echo "<p>You are using $HTTP_USER_AGENT to view this page.</p>";
echo "<p>You used the $REQUEST_METHOD request method.</p>";
echo "<p>You used this request URI: $REQUEST_URI.</p>";
echo "<p>You accessed this host URI: $HTTP_HOST.</p>";
echo "<p>You used this protocol: $SERVER_PROTOCOL.</p>";
?>
</body>
</html>
Form variables (via either GET or POST)
• These are automatically available
• Example Form:
<html>
<head><title>Application Form</title></head>
<body>
<form method="POST"
action="http://student.cs.ucc.ie/cs4400/jabowen/php/file9.php">
<p>Your surname: <input type="text" name="surname“></p>
<p>Your address: <input type="text" name="address“></p>
<button type="submit">Please send me the brochure.</button>
</form>
</body></html>
• Example Response Generator:
<html>
<head><title>Thank you</title></head>
<body>
<h1>Thank you</h1>
<p>Thank you,<?php echo $surname ?>.
We will send our brochure to <?php echo $address ?>.</p>
</body>
</html>
Control Structures – if statements
• if ($a > $b)
echo "a is bigger than b";
• if ($a > $b)
{print "a is bigger than b";
$b = $a;}
• if ($a > $b)
{print "a is bigger than b";}
else {print "a is NOT bigger than b";}
• if ($a > $b)
{print
elseif ($a ==
{print
else {print
"a is bigger than b";}
$b)
"a is equal to b";}
"a is smaller than b“;}
Example usage
• Example
<html>
<head><title>Your browser</title></head>
<body>
<h1>Your Browser</h1>
<p>
<?php
if( strstr($HTTP_USER_AGENT,"MSIE") )
{ echo "You are using Internet Explorer"; }
?>
to view this page.
</p>
</body>
</html>
• strstr is a boolean function which checks if
its 2nd argument is a substring of its 1st
• CS 3314 got here on 10 nov 2005
Control constructs -- while
• These are just like their counterparts in C
•
•
$i = 1;
while ( $i <= 10 )
{ echo $i++; }
$i = 0;
do { print $i;} while ($i>0);
Control constructs -- for
• These are just like their counterparts in C
• for
($i = 1; $i <= 10; $i++)
{ print $i;}
Control constructs -- foreach
• These are similar their counterparts in Perl
• foreach(array_expression
•
as $value)
statement
foreach(array_expression as $key => $value)
statement
Jumping in and out of PHP mode
• We can can jump in and out of PHP mode even in
the middle of a PHP block:
<?php
if(strstr($HTTP_USER_AGENT,"MSIE"))
{ ?> <p>You are using Internet Explorer</p> <?php }
else { ?> <p>You are not using Internet Explorer</p> <?php }
?>
• Instead of using an echo statement to print
something, we jumped out of PHP mode.
• Note that the logical flow of the PHP remains
intact
– Only one of the HTML blocks will be sent to the user.
A FORM and its handler in one file
<html>
<head>
<title>Application Handler</title>
</head>
<body>
<?php
if (!$surname)
{ ?> <form method="POST"
action="http://student.cs.ucc.ie/cs4400/jabowen/php/file012.php">
<p>Your surname: <input type="text" name="surname"></p>
<p>Your address: <input type="text" name="address"></p>
<button type="submit">Please send me the brochure.</button>
</form>
<?php }
else { echo "<p>Thank you, $surname.</p>";
echo "<p> We will write to you at $address.</p>";} ?>
</body>
</html>
• cs 3314 got here on 13 nov 2005
One request for this resource:
no Query or Message Body
interzone.ucc.ie> telnet student.cs.ucc.ie 80
Trying 143.239.211.125...
Connected to student.cs.ucc.ie.
Escape character is '^]'.
GET http://student.cs.ucc.ie/cs4400/jabowen/php/file012.php HTTP/1.1
Host: student.cs.ucc.ie
Response to request with no query or message body
HTTP/1.1 200 OK
Date: Fri, 08 Feb 2002 11:21:40 GMT
Server: Apache/1.3.20 (Unix) PHP/4.0.6
X-Powered-By: PHP/4.0.6
Transfer-Encoding: chunked
Content-Type: text/html
160
<html>
<head><title>Application Handler</title></head>
<body>
<form method="POST"
action="http://student.cs.ucc.ie/cs4400/jabowen/php/file012.php">
<p>Your surname: <input type="text" name="surname"></p>
<p>Your address: <input type="text" name="address"></p>
<button type="submit">Please send me the brochure.</button>
</form>
</body>
</html>
0
Connection closed by foreign host.
interzone.ucc.ie>
Another request – containing a query
interzone.ucc.ie> telnet student.cs.ucc.ie 80
Trying 143.239.211.125...
Connected to student.cs.ucc.ie.
Escape character is '^]'.
GET http://student.cs.ucc.ie/cs4400/jabowen/php/file012.php?surname=doyle HTTP/1.1
Host: student.cs.ucc.ie
Response to request containing a query
HTTP/1.1 200 OK
Date: Fri, 08 Feb 2002 11:31:01 GMT
Server: Apache/1.3.20 (Unix) PHP/4.0.6
X-Powered-By: PHP/4.0.6
Transfer-Encoding: chunked
Content-Type: text/html
88
<html>
<head><title>Application Handler</title></head>
<body>
<p>Thank you, doyle.</p><p> We will write to you at .</p></body>
</html>
0
Connection closed by foreign host.
interzone.ucc.ie>
Finding out about your PHP environment
• One of the many pre-defined PHP
functions is phpinfo()
<html>
<body>
<h1>Your PHP Environment</h1>
<?php phpinfo(); ?>
</body>
</html>
• In what follows, notice that mySQL
support is enabled
A mysql database
mysql>
mysql> use cs4400db
mysql> select * from student;
+------------+------+------------+
| name
| sex | birth
|
+------------+------+------------+
| john brown | m
| 1980-01-05 |
| bill brown | m
| 1980-11-23 |
+------------+------+------------+
mysql>
A PHP program which displays this database
<html>
<head><title>The Student Database</title></head>
<body>
<h1>The Student Database</h1>
<?php
$db = mysql_connect("localhost", "root", “myRealPassword");
mysql_select_db("cs4400db",$db);
$result = mysql_query("SELECT * FROM student",$db); ?>
<table rules=all>
<thead><tr><th>Name</th><th>Sex</th><th>Position</th></tr></thead>
<tbody>
<?php
while ($myrow = mysql_fetch_row($result))
{ printf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>\n",
$myrow[0], $myrow[1], $myrow[2]);
} ?>
</tbody>
</table>
</body>
</html>
• cs 3314 got here on 17 nov 2005
Cs3314 GOT TO HERE ON 9/12/2004
File upload form
<html>
<head>
<title>Upload a File</title>
</head>
<body>
<h1>Upload a File</h1>
<form enctype="multipart/form-data" method="post" action="uploadFile.php">
<p>File to Upload:
<input type="file" name=“file1" size="30"></p>
<p><button type="submit“> "Upload File“</button></p>
</form>
</body>
</html>
• cs 3314 got here on 21 nov 2005
File upload script
<?php
if ( $file1_name != "“ )
{ copy("$file1", "/full/path/to/your/target/directory/$file1_name")
or die("Could not copy the file! Are directory permissions correct?");
else { die(“You did not specify an input file"); } ?>
<html>
<head>
<title>File Received</title>
<body>
<h1>File Received</h1>
<p>The following file has been received:
<?php echo “$file1_name"; ?>, containing <?php echo “$file1_size"; ?> bytes
and of MIME type <?php echo “$file1_type"; ?>
.</p>
</body>
</html>
}
• Normally, when a browser sends HTML
form data in the message body of a POST
request, the value in the CONTENT-TYPE
header is:
application/x-www-form-urlencoded
• The new attribute, enctype, in the FORM
tag tells the browser that it should send the
following value in the CONTENT-TYPE
header:
multipart/form-data
Controlling Headers/Status lines with PHP
Sending Headers in PHP
• You have seen that, if you use the CGI protocol,
you can have complete control over the status line
and headers that are sent in a HTTP response – to
do so, you must use nph files
• PHP does not seem to provide the same level of
control
– For example, it seems to prevent one sending status
lines involving status codes that you have invented
yourself – even though HTTP allows this
• Nevertheless, PHP does enable you to have some
control over status lines and response headers
Sending Headers in PHP (contd.)
• PHP provides a built-in function, header(), which can be
used to set HTTP header lines in a response message
– The function name is mis-leading – it can also, within limits, be
used to control the HTTP status line
• Format:
header ( some-string [, some-boolean]);
• Example calls:
header('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM‘,false);
• By default, a second header of the same type will replace
an earlier one of the same type
– If false is sent as the optional boolean parameter, the header will
not replace an earlier one of the same type
Sending Headers in PHP (contd.)
• PHP treats two type of call to header() in a special
way
• If you use header() to send a Location: header,
PHP will auatomatgically change the code in the
status line of the response to be 302 (REDIRECT)
• The second special case is any header that starts
with the string, "HTTP/" (case is not significant)
– this will be used, within the limits of predefined
standard values, to control the status line
– header("HTTP/1.0 404 Not Found");
• CS 607 got here on 27 Feb 2003
• Igat wanpela meri em i slip finis long displa
de
• Introduced php handling of multiple
selections in forms
User-authentication in PHP
• The header() function can be used to send headers
requiring authentication
– This will cause a browser to pop up a
username/password/realm dialog window and
– When the values have been provided, send a new
request back to the same page containing the
appropriate information
• This time, some special PHP variables will be set:
$PHP_AUTH_USER,
$PHP_AUTH_PW and
$PHP_AUTH_TYPE
User-authentication in PHP (contd.)
• The code below captures the user’s name and password
• An improved version would check this against the contents of
some file
<?php
if (!isset( $PHP_AUTH_USER ))
{header("HTTP/1.0 401 Unauthorized");
header("WWW-Authenticate: Basic realm=\“Bank
Accounts\"");
echo “You must identify yourself.";}
else { echo "<p>Hello $PHP_AUTH_USER.</p>";
echo "<p>Your password is $PHP_AUTH_PW </p>"; }
?>
• CS 607 got here on 4 March 2003
User-authentication in PHP (contd.)
• The PHP_AUTH variables will not be set if external
authentication is enabled for that particular page.
– This is to prevent a script which reveals the password for a page
that was protected through a traditional external mechanism, such
as the .htpasswd mechanism
• In this case, the $REMOTE_USER variable can be used to
identify the externally-authenticated user.
Handling Cookies in PHP
• PHP provides a function called setcookie() which can be used to
send cookies to a browser
– Since cookies are sent in HTTP headers, this function must be
called before any ordinary content (such as HTML) is sent
• Cookies sent from a broswer to a client will be converted into
automatically created variables – just like those that are created
to present data which come in GET and POST requests
Image Handling
• As well as generating dynamic HTML, PHP can generate and
manipulate images
<?php
header("Content-type: image/png");
$string=implode($argv," ");
$im = imageCreateFromPng("images/button1.png");
$orange = ImageColorAllocate($im, 220, 210, 60);
$px = (imagesx($im)-7.5*strlen($string))/2;
imageString($im,3,$px,9,$string,$orange);
imagePng($im);
imageDestroy($im);
?>
Download