九天社の跡地です…
2001.8.29-2008.6.10


PHPの薬箱
エラー・トラブル回避のテクニックとセキュリティ対策

 表紙

PHPの常備薬が満載!

よく効く「お薬」がここにあります。


※在庫があれば上記サイトで
 入手できます。

[著]佐久嶋ひろみ
[監]

[価格]2,940 円(税込)
[判型]A5判/472頁
[初版]2006/11/15 
[ISBN]4-86167-140-X

 本書について

 PHPは世界No.1のシェアを持つ、サーバサイドスクリプト言語です。PHPは現時点で、2000万以上のドメインにインストールされています。Google、Yahoo !、YouTubeや、日本では楽天など、多くの大企業/大規模サイトで採用されています。

 PHPは最初、初心者でも簡単に使えるスクリプト言語として人気を博していましたが、現在では大規模開発もにも耐えられる高い機能と性能が認められています。PHP5になってからオブジェクト機能やXML関係、PDO(PHP Data Objects)などの機能が強化され、PHPスクリプトを実行するZendエンジンの改良により実行速度も改善されました。また最近はCMS(Content Management System)やMVCフレームワークの登場により、大規模なサイトでも短期間で構築できるようになりました。  さらにPHPではAjax、Webサービス、RSSなどの最新技術にも素早く反応し、画期的なツールが登場します。Web2.0を支える技術として欠かせないのが、オープンソースのサーバサイドスクリプトPHPであると確信しています。PHPサイトやPHPユーザが増える一方、PHPはハッカーのターゲットにもなっています。最新技術のチェックと同時に、セキュリティ情報のチェックも欠かせない状況です。

 このようなことを念頭に、本書ではPHPの陥りやすいミスや習得すべきポイントをピックアップし、簡潔にまとめました。またPHPの知識だけではなく、Webアプリケーション開発においてPHPに関係する周辺の知識についても説明しています。本格的な大規模サイトを目指すPHP技術者が効率よく問題解決し、ステップアップできるように本書を執筆しました。

 なお、本書は執筆時点で最新のPHP 4.4.4およびPHP 5.1.6で動作確認をしています。

2006年9月
佐久嶋ひろみ

 目次

第1章 環境構築

Q101 日本語対応のためのディレクティブを教えてください 
Q102 php.iniのディレクティブを.htaccessで変更できません 
Q103 PHPのページをブラウザで表示しようとしたらソースコードが表示されました 
Q104 URLにindex.phpを指定しないとアクセスできないのですが 
Q105 cgi版でPHPを動かしたいのですがどのようにすればよいのですか? 
Q106 phpinfo()が実行できません 
Q107 PHP5でdate()を使うとStrict Standards:というメッセージが表示されます 
Q108 エラーメッセージに表示されるリンクはなんですか? 

第2章 トラブルシューティングとTips

Q201 大量のNoticeが出力されています 
Q202 'Warning: ... headers already sent ...'と出ます 
Q203 特定の処理においてはエラーを無視したいのですが 
Q204 デバッグのためトレースをする方法はありますか 
Q205 シングルクォートとダブルクォートの違いは? 
Q206 requireとincludeの違いは何ですか 
Q207 チェックボックスの値を受け取るにはどうすればよいですか? 
Q208 別のページに飛ばすにはどのようにすればよいですか? 
Q209 日本語のWebページの文字化けはどうしたら防げますか 
Q210 フォームで送信された値が文字化けします 
Q211 <form>で送信された「表示」という文字が「表\示」となります 

第3章 セキュリティ

Q301 セーフモードonとoffではどのような違いがありますか? 
Q302 セキュリティを考慮したエラーの出力方法は? 
Q303 クロスサイトスクリプティングとは何ですか? 
Q304 入力値のチェック方法は? 
Q305 PhpInclude.wormとは何ですか? 
Q306 NULLバイトアタック対策とは何ですか? 
Q307 SQLインジェクションとは何ですか? 
Q308 OSコマンドインジェクション対策はどのようにすればよいですか? 
Q309 ディレクトリ・トラバーサルとは何ですか? 
Q310 セッションクッキーでセキュア属性を指定することはできますか? 
Q311 セッションハイジャックとは何ですか? 
Q312 セキュア属性を指定したらサイト内でセッションを継続できません 

第4章 関数とライブラリ

Q401 関数の引数の個数を可変とすることはできますか 
Q402 関数で複数の値を返すことはできますか? 
Q403 30日前の日付を求めることはできますか? 
Q404 URLからホスト名を求めたいのですが 
Q405 正規表現を使った文字列置換はできますか 
Q406 文字コードを変換したら文字化けします 
Q407 マルチバイト文字列を特定のサイズで切り捨てたいのですが 
Q408 ereg_replace()で「Warning: REG_EBRACK」という警告が出ます 
Q409 テキストフィールドで半角カナを禁止したいのですが 
Q410 メールが文字化けするのですが 
Q411 メールの宛先の名前が文字化けしてます 
Q412 半角カタカナが送信できません 
Q413 メールで添付ファイルを送りたいのですが 
Q414 画像を合成することはできますか 
Q415 写真に日本語の文字を入れることはできますか 
Q416 動的にグラフを生成することはできますか 
Q417 グラフに日本語の文字列を入れることはできますか 
Q418 お問い合わせフォームでアンチスパム画像を表示したいのですが 
Q419 データをPDF形式で出力したいのですが 
Q420 既存のPDF文書にPDFlibで文字列を挿入することはできますか 
Q421 PDFlibブロックとは何ですか 

第5章 PEAR

Q501 alphaバージョンのPEARパッケージのインストールはどのようにするのですか? 
Q502 PEARのインストールで「Did not download dependencies」となりました 
Q503 PEARパッケージのインストールでWARNINGが出ます 
Q504 "Fatal error: Cannot instantiate non-existent class"となります 
Q505 HTML_QuickFormではどんなフォームが作れますか 
Q506 HTML_QuickFormのautocompleteとは何ですか? 
Q507 フォームで日付を入力してもらう簡単な方法は? 
Q508 2つの選択部品を連動させたいのですが 
Q509 HTML_QuickFormでの検証はクライアント/サーバのどちらで行われますか? 
Q510 フィルタの結果がデータに反映されていません 
Q511 AuthではユーザID、パスワードはどこに保存するのですか? 
Q512 DBにパスワードを登録するにはどのようにすればいいですか? 
Q513 ログイン認証に有効期限を設定できますか? 
Q514 AuthとAuth_HTTPはどのように違うのですか? 
Q515 Text_CAPTCHAとは何ですか? 
Q516 ユーザが読み取った文字列の正誤を判断するのはどうすればよいのですか? 
Q517 XML_RSSとは何ですか? 
Q518 XML_RSSでcontent:encodedの内容が表示されません 
Q519 Services_Googleがインストールできません 
Q520 Services_Googleでは1度に10件以上の検索結果を表示できますか? 
Q521 Services_Googleの検索結果が文字化けしました 
Q522 Services_Amazonとは何ですか? 
Q523 Services_Amazonでは検索条件はどのように指定するのですか? 
Q524 商品画像の情報が得られません 
Q525 指定するパラメータや返り値の情報を簡単に知る方法は? 
Q526 HTML_AJAXとは何ですか? 
Q527 リモートクラスを実行するにはどのようにするのですか? 
Q528 Proxyクラスとは何ですか 
Q529 オートロードクラスと何ですか? 

第6章 データベース

Q601 MySQLのデータベースにアクセスするにはどのようにするのですか? 
Q602 MySQLでテーブルの作成はできますか? 
Q603 MySQLでイメージデータを格納できますか? 
Q604 PHP5ではMySQLは使えますか? 
Q605 mysqlとmysqliはどのように違いますか 
Q606 プリペアドステートメントとは何ですか 
Q607 PostgreSQLのデータはどうやったらアクセスできますか 
Q608 pg_insert()とpg_query()でINSERT文を実行するのではどこが違いますか? 
Q609 PostgreSQLでイメージデータを格納できますか 
Q610 ラージオブジェクトとbyteaデータ型はどのように違いますか? 
Q611 SQLiteはPHP4でも使えますか 
Q612 データベースへの書き込みができません 
Q613 大量の更新処理のスピードを向上させるには? 
Q614 SQLiteはオブジェクト指向で記述することはできますか 
Q615 データベースの文字列にシングルクォートを含めるにはどうしたらいいですか 
Q616 PDOとは何ですか 
Q617 DSNの書き方を教えてください 
Q618 問い合わせのエラーを例外でキャッチすることはできますか 
Q619 トランザクションはどのように実行すればよいですか 
Q620 プリペアドステートメントはどのように実行すればよいですか 
Q621 ラージオブジェクトデータはどのように読み込めばよいですか 

第7章 クラスとオブジェクト

Q701 PHP4のクラスはそのままPHP5でも動きますか 
Q702 オーバーライドとは何ですか 
Q703 子クラスにオーバーライドされないメソッドを作れますか? 
Q704 オーバーライドされたメソッドを呼び出すことはできますか? 
Q705 インスタンスを生成せずにメソッドやプロパティを参照することはできますか? 
Q706 クラスにおける定数はどのように記述すればいいですか 
Q707 public, private, protectedの違いは何ですか? 
Q708 アクセサメソッドとは何ですか? 
Q709 抽象クラスは何のためのクラスですか 
Q710 インターフェースと抽象クラスはどのように違いますか? 
Q711 多重継承は可能ですか 
Q712 コンストラクタ内で親クラスのコンストラクタを実行したいのですが 
Q713 オーバーロードとは何ですか 
Q714 勝手にプロパティを追加できないようにできますか 
Q715 __autoload()を使うとどのようなことができますか? 
Q716 オブジェクトの比較は==と===でどのように違いますか 
Q717 catch節で親クラスと子クラスはどのような順番で記述したらよいですか? 
Q718 class_exists()で__autoload()を呼ばないようにしたいのですが 
Q719 Standard PHP Libraryとは何ですか? 
Q720 イテレータとは何ですか? 
Q721 Factory Methodパターンとは何ですか 
Q722 Abstract Factoryパターンとは何ですか 
Q723 Singletonパターンとは何ですか 
Q724 Observerパターンとは何ですか 
Q725 Template Methodパターンとは何ですか 

第8章 XMLとWebサービス

Q801 XML文書を解析するにはどのようにすればよいですか? 
Q802 SimpleXMLで解析したオブジェクトはどのような構造をしていますか? 
Q803 SimpleXMLで名前空間を指定して要素を参照できますか? 
Q804 DOMとSimpleXMLはどのように違いますか 
Q805 DOMで指定した要素名の要素を参照するにはどのようにすればよいですか? 
Q806 DOMで指定したid属性の要素を参照するにはどのようにすればよいですか? 
Q807 DOMのルートノードから順番に辿るにはどうしたらよいですか? 
Q808 DOMで要素を追加することはできますか? 
Q809 DOMでDTDの検証を行うにはどのようにすればよいですか? 
Q810 DOMの例外処理はどのようにすればよいですか 
Q811 PHPにSAXパーサはありますか 
Q812 XMLパーサのイベントハンドラとは何ですか? 
Q813 XMLパーサで要素名や属性名がすべて大文字になってしまいます 
Q814 名前空間を使用したXML文書はどのようにパースしたらいいですか 
Q815 XMLReaderとは何ですか 
Q816 XMLReaderは名前空間に対応していますか 
Q817 XMLReaderパーサでは妥当性の検証はサポートされていますか? 
Q818 RSSフィードを解析するにはどうしたらいいですか? 
Q819 Webサービスとは何ですか 
Q820 SOAPクライアントプログラムの作成方法を教えてください 
Q821 SOAPサーバプログラムの作成方法を教えてください 
Q822 複雑な構造のパラメータや返り値を受け渡すことはできますか 
Q823 SOAPリクエストおよびレスポンスの内容を出力できますか? 
Q824 SOPAプログラムのエラー処理はどのようにすればよいですか? 
Q825 WSDLを使ってWebサービスを実装するにはどうしたらよいですか? 

第9章 テンプレートとフレームワーク

Q901 Smartyとは何ですか 
Q902 Smartyで配列の値をループで出力するにはどうすればよいですか 
Q903 テンプレート変数にデフォルト値を設定するにはどうすればいいですか? 
Q904 Smartyのmailto関数のencode属性はどのような目的で使用するのですか 
Q905 テンプレートを複数のファイルに分割できますか 
Q906 Zend Frameworkとは何ですか? 
Q907 index.phpでは何をすればよいですか? 
Q908 コントローラやアクションを指定するにはどうすればよいですか? 
Q909 パラメータはどのように指定したらいいですか? 
Q910 ビューヘルパーとは何ですか? 
Q911 Zend Frameworkでデータベースにアクセスするにはどうしたらいいですか? 
Q912 設定ファイルはどのような形式で記述すればよいですか? 
Q913 キャッシュデータはどのように保存されますか? 
Q914 Zend_FilterとZend_Filter_Inputはどのように違いますか? 
Q915 Zend_Feed::import()ではRSSとAtomのどちらを解析できますか? 
Q916 symfonyとは何ですか? 
Q917 Symfonyのサイトを構築するにはどのようにすればよいですか? 
Q918 インストールしたモジュールを変更するにはどこを修正すればよいですか? 
Q919 symfonyのトップページのコンテンツを変更するにはどうすればよいですか? 
Q920 トップページに表示するモジュールを変更できますか? 
Q921 URLの最後に拡張子をつけることはできますか? 
Q922 リンクヘルパーとは何ですか? 
Q923 JavaScriptヘルパーとは何ですか? 
Q924 AJAXヘルパーとは何ですか? 
Q925 フォームヘルパーとは何ですか? 
Q926 フォームの入力値をチェックするにはどうしたらよいですか? 
Q927 symfonyでデータベースにアクセスするにはどうしたらよいですか? 
Q928 symfonyサイトの一部をアクセス制限をするには、どのようにすればよいですか? 

 サポート情報

【訂正】

場所:P.303

サンプルコード 30、43行目

誤: protected function html_header()

正: protected function page_header()