「PHP4徹底攻略」実戦編 サポートページ 


[PHP徹底攻略 実戦編] このページでは、ソフトバンク・パブリッシング社刊行の 「PHP4徹底攻略 実戦編」についてサポートを行います。

「PHP4徹底攻略 実戦編」の目次を参照可能です。

「PHP4徹底攻略」については、「PHP4徹底攻略」サポートページ をごらんください。

「PHP4徹底攻略 実戦編」正誤表(最終更新日:2004/5/18)

誤記訂正

第1部

頁/行 内容 本書への反映
P.14の15行目
誤:
グローバル変数$nameでアクセスできます。
正:
グローバル変数$fooでアクセスできます。
2刷以降で修正済み。
P.27の14,16行目
       誤:html_specialchars()
       正:htmlspecialchars()
      
4刷以降で修正予定。
P.28の3行目
誤:
パスワード:<input type="password" name="pass">

正:
パスワード:<input type="password" name="password">
2刷以降で修正済み。
P.36の下から9行目
誤:(図3-1の画面2)
正:(図3-1の画面3)
2刷以降で修正済み。
P.41の表3.3 表3.3(P.41)の6項目目のsession.entropy_fileの説明が冗長です。
誤:session_entropy_length = 16
正:削除
同様に7項目目のsession.entropy_lengthの説明が冗長です。
誤:session_entropy_file = /dev/urandom;Vine 2.1などの場合
正:削除
4刷以降で修正予定。
P.41の表3.3 9項目目
誤:session.lifetime
正:session.cookie_lifetime

16項目目
誤:session.use_cookie
正:session.use_cookies
4刷以降で修正予定。
P.41の表3-3 また、 12項目目のsession.referer_checkの説明に誤りがあります。
誤:

設定パラメータ名 変数型 説明
--------------------------------------------------------------
session.referer_check 論理値 1を指定した場合、外部サイトのセッション
乗っ取りを防止するためにHTTP Refererを
チェックする(デフォルト:0)
--------------------------------------------------------------

正:
設定パラメータ名 変数型 説明
--------------------------------------------------------------
session.referer_check 文字列 HTTP Refererにこのオプションで指定した
文字列が現れる場合にのみセッションを有効とする
(デフォルトは設定なし)。セッション乗っ取りの対策
として有効(詳細は2.5.8節参照)。
--------------------------------------------------------------
2刷以降で修正済み。
P.44の表3-6 6項目目:
 		誤:session_get_cookie_param()
 		正:session_get_cookie_params()
 		
13項目目:
 		誤:session_set_cookie_param()
 		正:session_set_cookie_params()
 		
4刷以降で修正予定。
P.48の傍注7 誤:「register-globals」-> 正:「register_globals」 2刷以降で修正済み。
P.49のformタグが閉じていない HTMLタグに誤記があります。
誤:<form action="session1.php?<?php echo SID;?>" method="POST">カウント
アップ</a>
正:<a href="session1.php?<?php echo SID;?>">カウントアップ</a>
     
この2行下についても、
誤:
<form action="session1.php?PHPSESSID=26c9267294dbf8df7a6094a33e875096" 
method="POST">カウントアップ</a>
正:
<a href="session1.php?PHPSESSID=26c9267294dbf8df7a6094a33e875096">
カウントアップ</a>
4刷以降で修正予定。
P.50の2行目 誤:「mod_rewriting」-> 正:「mob_rewrite」 4刷以降で修正予定。
P.50の18行目 「shop.php?PHPSESSID=」と26c92...5096の間の空白が余分です。 4刷以降で修正予定。
P.51の5〜7行目
誤:
<?php
if ($logout){ // ユーザがログアウトした場合
session_destroy(); // セッション情報を破棄
}
?>

正:
<?php
if ($logout){ // ユーザがログアウトした場合
$_SESSION = array(); // 全てのセッション情報の定義をクリア
session_destroy(); // セッション情報を破棄
}
?>
2刷以降で修正済み。
P.68 リスト4-5
4行目
誤:「is_authenticated()」 -> 正: 「$auth->is_authenticated()」 3刷以降で修正済み。 (付録CD-ROMの該当部分については4刷以降で修正予定。)
P.73 リスト4-8
4〜6行目
誤:「$POST_」 -> 正: 「$_POST」 2刷以降で修正済み。
P.84 下から2行目 誤:「Smart」 -> 正: 「Smarty」 4刷以降で修正予定。
P.87 リスト5-5
5行目
誤:「#bodyBgColor」 -> 正: 「#bodyBgColor#」 3刷以降で修正済み。
P.91
6行目
誤:
$tpl->assign("opts",array("鈴木"=>100,"佐藤"=>101,"木村"=>"102"));
正:
$tpl->assign("opts",array(100=>"鈴木",101=>"佐藤",102=>"木村"));
3刷以降で修正済み。
P.92
表5-4の5行目
誤:
content_sentences
正:
count_sentences
4刷以降で修正予定。
P.101
1行目と4行目
誤:
$_SEERVER['HTTP_USER_AGENT']
正:
$_SERVER['HTTP_USER_AGENT']
4刷以降で修正予定。
リスト6-3(P.112)の10行目、リスト6-5 (P.117)の57行目
誤: die(sprintf( "XML error %s at line $d",
正: die(sprintf( "XML error %s at line %d",
3刷以降で修正済み。
P.114
リスト6-4 33行目〜35行目
誤:
if ($current != ITEM) {
 $channel[$current] .= trim($data);
]
正:
if ($current != "ITEM") {
 $channel[$current] .= trim($data);
}
4刷以降で修正予定。
P.115の15行目
誤:end_element($parser, $name)
正:rss_end_element($parser, $name)
2刷以降で修正済み。
P.121の下から2行目
誤: 名前空間に関数情報が渡されます
正: 名前空間に関する情報が渡されます。
4刷以降で修正予定。
P.122の下から3行目
誤: xml_parser_create_ns()
正: xml_parser_create()
4刷以降で修正予定。
リスト6-9 (P.123〜P.124)の51行目
誤: die(sprintf( "XML error %s at line $d",
正: die(sprintf( "XML error %s at line %d",
4刷以降で修正予定。
P.126の15行目
誤:dump_mem()
正:dumpmem()
3刷以降で訂正済み。
P.127表6-2
誤:
属性   型   説明
正:
要素型 値  説明
2刷以降で修正済み。
P.129 9行目 リスト6-1 → リスト6-2 3刷以降で訂正済み。
P.129 リスト6-11 [15行目](CD-ROMも同様)
誤:childlen();
正:children();

[18行目]
誤:$channel->new_child("item","");
正:$child->new_child("item","");
3刷以降で訂正済み。
P.135の4行目と17行目 誤:「リスト6-6」-> 「リスト6-12」 2刷以降で修正済み。
P.146下から15行目
誤:http://night.fminn.nagano.nagano.jp/php4/
正:ftp://night.fminn.nagano.nagano.jp/php4/
      
2刷以降で修正済み。
P.147の5行目
誤:--enable-string -> 正:--enable-mbstring
なお、索引の対応する部分(P.468)も同様に訂正します。
2刷以降で修正済み。
P.159下から6行目
誤:第2バイト:0x21" 〜 0x7A
正:第2バイト:0x21 〜 0x7A
2刷以降で修正済み。
P.163の6行目
誤:
echo preg_replace_callback('\\x1b\$([E-G])([\x21-\x7a])
+\x0f/',out_str,$str);
正:
echo preg_replace_callback('\x1b\$([E-G])([\x21-\x7a])
+\x0f/',out_str,$str);
2刷以降で修正済み。
P.165下から16行目
誤:「--mbstr_enc_trans」-> 正:「--enable-mbstr-enc-trans」 2刷以降で修正済み。
P.175の3行目
誤:「図8-2」-> 正:「図8-3」 2刷以降で修正済み。
P.196の表9-3
誤: int apcinfo([string uri))
正: int apcinfo([string uri])
2刷以降で修正済み。
P.220の図11-3,11-4 図11-3,11-4(P.220)は誤って異なる図が記載されています。    
正しくはこちらを参照下さい。:図11-3図11-4
2刷以降で修正済み。

第2部

頁/行 内容 本書への反映
P.268〜P.269 リスト2-2の47行目 誤:「$to」-> 正:「$_POST['to']」 4刷以降で修正予定。
P.310の9行目 誤:「MB_TTF_DIR」-> 正:「MBTTF_DIR」 2刷以降で修正済み。
P.316の19行目 誤:「patch -p < 」-> 正:「patch -p0 < 」 4刷以降で訂正予定。

第3部

頁/行 内容 本書への反映
P.330の7〜12行目
誤:
することが可能です。こちらを指定する場合は
12行目のコメント(dnl)を以下のように外します。
[ --with-foo Includes foo support])
一方、後者(--enable-foo)の形式は、ソースコードの中に実装した機能を
有効にする場合に使用され、通常は外部ライブラリの機能を使用しません。
この場合は18行目のコメントを以下のように外します。
[ --enable-foo Enable foo support])

正:
することが可能です。こちらを指定する場合は10〜12行目のコメント(dnl)を
以下のように外します。
PHP_ARG_WITH(foo, for foo support,
[ --with-foo Includes foo support])
 一方、後者(--enable-foo)の形式は、ソースコードの中に実装した機能を
有効にする場合に使用され、通常は外部ライブラリの機能を使用しません。
この場合は16〜18行目のコメントを以下のように外します。

PHP_ARG_ENABLE(foo, whether to enable foo support,
[ --enable-foo Enable foo support])
2刷以降で修正済み。
P.337の15行目 誤: 「$ buildconf」-> 正:「$ ./buildconf」 2刷以降で修正済み。
 P.341の表1-1 誤:「vodi」 -> 正:「void」
(関数efree(),erealloc()の説明)
2刷以降で修正済み。
P.344の下から10行目 誤:「ZEND_NUM_ARGD()」-> 正「ZEND_NUM_ARGS()」 2刷以降で修正済み。
P.345の下から9行目
誤:php_error(in level, char *str [, ...])
正:php_error(int level, char *str [, ...])
2刷以降で修正済み。

第4部

頁/行 内容 本書への反映
P.382下から8行目〜P.383の3行目 誤:
  cd phplib-7.4-pre1
  cp -r pages /home/httpd/html
  mkdir /usr/local/lib/php/phplib
  cp -r php/* /usr/local/lib/php/phplib/
  
  PHP 4.1.1では関数の引数にリファレンスで変数を渡す記法である
&の使用が推奨されていないため、この記法を使用すると警告が発せ
られます。PHPlib 7.4pre1ではphp/user.incでこの定義を使用して
いるため、修正を行います。CD-ROMに収録してあるパッチ*1を以下の
ように適用してください。
  
 patch -p0 < /mnt/cdrom/code/part4/chap1/phplib-7.4-pre1-callref.patch
  
 次に、PHPlibの拡張子を.php3から.phpに変更します。

*1) すでにパッチをあててあり、本書で使用するサブクラスの定義を
含んだPHPlibをCD-ROM(/mnt/cdrom/code/part4/chap1/phplib/)に
収録してあります。
正:
cd phplib-7.4-pre1

 PHP 4.1.0以降で推奨されないリファレンス記法(&)の修正と
グローバル変数を直接参照する機能を無効とした状態
(register_globals=Off)でPHPlibを使用可能とするパッチを
適用します。*1

gzip -cd phplib-7.4-pre1-callref.patch.gz | patch -p1
gzip -cd phplib-7.4-pre1-global.patch.gz | patch -p1

 この後、PHPlibをインクルードパスを設定したディレクトリ
(ここでは/usr/local/php/phplib/)にコピーします。

cp -r pages /home/httpd/html
mkdir /usr/local/lib/php/phplib
cp -r php/* /usr/local/lib/php/phplib/

 次に、PHPlibの拡張子を.php3から.phpに変更します。

*1) これらの修正パッチ及びパッチ適用済みで本書で使用する
サブクラスの定義を含んだPHPlibを本書のサポートページ
(http://www.geocities.jp/rui_hirokawa/php/php-book2/)
から取得可能です。
2刷以降で修正済み。

第5部

頁/行 内容 本書への反映
P.413 リスト5-1の5行目
誤:
$res = $db->query("select * from otenki") // クエリ実行
正:
$result = $db->query("select * from otenki") // クエリ実行
3刷以降で修正予定。
P.426の上から3行目
誤:
$ tar /mnt/cdrom/archive/xzvf apache_1.3.23.tar.gz
正:
$ tar xzvf /mnt/cdrom/archive/core/apache_1.3.23.tar.gz
3刷以降で修正予定。
P.428の下から6行目
誤:
$ tar xzvf /mnt/cdrom/archive/postgresql-7.2.tar.gz
正:
$ tar xzvf /mnt/cdrom/archive/core/postgresql-7.2.tar.gz
3刷以降で修正予定。
P.429の上から6行目
誤:
$ make test
正:
$ make check
3刷以降で修正予定。
P.431の下から3行目
誤:
$ ./configure --with-apxs=/usr/local/apache/bin/apxs \
正:
$ ./configure \
2刷以降で修正済み。
P.434の4〜6行目
Apacheの設定ファイルhttpd.confに以下のような記述があるので
先頭のコメント記号(#)を削除し、設定を有効にします。
#AddType application/x-httpd-php .php
との記述がありますが、 本書が対象とするApacheのバージョン(1.3.21)にはこの記述があるものの、 これ以降のバージョン(1.3.26等)には存在しません。 この場合、以下のような記述をhttpd.confに追加して下さい。
AddType application/x-httpd-php .php
3刷以降で注記を追加予定。

PHPlib 7.4pre1 用パッチ

PHP 4.1.0以降で推奨されないリファレンス記法(&)の修正及び グローバル変数を直接参照する機能を無効とした状態 (register_globals=Off)でPHPlibを使用可能とするパッチです。

なお、本書の出版後、2003/1/14にphplib 7.4-pre2、 2003/9/9にphplib 7.4がリリースされています。 これらのバージョンでは既に下記の変更が行われており、パッチ適用の必要はありません。 PHPlibの最新版(7.4)はhttp://phplib.sourceforge.net/から入手可能です。 [2004/3/6追記]


phplib-7.4-pre1-callref.patch.gz
phplib-7.4-pre1-global.patch.gz
[修正パッチ適用済みのPHPlib]:
パッチ済みのPHPlib

補足および付録CD-ROMの問題

本項では、本書の説明における補足事項および付録CD-ROMに収録されているコンテンツに関する問題について記述します。
  1. CD-ROMに入力されているPHPlibユーザ管理用スクリプト/code/part4/chap1/user_admin.phpのコードの一部に不備があり、register_globals = Offの場合の動作に支障があります。69行目を以下のように修正して下さい。
    誤:$permlist = addslashes(implode($perms,","));
    正: $permlist = addslashes(implode($_POST['perms'],","));
    
  2. 本書で解説を行っているグラフ作成用クラスライブラリjpgraph は、本書の執筆後も改良が行われ、2003年3月現在でバージョン1.11 となっています。 このバージョンでは、 本書CD-ROMに収録しているパッチはそのままでは適用できません。 jpgrah-1.11で日本語TrueTypeフォント(東風フォント)を利用可能にする パッチ (という程のものではありませんが。。。) を作成しましたので、お試しください。東風フォント以外 を利用の方は適宜フォント名を書き換えてください。
  3. Part-1 3.4.3「セッションIDの受け渡し」P.58 13行目に 以下のコードがあります。
    header("Location: ".$PROTOCOL. "://".$HTTP_HOST.$this->self_url());
    
    register_globalsを無効とした状態で使用可能とするパッチを適用した場合 は、以下のコードとなります。
    header("Location: ".$PROTOCOL . "://".
    $HTTP_SERVER_VARS['HTTP_HOST'].$this->self_url());
    
  4. Part-5 Chapter.3「Microsoft Windows環境へのPHPのインストール」では、 PHP 4.1.1/ Apache 1.3.23を対象として解説を行っています。   本書執筆後にセキュリティ上の問題が発見されていますので、それぞれ、   PHP 4.1.2/ Apache 1.3.24への更新を推奨します。
  5. P.28のリスト2.7、P.29のリスト2.8に記述しているグローバル変数配列 $_post は、通常 $_POSTとする方が良いでしょう。
  6. P.45〜P.48に書かれている説明に現れる「画面1」及び「画面2」という表現は図番との対応が分かりにくいですが、それぞれ、「画面1(図3−4)」、「画面2(図3−5)という意味です。また、図3-4の表題「図3-4 注文入力画面(shop.php)」(P.45)は、 「図3-4 商品選択画面(shop.php)」とするべきでしょう。
  7. P.52 リスト3-4、2〜5行目のインデントは不要です。

セキュリティ関連情報

本書で、解説するソフトウエアについて見つかっているセキュリティ上の留意事項についてまとめます。
  1. Apacheのバージョン1.3.24までとApache2のバージョン2.0.36までの 、「チャンクされたエンコーディング」()機能において 特定のプラットフォームにおいてDoS (Denial of Service)を受けたり、 リモートから管理者権限でコマンドを実行されるセキュリティホール が見つかっています。 詳細は、Apache Foundationのアドバイザリを参照下さい。 対策として、1.3系列は1.3.26、2.x系列は2.0.39へのバージョンを更新することを 推奨します。なお、本書が対象とするバージョン1.3.23にもこのセキュリティホールが存在するため、バージョン更新が必要です。
  2. osCommerce (TEP)においては、デフォルトの状態でcatalog/includes/にアクセス制限がないため、catalog/includes/include_once.php等に直接アクセスされる可能性があります。以下のように記述した catalog/includes/.htaccessを作成するか、 httpd.confによる同様のアクセス制限を設定して下さい。
    <Files *.php>
    order deny, allow
    deny from all
    <Files>
  3. MS-Windows版のPHP 4.1.1のCGI実行モジュール及びApache 1.3.23については、セキュリティホールが見つかっています。それぞれ、PHP 4.1.2及びApache 1.3.24に更新されることを推奨します。

リンク先更新

本書ではいくつかの情報の入手先としてURLを記載していますが、 以下のURLはサイトの移動等によりURLが変更されています。
  1. T.B.D.

「PHP4徹底攻略 実戦編」に関して、 ご指摘事項等ございましたら、廣川 <rui_hirokawa@ybb.ne.jp> までメールにてお知らせ下さい。

第2部(Chapter 1.「基本的なアプリケーションの開発」及びChapter 2.4「イメージリストの作成」)サポートページ
第1部 Chapter 10「クラス」サポートページ

[PHPページに戻る]