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 エラーメッセージに表示されるリンクはなんですか?
- Q102 php.iniのディレクティブを.htaccessで変更できません
- 第2章 トラブルシューティングとTips
- Q201 大量のNoticeが出力されています
- Q202 'Warning: ... headers already sent ...'と出ます
- Q203 特定の処理においてはエラーを無視したいのですが
- Q204 デバッグのためトレースをする方法はありますか
- Q205 シングルクォートとダブルクォートの違いは?
- Q206 requireとincludeの違いは何ですか
- Q207 チェックボックスの値を受け取るにはどうすればよいですか?
- Q208 別のページに飛ばすにはどのようにすればよいですか?
- Q209 日本語のWebページの文字化けはどうしたら防げますか
- Q210 フォームで送信された値が文字化けします
- Q211 <form>で送信された「表示」という文字が「表\示」となります
- Q202 'Warning: ... headers already sent ...'と出ます
- 第3章 セキュリティ
- Q301 セーフモードonとoffではどのような違いがありますか?
- Q302 セキュリティを考慮したエラーの出力方法は?
- Q303 クロスサイトスクリプティングとは何ですか?
- Q304 入力値のチェック方法は?
- Q305 PhpInclude.wormとは何ですか?
- Q306 NULLバイトアタック対策とは何ですか?
- Q307 SQLインジェクションとは何ですか?
- Q308 OSコマンドインジェクション対策はどのようにすればよいですか?
- Q309 ディレクトリ・トラバーサルとは何ですか?
- Q310 セッションクッキーでセキュア属性を指定することはできますか?
- Q311 セッションハイジャックとは何ですか?
- Q312 セキュア属性を指定したらサイト内でセッションを継続できません
- Q302 セキュリティを考慮したエラーの出力方法は?
- 第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ブロックとは何ですか
- Q402 関数で複数の値を返すことはできますか?
- 第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 オートロードクラスと何ですか?
- Q502 PEARのインストールで「Did not download dependencies」となりました
- 第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 ラージオブジェクトデータはどのように読み込めばよいですか
- Q602 MySQLでテーブルの作成はできますか?
- 第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パターンとは何ですか
- Q702 オーバーライドとは何ですか
- 第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サービスを実装するにはどうしたらよいですか?
- Q802 SimpleXMLで解析したオブジェクトはどのような構造をしていますか?
- 第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サイトの一部をアクセス制限をするには、どのようにすればよいですか?
- Q902 Smartyで配列の値をループで出力するにはどうすればよいですか
■ サポート情報
【訂正】
場所:P.303
サンプルコード 30、43行目
誤: protected function html_header()
正: protected function page_header()