目次
Part-1 PHP ~overview
1章 PHP概論
1.1 PHPとは
- 1.1.1 PHPとは
- 1.1.2 PHPの歴史
- 1.1.3 本書の概要
- 1.1.4 コーディングスタイル
1.2 Webアプリケーションの仕組み
- 1.2.1 WebサーバとWebブラウザ
- 1.2.2 インストールとドキュメントルートの設定
- 1.2.3 Linux(CentOS/Fedora)
- 1.2.4 Linux(Debian/Ubuntu)
- 1.2.5 Mac OS X
- 1.2.6 Windows
- コラム Skypeを利用している場合の注意点
- 1.2.7 ドキュメントルートの設定確認
- 1.2.8 ソースからのインストール
1.3 PHPの処理の流れ
- 1.3.1 モジュールとCGI
- 1.3.2 CLI
- 1.3.3 コンパイルと実行
Part 2 PHPの言語仕様
2章 PHPの基本
2.1 基本的な構文
- 2.1.1 サンプルプログラム
- 2.1.2 PHPブロック
- 2.1.3 文
- 2.1.4 コメント
- 2.1.5 出力
- 2.1.6 echo文とvar_dump()関数
- 2.1.7 識別子
- 2.1.8 予約語
- 2.1.9 エラー
2.2 変数
- 2.2.1 PHPの変数
- 2.2.2 可変変数
- 2.2.3 変数のスコープ
- 2.2.4 定義済み変数
- 2.2.5 スーパーグローバル変数
2.3 定数
- 2.3.1 定数定義
- 2.3.2 constants()関数
- 2.3.3 定義済み定数
2.4 エラー
- 2.4.1 エラーとは
- 2.4.2 エラーの種類とエラー定数
- 2.4.3 例外
- 2.4.4 エラーに関する設定
3章 型と演算子
3.1 型
- 3.1.1 PHPの型
- 3.1.2 整数
- 3.1.3 浮動小数点
- 3.1.4 文字列
- コラム 比較演算を行う場合の注意点
- 3.1.5 論理型
- 3.1.6 配列
- 3.1.7 オブジェクト
- 3.1.8 リソース
- 3.1.9 null
- 3.1.10 型変換
3.2 演算子
- 3.2.1 PHPの演算子
- 3.2.2 三項演算子
- 3.2.3 演算子の優先順位
- 3.2.4 その他の演算子
3.3 配列
- 3.3.1 PHPの配列
- 3.3.2 配列の初期化
- 3.3.3 連想配列
- 3.3.4 多次元配列
- 3.3.5 PHPの配列の特徴のまとめ
- 3.3.6 配列の演算
4章 制御構造と関数
4.1 制御構造
- 4.1.1 プログラムの構成要素と制御構造
- 4.1.2 if-elseif-else
- 4.1.3 制御構造に関する別の構文
- 4.1.4 while
- 4.1.5 do-while
- 4.1.6 for
- 4.1.7 foreach
- 4.1.8 break
- 4.1.9 continue
- 4.1.10 switch
- 4.1.11 return
- 4.1.12 exit
- 4.1.13 require/require_once
- 4.1.14 include/include_once
- 4.1.15 goto
4.2 関数
- 4.2.1 関数の基本
- 4.2.2 関数の定義
- 4.2.3 関数の呼び出し
- 4.2.4 参照による引数と返り値
- 4.2.5 無名関数
- 4.2.6 定義済み関数
5章 クラスとオブジェクト
5.1 クラス
- 5.1.1 PHPのクラス
- 5.1.2 クラスの定義
- 5.1.3 プロパティ
- 5.1.4 定数
- 5.1.5 メソッド
- 5.1.6 コンストラクタとデストラクタ
- コラム PHP 4とPHP 5のコンストラクタ
- 5.1.7 継承
- 5.1.8 標準クラスとキャスト
- 5.1.9 抽象クラス
5.2 インターフェイス
- 5.2.1 インターフェイスの定義と実装
- 5.2.2 定義済みインターフェイス
- 5.2.3 インターフェイスのチェック
5.3 クラスとオブジェクトの機能と特徴
- 5.3.1 マジックメソッド
- 5.3.2 遅延静的束縛
- 5.3.3 オートロード
5.4 名前空間
- 5.4.1 PHPの名前空間
- 5.4.2 名前空間の定義
- 5.4.3 インポートルール
- 5.4.4 名前解決
5.5 例外
- 5.5.1 PHPの例外
- 5.5.2 定義済みの例外
- 5.5.3 例外の拡張
- 5.5.4 PHPのエラーと例外
5.6 参照
- 5.6.1 参照とは
- 5.6.2 参照変数の扱い
- 5.6.3 オブジェクトの参照
- コラム PHP 4のオブジェクトの参照
- 5.6.4 リファレンスカウントとオブジェクトの寿命
- 5.6.5 変数のリファレンスとコピーオンライト
Part 3 実践Webアプリケーション
6章 Webアプリケーション入門
6.1 Webアプリケーション概要
- 6.1.1 Webアプリケーションとは
- 6.1.2 HTMLとフォーム
- コラム PHPの標準関数
- 6.1.3 HTTPメソッド
- 6.1.4 HTTPメソッドの使い分け
- 6.1.5 スーパーグローバル変数
6.2 ひとこと掲示板作成
- 6.2.1 アプリケーション概要
- 6.2.2 データベースの作成
- 6.2.3 テーブルの作成
- 6.2.4 アプリケーションを配置するディレクトリの作成
- 6.2.5 コメント投稿フォームの作成
- 6.2.6 保存処理
- 6.2.7 エラーメッセージ出力
- 6.2.8 投稿されたひとことの表示
- 6.2.9 投稿後のリダイレクト
6.3 レガシーPHPからの脱却
- 6.3.1 レガシーPHPコード
- 6.3.2 ロジックとビューの分離
- 6.3.3 役割に応じたファイルの分割
6.4 さらなる役割の分割
- 6.4.1 役割の分割と共通化
- 6.4.2 フレームワーク
7章 フレームワークによる効率的な開発
7.1 開発の流れ
- 7.1.1 フレームワークとは
- コラム オープンソースのフレームワーク
- 7.1.2 開発効率の向上
- 7.1.3 フレームワークとオブジェクト指向
7.2 フレームワーク作成
- 7.2.1 フレームワークの要件
- 7.2.2 MVCモデル
- 7.2.3 フレームワークの構造
- 7.2.4 フレームワークの処理の流れ
- 7.2.5 ディレクトリ構成
- 7.2.6 クラスとオートロード
- 7.2.7 ClassLoaderクラス
- 7.2.8 bootstrap.php
- コラム bootstrap.phpの配置場所について
- 7.2.9 フロントコントローラと.htaccess
- 7.2.10 Requestクラス
- 7.2.11 ベースURLとPATH_INFO
- 7.2.12 RequestクラスでのURL制御
- 7.2.13 ルーティング
- 7.2.14 Routerクラス
- 7.2.15 Responseクラス
- 7.2.16 データベースアクセスとPDO
- 7.2.17 DbManagerクラス
- 7.2.18 DbRepositoryクラス
- 7.2.19 Sessionクラス
- 7.2.20 Applicationクラス
- 7.2.21 コントローラの呼び出しと実行
- 7.2.22 例外の活用
- 7.2.23 コントローラとビュー
- 7.2.24 Controllerクラス
- 7.2.25 Controller::run()メソッド
- 7.2.26 ビューの仕組み
- 7.2.27 Viewクラス
- 7.2.28 Controller::render()メソッド
- 7.2.29 Controllerクラスとリダイレクト
- コラム リダイレクトのステータスコード
- 7.2.30 CSRF対策
- 7.2.31 ログイン状態の制御
- 7.2.32 フレームワークの完成
8章 ミニブログアプリケーション開発
8.1 設計とセットアップ
- 8.1.1 アプリケーション概要
- 8.1.2 機能一覧
- 8.1.3 コントローラ設計
- 8.1.4 ミニブログアプリケーションの作成
- コラム レンタルサーバを使う場合
- コラム ドメインとアンダースコア
- 8.1.5 データベースの作成
- 8.1.6 MiniBlogApplicationクラス
- コラム データベースとユーザ
- 8.1.7 フロントコントローラの書き換え
- 8.1.8 レイアウトビューファイルの作成
8.2 ユーザ登録機能作成
- 8.2.1 アクションの作成手順
- 8.2.2 ユーザ登録とデータベースアクセス
- 8.2.3 Repositoryクラスの役割
- 8.2.4 UserRepositoryクラス
- コラム パスワードのハッシュ化
- 8.2.5 ユーザIDからレコードを取得する処理
- 8.2.6 signupアクション
- 8.2.7 登録処理の流れ
- 8.2.8 registerアクション
- 8.2.9 ビューファイルの修正/signupAction()メソッドの修正
8.4 ホームページと投稿
- 8.4.1 StatusRepositoryクラス
- 8.4.2 indexアクション
- 8.4.3 ビューファイルの共通化
- 8.4.4 postアクション
8.5 ユーザの投稿一覧と投稿詳細
- 8.5.1 StatusRepositoryクラスの拡張
- 8.5.2 ルーティング定義とリンクの記述
- 8.5.3 userアクション
- 8.5.4 showアクション
8.6 アカウント情報管理とログイン
- 8.6.1 アカウント情報の実装
- 8.6.2 indexアクション
- 8.6.3 signinアクション
- 8.6.4 authenticateアクション
- コラム ログイン時のバリデーションエラーメッセージ
- 8.6.5 signoutアクション
- 8.6.6 レイアウトにナビゲーションを追加
- 8.6.7 ログイン状態のみ有効なアクションの制御
8.7 フォロー
- 8.7.1 フォローとは
- 8.7.2 FollowingRepositoryクラス
- 8.7.3 フォローボタン
- 8.7.4 followアクション
- 8.7.5 フォローしているユーザの表示
- 8.7.6 フォローしているユーザの投稿表示
8.8 デザインの修正
- 8.8.1 デザインの改善点
- 8.8.2 おわりに
Part 4 PHPセキュリティ
9章 PHPで作るWebアプリケーションのセキュリティ(前編)
9.1 セキュリティ概説
- 9.1.2 Webアプリケーションとセキュリティ
- 9.1.3 セキュリティ基礎知識
9.2 スクリプト挿入攻撃(Script Insertion)
- 9.2.1 スクリプト挿入攻撃とは
- 9.2.2 脆弱性
- 9.2.3 対応方法
9.3 クロスサイトスクリプティング(Cross Site Scripting/XSS)
- 9.3.1 クロスサイトスクリプティングとは
- 9.3.2 脆弱性
- 9.3.3 対応方法
9.4 クロスサイトリクエストフォージェリ(Cross Site Request Forgeries/CSRF)
- 9.4.1 クロスサイトリクエストフォージェリとは
- 9.4.2 脆弱性
- 9.4.3 対応方法
9.5 SQLインジェクション(SQL Injection)
- 9.5.1 SQLインジェクションとは
- 9.5.2 脆弱性
- 9.5.3 対応方法
9.6 セッション固定攻撃
- 9.6.1 セッション固定攻撃とは
- 9.6.2 脆弱性
- 9.6.3 対応方法
- コラム セッションIDに利用できる文字と文字数
9.7 セッションハイジャック
- 9.7.1 セッションハイジャックとは
- 9.7.2 脆弱性
- 9.7.3 対応方法
10章 PHPで作るWebアプリケーションのセキュリティ(後編)
10.1 HTTPヘッダインジェクション
- 10.1.1 HTTPヘッダインジェクションとは
- コラム HTTPヘッダインジェクションについて
- 10.1.2 脆弱性
- 10.1.3 対応方法
10.2 メールの第三者中継
- 10.2.1 メールの第三者中継とは
- 10.2.2 脆弱性
- 10.2.3 対応方法
10.3 変数汚染攻撃
- 10.3.1 変数汚染攻撃とは
- 10.3.2 脆弱性
- 10.3.3 対応方法
10.4 Nullバイト攻撃
- 10.4.1 Nullバイト攻撃とは
- 10.4.2 脆弱性
- 10.4.3 対応方法
- コラム POSIX互換正規表現関数を使っている際の注意点
10.5 ディレクトリトラバーサル
- 10.5.1 ディレクトリトラバーサルとは
- 10.5.2 脆弱性
- 10.5.3 対応方法
10.6 eval利用攻撃
- 10.6.1 eval利用攻撃とは
- 10.6.2 脆弱性
- 10.6.3 対応方法
10.7 ファイルアップロード攻撃
- 10.7.1 ファイルアップロード攻撃とは
- 10.7.2 脆弱性
- 10.7.3 対応方法
10.8 インクルード攻撃
- 10.8.1 インクルード攻撃とは
- 10.8.2 脆弱性
- 10.8.3 対応方法
- コラム インクルードファイルの拡張子
10.9 パス・ディスクロージャ
- 10.9.1 パス・ディスクロージャとは
- 10.9.2 脆弱性
- 10.9.3 対応方法
10.10 コマンド実行攻撃(Command Injection)
- 10.10.1 コマンド実行攻撃とは
- 10.10.2 脆弱性
- 10.10.3 対応方法
10.11 サーバ設定
- 10.11.1 PHPの設定
- 10.11.2 Apacheの設定
Part5 テクニカルなPHPの活用
11章 実践オブジェクト指向
11.1 PHPとオブジェクト指向
- 11.1.1 オブジェクト指向の活用
- 11.1.2 Standard PHP Library(SPL)
11.2 マジックメソッド
- 11.2.1 マジックメソッドとは
- 11.2.2 __construct()メソッド/__destruct()メソッド
- 11.2.3 __get()メソッド/__set()メソッド
- 11.2.4 __isset()メソッド/__unset()メソッド
- 11.2.5 __call()メソッド/__callStatic()メソッド
- 11.2.6 __sleep()メソッド/__wakeup()メソッド
- 11.2.7 __toString()メソッド
- 11.2.8 __invoke()メソッド
- 11.2.9 __clone()メソッド
11.3 配列オブジェクト
- 11.3.1 配列オブジェクトとインターフェイス
- 11.3.2 Iteratorインターフェイス
- 11.3.3 IteratorAggregateインターフェイス
- 11.3.4 ArrayAccessインターフェイス
- 11.3.5 SPLのクラス/インターフェイス
11.4 例外
- 11.4.1 例外処理
- 11.4.2 SPL例外
11.5 PDO
- 11.5.1 データベースアクセスの抽象化
- 11.5.2 PDO
- 11.5.3 接続
- 11.5.4 問い合わせ処理
- 11.5.5 結果セットと取得メソッド
- 11.5.6 結果セットとフェッチモード
- 11.5.7 更新処理
- 11.5.8 プリペアドステートメント
- 11.5.9 トランザクション
- 11.5.10 エラー処理
11.6 オートロード
- 11.6.1 オートロードとは
- 11.6.2 __autoload()関数
- 11.6.3 SPLとオートロード
11.7 名前空間
- 11.7.1 名前空間とクラス名のルール
- 11.7.2 オートローダを作成する
Part 6 PHPレシピ
12章 レシピことはじめ
12.1 PHPマニュアルの歩き方
- 12.1.1 PHPのマニュアル
- コラム 日本語のマニュアルに関するコミュニティ
- 12.1.2 PHPマニュアルの読み方
- 12.1.3 PHPマニュアルの様々な利用法
- 12.1.4 検索
12.2 PHPの設定
- 12.2.1 PHPの設定とは
- 12.2.2 設定の変更
- 12.2.3 推奨の設定
- 12.2.4 PHPの主な設定
13章 標準機能
13.1 文字列
- 13.1.1 文字列に対する操作
- 13.1.2 変数をフォーマットする
- 13.1.3 数値をフォーマットする
- 13.1.4 HTMLタグをエスケープする
- 13.1.5 改行を
タグに変換する - 13.1.6 文字列の長さを調べる
- 13.1.7 文字列の一部を切り出す
- 13.1.8 配列を文字列として連結する
- 13.1.9 文字列の両端から不要な空白文字を除去する
- 13.1.10 大文字や小文字の変換をする
- 13.1.11 URL文字列を解析する
- 13.1.12 文字列を丸める
- 13.1.13 全角・半角を変換する
13.2 文字コード
- 13.2.1 文字コードに対する操作
- 13.2.2 文字コードの設定
- 13.2.3 文字コードを変換する
13.3 配列
- 13.3.1 配列に対する操作
- 13.3.2 配列の要素の追加と削除
- 13.3.3 配列の要素を並び替える
- 13.3.4 配列の要素数を得る
- 13.3.5 文字列を分割して配列にする
- 13.3.6 配列の要素を複数の変数へ代入する
- 13.3.7 配列を結合する
- 13.3.8 配列のキーをすべて取得する
- 13.3.9 配列に値が含まれるか調べる
- 13.3.10 配列を指定した値で埋める
- 13.3.11 配列の一部を切り出す
- 13.3.12 配列のすべての要素にコールバックを適用する
- 13.3.13 配列の要素をコールバックでフィルタする
13.4 正規表現
- 13.4.1 PCREとPOSIX拡張
- 13.4.2 PCRE正規表現構文
- 13.4.3 preg_match
- コラム その判定,わざわざ正規表現を使う必要があるの?
- コラム メールアドレスと正規表現
- 13.4.4 preg_match_all
- 13.4.5 preg_replace
- 13.4.6 preg_split
- 13.4.7 preg_quote
- 13.4.8 mb_ereg
14章 ライブラリとフォーマット
14.1 ライブラリの利用
- 14.1.1 PHPのライブラリ
- 14.2.2 PEAR
- コラム PEAR 2
- 14.2.3 PECL
- 14.2.4 APC
- 14.2.5 Xdebug
14.3 メール
- 14.3.1 PHPでのメール送信
- 14.3.2 mail()関数
- コラム メールのセキュリティ
- 14.3.3 mb_send_mail()関数
- 14.3.4 ライブラリを利用したメールの扱い
14.4 日付と時間
- 14.4.1 日付と時間の注意点
- 14.4.2 DateTimeクラス
- 14.4.3 タイムゾーンを指定する
- 14.4.4 DateIntervalクラス
- 14.4.5 日付の差の計算・加算・減算をする
- 14.4.6 日付に対して繰り返し演算を実行する
- 14.4.7 date()などの関数
14.5 ファイルとディレクトリ
- 14.5.1 ファイルとディレクトリに対する操作
- 14.5.2 ファイルの内容を文字列として取得する
- 14.5.3 文字列をファイルに保存する
- 14.5.4 SplFileObject
- 14.5.5 ファイル一覧の取得
- 14.5.6 ファイルやディレクトリの操作
- 14.5.7 様々なチェック・情報取得関数
14.6 XML
- 14.6.1 PHPとXML
- 14.6.2 SimpleXMLオブジェクト
- 14.6.3 変更・追加・XMLとして取得
- 14.6.4 名前空間付きのノードの取得
- 14.6.5 SimpleXMLの弱点
14.7 データフォーマット
- 14.7.1 シリアライズ
- 14.7.2 JSON
Appendix
- App-A PHPコンパイルオプション
- App-B php.ini