|
|
| 訂正箇所 |
改訂 刷数 |
内容 |
P.105
下から2行目
|
2刷
|
| 誤 |
三項演算子 [レシピ023] を使った以下の記述と同じ意味になりますが、
|
| 正 |
三項演算子 [レシピ023] を使った以下の記述と同じ結果になりますが、
|
|
P.117
表3.1、\Wの説明
|
未定
|
| 誤 |
アルファベット、数字、アンダースコア
|
| 正 |
単語構成文字。[a-zA-Z0-9_]とは異なる可能性があるので注意
|
以下の本書公式サイトもあわせてご参照ください。
http://php-recipe.com/?p=483
|
|
P.132
表3.5
|
4刷
|
| 誤 |
h | 「全角ひらがな」を「全角カタカナ」に変換
c | 「全角カタカナ」を「全角ひらがな」に変換
|
| 正 |
h | 「全角ひらがな」を「全角カタカナ」に変換
H | 「半角カタカナ」を「全角ひらがな」に変換
c | 「全角カタカナ」を「全角ひらがな」に変換
|
|
P.157
1つ目のリスト
|
2刷
|
| 誤 |
echo date('Y年m月d日', '1237827055');
|
| 正 |
echo date('Y年m月d日', 1237827055);
|
|
P.157
2つ目のリスト
|
2刷
|
| 誤 |
echo strtotime('+1 day', '1237827055');
|
| 正 |
echo strtotime('+1 day', 1237827055);
|
|
P.163
本文4行目
|
2刷
|
| 誤 |
変換できます。
|
| 正 |
変換できます。なお、P480のNOTEも参照してください。
|
|
P.174
中段、「月初日の曜日を元にして第1○曜日の日付を求めます。」の2行目
|
6刷
|
| 誤 |
if($firstday < 0)
|
| 正 |
if($firstday <= 0)
|
|
P.186
図(実行結果)の下に本文を追加
|
4刷
|
| 追加情報 |
PEAR::Calendarパッケージのバージョン0.5.4にはバグがあります。
詳細は、http://php-recipe.com/?p=300を参照してください。
|
|
P.257、259
ソースコード
|
4刷
|
| 誤 |
ファイルを読み取りモードで開きます。
$fp = fopen($fileName, 'rb');
|
| 正 |
ファイルを読み取りモードで開きます。
$fp = fopen($fileName, 'rb');
if (!is_resource($fp)) {
die(' ファイルを開けませんでした。 ');
}
|
|
P.333
グラフ内のx(下部)
|
2刷
|
| 誤 |
0 10 20 30 40 50 60 70 80 90 100
|
| 正 |
1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
|
|
P.401
本文3~4行目
|
2刷
|
| 誤 |
そこで、@(エラー制御演算子)レシピ254でNoticeエラーが出ないようにしています。
|
| 正 |
そこで、isset()レシピ167で変数がセットされているか確認して処理しています。
|
|
P.466
本文、下から1行目
|
4刷
|
| 誤 |
urlencode()関数で元に
|
| 正 |
urldecode()関数で元に
|
|
P.473、476
「NOTE」の上
|
2刷
|
| 誤 |
以下の文章を追加します。
|
| 正 |
PHP4またはMySQL 4.0(ロリポップなど)の環境ではサンプルコードの修正が必要となります。P.526のNOTE「MySQLの文字エンコード指定」を参照してください。
|
|
P.474
リスト最終行の網掛け部
|
2刷
|
| 誤 |
$flagの値の判定します。
|
| 正 |
$flagの値を判定します。
|
|
P.480
ページ下部
|
2刷
|
| 誤 |
以下の文章を追加します。
|
| 正 |
NOTE
strtotimeの2038年問題
32ビットシステム上でのタイムスタンプの有効な範囲は、通常、1901年12月13日 20:45:54 UTCから2038年1月19日 03:14:07 UTCまでです。この範囲を超える日付はstrtotime()関数では扱えませんので注意してください。
PHP5.2以降ではDateTimeクラスを使うことでこの問題を解決できます。
|
|
P.503
9~14行目
|
未定
|
| 誤 |
# getimagesize()関数で画像かどうかの判定をします。
$checkImage = @getimagesize($_FILES['uploadfile']['tmp_name'][$i]);
if ($checkImage == FALSE) {
$error .= '画像ファイルをアップロードしてください<br />';
} else if ($imgType != $checkImage['mime']) {
$error .= '拡張子が異なります<br />';
} else if ($_FILES['uploadfile']['size'][$i] > 102400) {
|
| 正 |
# getimagesize()関数で画像かどうかの判定をします。
$checkImage = @getimagesize($_FILES['uploadfile']['tmp_name'][$i]);
$type = $checkImage[2]; // 画像タイプを取得
if ($checkImage == FALSE) {
$error .= '画像ファイルをアップロードしてください<br />';
} else if ($extension == 'gif' && $type != IMAGETYPE_GIF) {
$error .= '拡張子が異なります<br />';
} else if ($extension == 'png' && $type != IMAGETYPE_PNG) {
$error .= '拡張子が異なります<br />';
} else if ($extension == 'jpg' && $type != IMAGETYPE_JPEG) {
$error .= '拡張子が異なります<br />';
} else if ($_FILES['uploadfile']['size'][$i] > 102400) {
|
以下の本書公式サイトもあわせてご参照ください。
http://php-recipe.com/?p=457
|
|
P.503
下から21~23行目
|
未定
|
| 誤 |
# ここでは格納ディレクトリの下に「"upfile_" + 現在のタイムスタンプ + 連番 + 拡張子」で配置します。
$moveTo = $filePath . '/upfile_' . time() . $i . '.' . $extension;
|
| 正 |
# ここでは格納ディレクトリの下に「"upfile_" + 現在のタイムスタンプ + 連番 + "_" + マイクロ秒と元ファイル名とアクセス元IPアドレスに基づくMD5 + 拡張子」で配置します。
$moveTo = $filePath . '/upfile_' . time() . $i . '_' . md5(microtime() . $_FILES['uploadfile']['name'][$i] . $_SERVER['REMOTE_ADDR']) . '.' . $extension;
|
以下の本書公式サイトもあわせてご参照ください。
http://php-recipe.com/?p=457
|
|
P.511
リスト中ほど
|
2刷
|
| 誤 |
PEAR::Net_POP3をインクルードします。
require_once('Net/POP3.php');
|
| 正 |
PEAR::Net_POP3をインクルードします。
require_once 'Net/POP3.php';
|
|
P.515
リスト内
|
5刷
|
| 誤 |
echo '<p>' . $ipaddress . ' → ' . gethostbyaddr($ipaddress) . '</p>';
|
| 正 |
echo '<p>' . h($ipaddress) . ' → ' . h(gethostbyaddr($ipaddress)) . '</p>';
|
|
P.515
リスト内
|
5刷
|
| 誤 |
echo '<p>ユーザー: ' . $ipaddress . ' → ' . gethostbyaddr($ipaddress) . '</p>';
|
| 正 |
echo '<p>ユーザー: ' . h($ipaddress) . ' → ' .
h(gethostbyaddr($ipaddress)) . '</p>';
function h($string) { // HTMLでのエスケープ処理をする関数
return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}
|
|
P.516
リスト内
|
5刷
|
| 誤 |
echo '<p>' . $hostname . ' → ' . gethostbyname($hostname) . '</p>';
|
| 正 |
echo '<p>' . h($hostname) . ' → ' . h(gethostbyname($hostname)) . '</p>';
function h($string) { // HTMLでのエスケープ処理をする関数
return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}
|
|
P.549
リストの1つ目の網掛け(作成するテーブル~)部分
|
2刷
|
| 誤 |
$newTable = 'id INT(2) NOT NULL AUTO_INCREMENT PRIMARY KEY, ' .
'data VARCHAR(100) NOT NULL';
|
| 正 |
$newTable = '`id` INT(2) NOT NULL AUTO_INCREMENT PRIMARY KEY, ' .
'`data` VARCHAR(100) NOT NULL';
|
|
P.549
リストの2つ目の網掛け(テーブルを追加する~)部分
|
2刷
|
| 誤 |
$sql = sprintf("CREATE TABLE example2 (%s) ENGINE=MyISAM " .
"DEFAULT CHARSET=utf8",
mysql_real_escape_string($newTable));
|
| 正 |
$sql = sprintf("CREATE TABLE `example2` (%s) ENGINE=MyISAM " .
"DEFAULT CHARSET=utf8",
$newTable);
|
|
P.549
リストの2つ目の網掛け(// ロリポップの場合)部分
|
2刷
|
| 誤 |
// $sql = sprintf("CREATE TABLE example2 (%s) ENGINE=MyISAM ",
// mysql_real_escape_string($newTable));
|
| 正 |
// $sql = sprintf("CREATE TABLE `example2` (%s) ENGINE=MyISAM ",
// $newTable);
|
|
P.550
2つ目のリスト
|
2刷
|
| 誤 |
$sql = sprintf("CREATE TABLE example2 (%s) ENGINE=MyISAM ",
mysql_real_escape_string($newTable));
|
| 正 |
$sql = sprintf("CREATE TABLE `example2` (%s) ENGINE=MyISAM ",
$newTable);
|
|
P.559
ソースコード中ほど
|
4刷
|
| 誤 |
$fp = fopen($file, 'r');
while (!feof($fp)) {
$line = fgets($fp));
|
| 正 |
$fp = fopen($file, 'r');
if (!is_resource($fp)) {
die(' ファイルを開けませんでした。 ');
}
while (!feof($fp)) {
$line = fgets($fp));
|
|
P.601
一番下の網囲み
|
5刷
|
| 誤 |
htmlspecialchars('文字列', ENT_QUOTES)
|
| 正 |
htmlspecialchars('文字列', ENT_QUOTES, '文字エンコード')
|
|
P.602
上から2行目
|
5刷
|
| 誤 |
可能性があります。
|
| 正 |
可能性があります。第3引数の詳細は、http://php-recipe.com/?p=377を参照してください。
|
|
P.616
「クエリを準備します」の上の部分
|
2刷
|
| 誤 |
if (mysqli_connect_errno()) {
die('データベースエラー');
}
|
| 正 |
if (mysqli_connect_errno()) {
die('データベースエラー');
}
//文字エンコードの指定
else if (!mysqli_set_charset($link, 'utf8')) {
die('データベースエラー');
}
|
1つ目の「die('データベースエラー');」の開始位置も変更します。
|
|
P.650
下から2行目
|
2刷
|
| 誤 |
三項演算子 [レシピ023] を使った以下の記述と同じ意味になりますが、
|
| 正 |
三項演算子 [レシピ023] を使った以下の記述と同じ結果になりますが、
|
|
P.731
INDEX「C」
|
2刷
|
| 誤 |
CREATE TABLE文・・・・548
CSRF・・・・・・・・・・・・・・・438,608
|
| 正 |
CREATE TABLE文・・・・548
cron・・・・・・・・・・・・・・・・712,714
CSRF・・・・・・・・・・・・・・・438,608
|
|
P.737
INDEX「S」
|
2刷
|
| 誤 |
strtotime()関数・・・・・157、163、479
注意点・・・・・・・・・・・175
strtoupper()関数・・・・125
|
| 正 |
strtotime()関数・・・・・157、163、479
2038問題・・・・・・・・・480
注意点・・・・・・・・・・・175
年の桁数・・・・・・・・・480
strtoupper()関数・・・・125
|
|
P.vii
「レンタルサーバー動作確認マークについて」1行目
|
2刷
|
|
|
ページ上に戻る
|