Web Programming Step by Step

Lecture 8
PHP File I/O and Query Parameters

Reading: 5.4 - 5.5

Except where otherwise noted, the contents of this presentation are Copyright 2009 Marty Stepp and Jessica Miller.

Valid XHTML 1.1 Valid CSS!

5.4: Advanced PHP Syntax

Functions (5.4.1)

function name(parameterName, ..., parameterName) {
	statements;
}
function quadratic($a, $b, $c) {
	return -$b + sqrt($b * $b - 4 * $a * $c) / (2 * $a);
}

Calling functions

name(expression, ..., expression);
$x = -2;
$a = 3;
$root = quadratic(1, $x, $a - 2);

Default parameter values

function name(parameterName, ..., parameterName) {
	statements;
}
function print_separated($str, $separator = ", ") {
	if (strlen($str) > 0) {
		print $str[0];
		for ($i = 1; $i < strlen($str); $i++) {
			print $separator . $str[$i];
		}
	}
}
print_separated("hello");        # h, e, l, l, o
print_separated("hello", "-");   # h-e-l-l-o

Variable scope: global and local vars

$school = "UW";                   # global
...

function downgrade() {
	global $school;
	$suffix = "Tacoma";             # local

	$school = "$school $suffix";
	print "$school\n";
}

6.1: Parameterized Pages

Query strings and parameters (6.1.1)

URL?name=value&name=value...
http://www.google.com/search?q=Obama
http://example.com/student_login.php?username=stepp&id=1234567

Query parameters: $_REQUEST (6.4.2)

$user_name = $_REQUEST["username"];
$id_number = (int) $_REQUEST["id"];
$eats_meat = FALSE;
if (isset($_REQUEST["meat"])) {
	$eats_meat = TRUE;
}

5.4: PHP File Input/Output

PHP file I/O functions (5.4.5)

function name(s) category
file, file_get_contents,
file_put_contents
reading/writing entire files
basename, file_exists, filesize,
fileperms, filemtime, is_dir,
is_readable, is_writable, disk_free_space
asking for information
copy, rename, unlink,
chmod, chgrp, chown,
mkdir, rmdir
manipulating files and directories
glob, scandir reading directories

Reading/writing files

contents of foo.txt file("foo.txt") file_get_contents("foo.txt")
Hello
how are
you?

I'm fine
array(
	"Hello\n",    # 0
	"how are\n",  # 1
	"you?\n",     # 2
	"\n",         # 3
	"I'm fine\n"  # 4
)
"Hello\n
how are\n
you?\n
\n
I'm fine\n"

Reading/writing an entire file

# reverse a file
$text = file_get_contents("poem.txt");
$text = strrev($text);
file_put_contents("poem.txt", $text);

Appending to a file

# add a line to a file
$new_text = "P.S. ILY, GTG TTYL!~";
file_put_contents("poem.txt", $new_text, FILE_APPEND);
old contents new contents
Roses are red,
Violets are blue.
All my base,
Are belong to you.
Roses are red,
Violets are blue.
All my base,
Are belong to you.
P.S. ILY, GTG TTYL!~

The file function

# display lines of file as a bulleted list
$lines = file("todolist.txt");
foreach ($lines as $line) {
	?>
	<li> <?= $line ?> </li>
	<?php
}

Unpacking an array: list

list($var1, ..., $varN) = array;
$values = array("stepp", "17", "m", "94");
...
list($username, $age, $gender, $iq) = $values;

Fixed-length files, file and list

contents of input file personal.txt
Marty Stepp
(206) 685-2181
570-86-7326
list($name, $phone, $ssn) = file("personal.txt");
...

Splitting/joining strings

$array = explode(delimiter, string);
$string = implode(delimiter, array);
$s  = "CSE 190 M";
$a  = explode(" ", $s);     # ("CSE", "190", "M")
$s2 = implode("...", $a);   # "CSE...190...M"

Example with explode

contents of input file names.txt
Martin D Stepp
Jessica K Miller
Victoria R Kirst
foreach (file("names.txt") as $name) {
	list($first, $mid, $last) = explode(" ", $name);
	?>

	<p> author: <?= $last ?>, <?= $first ?> </p>

	<?php
}

author: Stepp, Marty

author: Miller, Jessica

author: Kirst, Victoria

Reading directories

function description
scandir returns an array of all file names in a given directory
(returns just the file names, such as "myfile.txt")
glob returns an array of all file names that match a given pattern
(returns a file path and name, such as "foo/bar/myfile.txt")

glob example

# reverse all poems in the poetry directory
$poems = glob("poetry/poem*.dat");
foreach ($poems as $poemfile) {
	$text = file_get_contents($poemfile);
	file_put_contents($poemfile, strrev($text));
	print "I just reversed " . basename($poemfile);
}

scandir example

<ul>
	<?php
	$folder = "taxes/old";
	foreach (scandir($folder) as $filename) {
		?>
		<li> <?= $filename ?> </li>
		<?php
	}
	?>
</ul>
  • .
  • ..
  • 2007_w2.pdf
  • 2006_1099.doc