Errata


Print Print Icon

Submit your own errata for this product.


The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.


Color Key: Serious Technical Mistake Minor Technical Mistake Language or formatting error Typo Question



Version Location Description Submitted By Corrected
Printed Page xvii

"XML-RPL" NOW READS "XML-RPC"

Anonymous  Feb 2003
Printed Page xx
Acknowledgments

"Thanks also our reviewers"

NOW READS

"Thanks also to our reviewers"

Anonymous  Feb 2003
Printed Page 2
Table 1-1

The escape sequences
{
}
[
]
are incorrect.

Anonymous 
Printed Page 6
4th line of code under Discussion

// NOW READS: /*

Anonymous  Jan 2004
Printed Page 6
5th line of code under Discussion

*/ HAS BEEN ADDED to end of line.

Anonymous  Jan 2004
Printed Page 7
all comment lines in code

Spurious // HAS BEEN DELETED from the end of each comment line

Anonymous  Feb 2003
Printed Page 36
1st paragraph in 2.11 Discussion

The return values, not the arguments, for asin(), acos(), and atan() are in radians. The arguments for these functions are dimensionless.

NOW READS:
"These functions assume that all angles are in radians, not degrees."

Anonymous  Feb 2006
Printed Page 37
2.12 Solution code

NOW READS:
$cosine = cos(deg2rad($degree));
$degree = rad2deg(acos($cosine));

Anonymous  Feb 2006
Printed Page 49
Table 3-3 in the date() column for the minute row

I

NOW READS:
i

Anonymous  Apr 2005
Printed Page 73
line 19 of the code

print "</tr>
";
if ($day < $totaldays) { print '<tr>'; }

NOW READS:
if ($day < $totaldays) { print "</tr>
<tr>"; }

Anonymous  Apr 2005
Printed Page 75
top of the page

"Chapter 4" was listed twice at the top of the page. This HAS BEEN CORRECTED.

Anonymous  Feb 2003
Printed Page 77
1st paragraph

"overwrites the value of 'Apple'.

NOW READS:
"overwrites the value of 'Apples'.

Anonymous  Jan 2004
Printed Page 93
Recipe 4.11

The order of the parameters were also inversed for in_array, first code line under Solution:

NOW READS:
if (in_array($value, $array)) {


Anonymous  Feb 2003
Printed Page 94
Recipe 4.12

The order of the parameters of the function were inversed.

array_search ($array, $value)

NOW READS:
array_search ($value, $array)

Anonymous  Feb 2003
Printed Page 97
1st full sentence at top of page

The code shown finds only the value of the largest element, not the index as
advertised. Additionally, it takes O(n log n) time, but it takes only O(n) time to
find the largest element and its index using a simple algorithm:
$ind = 0;
for ($i = 1; $i < count($array); $i++)
if ($array[$i] > $array[$ind])
$ind = $i;
// $ind now contains the index of the maximum element

Anonymous 
Printed Page 107
IN PRINT: Solution - line 4

array_intersection()

NOW READS:
array_intersect()

Anonymous  Feb 2003
Printed Page 126
bottom of the page

See Also
Recipe 10.7 for information on escaping data for a database

NOW READS:
See Also
Recipe 10.9 for information on escaping data for a database

Anonymous  Apr 2005
Printed Page 167
See Also

"Recipe 7.11 for defining a call dynamically"

NOW READS

"Recipe 7.12 for defining a class dynamically"

Anonymous  Feb 2003
Printed Page 197, 198
Recipe 8.19

Inside the pc_debug() function in the first code block of the Solution, inside pc_debug() in the first code block of the
Discussion, inside pc_debug() and in the if()/elseif() statement in the last
code block of the Discussion:

"defined(DEBUG)"

NOW READS:

"defined('DEBUG')

Anonymous  Feb 2003
Printed Page 234
Recipe 9.9

the second line from the bottom: "456" HAS BEEN REFORMATTED in bold, like the line "123" before it.

Anonymous  Jan 2004
Printed Page 239
the 23rd line from the top of the page

INSERT INTO zodiac VALUES (8,'Scorpio','Scorpion','Mars','water',20,24,11,21);

NOW READS:
INSERT INTO zodiac VALUES (8,'Scorpio','Scorpion','Mars','water',10,24,11,21);

Anonymous  Jan 2004
Printed Page 243
the line

ftruncate($fp,0)

NOW READS:
ftruncate($fh,0)

Anonymous  Apr 2005
Printed Page 244
Recipe 10.2

In the following code, the DBM handle was missing for dba_replace and dba_insert.
The code at the bottom of page 244 NOW READS:

$dbh = dba_open('fish.db','c','gdbm') or die($php_errormsg);

// retrieve and change values
if (dba_exists('flounder',$dbh)) {
$flounder_count = dba_fetch('flounder',$dbh);
$flounder_count++;
dba_replace('flounder',$flounder_count, $dbh);
print "Updated the flounder count.";
} else {
dba_insert('flounder',1, $dbh);
print "Started the flounder count.";
}

The DBM handle was also missing in the code at the top of page 245;
This code NOW READS:

// what fish do we have?
for ($key = dba_firstkey($dbh); $key !== false; $key = dba_nextkey($dbh)) {
$value = dba_fetch($key, $dbh); =>
print "$key: $value
";
}

The DBM handle was also missing in the code at the bottom of page 246;
This code NOW READS:

// read in and unserialize the data
if ($exists = dba_exists($_REQUEST['username'], $dbh)) {
$serialized_data = dba_fetch($_REQUEST['username'], $dbh) or die($php_errormsg);
$data = unserialize($serialized_data);
} else {
$data = array();
}

The DBM handle was also missing for dba_replace and dba_insert, in the code at the top of page 247.
This code NOW READS:

// write data back to file
if ($exists) {
dba_replace($_REQUEST['username'],serialize($data), $dbh);
} else {
dba_insert($_REQUEST['username'],serialize($data), $dbh);
}

Anonymous  Feb 2003
Printed Page 259
fourth non-code paragraph, second sentence

"if you call DB:quote()"

NOW READS:
"if you call DB::quote()"

Anonymous  Jan 2004
Printed Page 265
IN PRINT: Recipe 10.12, The seventh line from the bottom of the page

printf('<tr><td>%s: </td><td><input type="text" name="%s" value="%s">,

NOW READS:
printf('<tr><td>%s: </td><td><input type="text" name="%s" value="%s">',

Anonymous  Feb 2003
Printed Page 267
(actually on page 268) 10.13 Making Paginated Links...Solution code

Code lines at top of page 268:

$sth = $dbh->query('SELECT * FROM zodiac ORDER by id');
$pager = new DB_Pager($sth, $offset, $per_page);
$data = $pager->build();

// display each row on this page
while ($v = $pager->fetchRow()) {
print "$v->sign, $v->symbol ($v->id)<br>";
}

NOW READ:

$sth = $dbh->limitQuery('SELECT * FROM zodiac ORDER by id', $offset,
$per_page);
// display each row on this page
while ($v = $sth->fetchRow()) {
print "$v->sign, $v->symbol ($v->id)<br>";
}
$data = DB_Pager::getData($offset, $per_page, $sth->numRows());

Anonymous  Jan 2004
Printed Page 326
code line before See Also

xslt_close() NOW READS xslt_free()

Anonymous  Feb 2003
Printed Page 326
Under "Solution"

The link -

http://xmlrpc-epi.sourceforge.net/sample/utils/utils.php

NOW READS:
http://xmlrpc-epi.sourceforge.net/xmlrpc_php/index.php

Anonymous  Jan 2004
Printed Page 363
IN PRINT: code listing near the top of the page

mysql_connect('localhost',$_ENV['MYSQL_USER'],$_ENV['MYSQL_PASSWORD']);

NOW READS:
mysql_connect('localhost',$_SERVER['MYSQL_USER'],$_SERVER['MYSQL_PASSWORD']);

Anonymous  Feb 2003
Printed Page 365

$hash = md5($secret_word . $id);

NOW READS:
$hash = md5($secret_word . $cookie_value);

Anonymous  Jan 2004
Printed Page 381
code under "Solution"

$cmd = "echo $msg | HOME=$home_dir

NOW READS:
$cmd = "echo $message_body | HOME=$home_dir

Anonymous  Jan 2004
Printed Page 391
15.4 solution for postscript type1 fonts

ImageString($image, 'I love PHP....

NOW READS:
ImagePSText($image, 'I love PHP...

Anonymous  Jan 2004
Printed Page 418
end of Example 16-1

Missing final } HAS BEEN ADDED.

Anonymous  Feb 2003
Printed Page 422
In Recipe 16.9, the 4th line from the bottom

$classname = "pc_MC_$locale.php";

NOW READS:
$classname = "pc_MC_$locale";

Anonymous  Jan 2004
Printed Page 430
IN PRINT: 8th block of code

$headers = $mime->headers($headers);
$body = $mime->get();

NOW READS:
$body = $mime->get();
$headers = $mime->headers($headers);

Anonymous  Feb 2003
Printed Page 430
8th block of code

$headers = $mime->headers($headers);
$body = $mime->get();

NOW READS:
$body = $mime->get();
$headers = $mime->headers($headers);

Anonymous  Feb 2006
Printed Page 431
5th and 8th blocks of code

$headers = $mime->headers($headers);
$body = $mime->get();

NOW READS:
$body = $mime->get();
$headers = $mime->headers($headers);

Anonymous  Feb 2006
Printed Page 444
Solution: line 7 of code counting blank lines.

$info

NOW READS:
$e

Anonymous  Apr 2005
Printed Page 445
recipe 17.7, In paragraph 4,

"connect to an specific LDAP server"

NOW READS:
"connect to a specific LDAP server."

Anonymous  Jan 2004
Printed Page 449
last paragraph ("See Also")

gethostbyaddrl

NOW READS:
gethostbynamel()

Anonymous  Feb 2003
Printed Page 451
17.11 Solution

The book describes a beta version of Net_Whois. Between the time we wrote
the chapter and Net_Whois 1.0, there were
some backwards incompatible changes made to the API. Net_Whois::query() is
no longer a static method

Previously the Solution was:

require 'Net/Whois.php';
$server = 'whois.networksolutions.com';
$query = 'example.org';
$data = Net_whois::query($server, $query);

The Solution NOW READS:

require 'Net/Whois.php';
$server = 'whois.networksolutions.com';
$query = 'example.org';

$whois = new Net_Whois;
$data = $whois->query($server, $query);

In discussion on page 452, the line
"print Net_Whois::query('whois.internic.net', 'example.org');"

NOW READS::
$whois = new Net_Whois;
print $whois->query('example.org', 'whois.internic.net');

Anonymous  Apr 2005
Printed Page 482
The very last line of the page: "passes it two arguments: 12 and 56."

NOW READS:
"passes it two arguments: 12; and 56."

Anonymous  Feb 2003
Printed Page 504
Recipe 19.9

Recipe 19.9 IS NOW titled "Processing All Files in a Directory Recursively."
("Recursively" was missing)

Anonymous  Jan 2004
Printed Page 590
index

the entry for median() which points to page 138 HAS BEEN CHANGED to mean()

Anonymous  Jan 2004