星野香保子 プロになるためのPHPプログラミング入門

第1章 PHPでWEB開発してみませんか

1.1 PHPでWeb開発を始めよう
1.1.1 PHPでますます広がるWeb開発
1.1.2 推奨されない機能は使わない
1.1.3 ReferenceManualを活用する
- http://www.php.net/関数名 - PEARマニュアル(http://pear.php.net/)やPECEマニュアル(http://pecl.php.net/)も使える

1.2 便利なLibraryたち
1.2.1 PEARパッケージ
- http://pear.php.net/packages.php - 本書で使うのはPEAR::HTML_Template_Flexy - 1.5を参照
1.2.2 PECLライブラリ
- http://pecl.php.net/packages.php - PEARに比べて高速 - 1.3.3を参照

1.3 開発環境を整えよう
1.3.1 開発環境は本番そっくりが理想
− 開発環境で十分動作確認を行った後、本番環境にUploadして運用する - WindowsのOSがサーバのLinuxで不具合が起きるので注意
1.3.2 仮想マシンを使った開発
- 仮想マシンSoftware(VirtualBox[Oracle],VMwarePlayer[WMware],VirtualPC[Microsoft])
1.3.3 PHPのデバッグ
- Xdebug(http://xdebug.org/)とEclipse+PDTを追加(Pleiades All in One PHP)を使用 - Eclipseを起動 - Workspace画面でC:\phpdbgと入力 - ファイル/新規/phpプロジェクト/proPHP名を入力 - メニューからBiludPass/Sourceのリンク - SourceFolderに開発用PC(LocalPC)を指定(C:\proPHP\www) - 既存のProjectSourceFolderEnteryを置換してネストを解決するを選択して完了 - メニューから実行/デバッグの構成/PHPWebPageを選択/新規の起動構成をclick - Firewallの警告でアクセスを許可 - 名前にPHPのデバッグ/サーバにXDebugを選択 - PHPサーバに新規をclick - 名前欄にFedora、ベースURLをhttp://192.168.55.1を入力し完了 - デバッグするファイル名を指定 − perspective切り替えの確認/はい - コードの行番号をDoubleClick

1.4 文字化けよ、さようなら
1.4.1 何故文字化けするの?
1.4.2 文字encodingを意識する
1.4.3 文字encodingを統一する -
1.4.4 文字encoding関連の設定を行う方法
- pnp.iniの設定(mbstring.language=japanese; mbstring.internal_ encoding=UTF-8;) - 関数(mb_language(japanese)、mb_internal_encoding(UTF-8)、mb_regex_encoding(正規表現など))で設定する - PHPプログラムをUTF-8で保存する - 入力データがUTF-8かをCheckする(p14mbchk.php) - 文字列処理ではMB文字列関数を使う(p14mbstr.php) - HTTPレスポンスHeadderに文字Encodingを指定する(Content-Type: text/html, charset=UTF-8)
Content-Typeの出力法 - PHPの設定で指定(default_mimetype:"text/html" default_charset:"UTF-8")、 PHPのProgramから指定(<?php - header(”Content-type: text/html; charset=UTF-8") - ?>)、 Webサーバの設定で指定(AddDefaultCharset utf-8) の3種ある - データを出力するときにEscape処理を行う関数htmlspecialchars関数の第3引数に文字Encodingを指定(htmlspecialchars($var, ENT_QUOTES, ”UTF-8”))
1.4.5 DB関連の文字Encoding設定
- DB側(CREATE DATABASE ppdb CHARACTER SET uft8mb4;) - クライアント側(DB側のものと比較し、異なるときはクライアント側のデータを変換する機能がある)
文字列処理用の文字Encoding - <?php - $dbh = @new mysqli('localhost', 'kobksh01', sugano12'', db0kobksh01’’); - if( $dbh->connect_errno ) { - die( 'Connect Error: ' . $dbh->connect_errno); - } - $dbh->set_charset( 'utf8mb4'); // 文字Encoding指定 - ?>

1.5 デザイナさんに感謝 - 設定がややこしくわからないので飛ばす
1.5.1 デザイナとプログラマのすみ分け
1.5.2 HTML_Template_Flexyを使ってみよう
- http://pear.php.net/package/HTML_Template_Flexy
1.5.3 HTML_Template_Flexyを使った簡単な例
1.5.4 Form要素を自在に操る -
1.5.5 HTML_Template_FlexyとDBを組み合わせる
1.5.6 HTML_Template_Flexyの制御構文

1.6 Sessionを管理するには - 特に今必要はないので飛ばす
1.6.1 Sessionとは
1.6.2 Session管理を行う方法
1.6.3 Session関連のphp.iniの設定
1.6.4 Session管理を行うApplication

第2章 WebApplicationの設計を考えてみよう

2.1 WebApplicationの設計

2.2 画面の設計

2.3 データの設計

2.4 プログラムの設計

第3章 MySQLとつないでみる

3.1 DBとつながる仕組み

3.2 MySQLi拡張モジュールを使ってみよう
3.2.1 MySQLからデータを検索するProgram
- 郵便番号と地名のDBを参考にオブジェクト指向型のInterfaceを使ったp32mysql.phpを試す - A3.2のZipcodesの作成 - prophp.sqlにある作業に必要なSQL文を参考にZipcodesのテーブルを作成 - CREATE TABLE zipcodes ( - jiscode VARCHAR(8) - zipcode VARCHAR(8), pref VARCHAR(128), city VARCHAR(128), town VARCHAR(128), townkana VARCHAR(128) - );
Downloadした"28HYOGO.CSV"をhome/ppuserのフォルダにUpload - DBに接続しデータを挿入 - LOAD DATA LOCAL INFILE "http://www50.atpages.jp/kobksh01/htdocs/home/ppuser/28HYOGO.CSV" INTO TABLE zipcodes FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' ( jiscode , @dmy , zipcode , @dmy , @dmy , townkana , pref , city , town , @dmy , @dmy , @dmy , @dmy , @dmy , @dmy ) ;
3.2.2 PreparedStatementとは
- 同じSQL文を繰り返し実行するときに便利
3.2.3 PreparedStatementの使い方
- $sql = 'SELECT zipcode, pref, city, town FROM zipcodes'; - $sql .= ' WHERE zipcode >= ? AND zipcode <= ?'; - $sql .= ' ORDER BY zipcode ASC LIMIT 1500'; - 値を書き換えたい部分に?を記述して、データの型を指定すること - $sth->bind_param('ss', $mincd, $maxcd); //E PreparedStatementのPlaceholderに割り当てる値を設定 - ssは文字列が2つという意味
3.2.4 PreparedStatementを使わないクエリ
- 32mysqlqry.php - queryメソッドでSQL文を実行

第4章 実践的なアプリを作ってみよう

4.1 ログイン認証の仕組みを作るには
4.1.1 PHPでログイン認証を実装するには
4.1.2 独自の認証処理クラス

4.2 ログイン認証アプリ
4.2.1 ログイン認証を行う簡単なアプリ
- テーブル名: users(username,password)
4.2.2 証拠処理クラスを作る
- PpAuth(認証Check処理クラス-ppAuth.php), PpAuthLogin(ログイン仮面処理クラス), PpAuthDb(認証用DB処理クラス) - SHA-256の暗号化がLinuxを使うので理解不能で断念

4.3 ToneMeアプリを作る
4.3.1 全体的な構成
- http://localhost/toneme/ - 共通のクラス (クラス名-概要-ファイル名)
- TuneCont - 状態管理を行う - tuneProc.php
- TuneAut - ログイン認証を行う - tuneProc.php
- TuneDataManager - ユーザの入力値や曲データを管理する - tuneProc.php
- TuneData - 曲データ - tuneProc.php
- TuneMsginfo - メッセージ情報 - tuneProc.php
- TuneInput - Web関連の入出力を行う - webProc.php
- TuneDao, TuneDb - DB処理を行う - tuneDtbs.php
- TunePage - 画面表示を行う - tunePage.php
- CheckHandler - ユーザ入出力のCheckを行う - chkHandler.php
- TuneConfig - 設定用データ - tuneConfig.php
- TuneState - 状態(ステート) - tuneProc.php
- 必要なファイルのコピー - home/ppuser/www/tonemeに配置する(ppPage.php ppSession.php ppAuth.php ppAuthDb.php ppAuthLogin.phpなど)
- 画面のテンプレートを/home/ppuser/templates にコピーする(tonemeindex.html-キモチ曲検索画面、 tonemelogin.html -ログイン画面、tonemesearch.html-曲データ検索画面、 tonemeadd.html-曲データ追加画面、 tonemeedit.html-曲データ編集画面、 tonemedel.html-曲データ削除画面)
- 画像とスタイルシートファイルを/home/ppuser/www/toneme にコピーする(www/toneme/imgとwww/toneme/css)
4.3.2 状態管理処理
- /toneme/tuneProc.phpの中の状態管理クラスで現在の状態Objectを保持する、具体的には add_class.php, delete_class.php, edit_class.phpとsearch_class.phpの4つのInterfaceを実装したクラスである。- 状態ごとの具体的な処理は状態クラスで2つのメソッドで処理を実装(doCheck と doMainのメソッド)
4.3.3 入力値Check処理
- /toneme/chkHandler.phpの中のCheck処理クラス -
4.3.4 ログイン認証処理
- /toneme/login.php/ - TuneAuthクラスを利用して処理を行う、TuneAuthは、PpAuthクラスを継承したクラスで、必要なOptionDataをPpAuthクラスに設定しており、実際のLogin認証の処理はPpAuthクラスで行う
4.3.5 CSRF対策を追加する
- /toneme/tuneProc.phpのデータマネージャクラスでトークンを生成してCheckを行う
4.3.6 曲データ検索機能
- /toneme/search_class.php - 曲データ検索画面クラス(TuneSearchState) および 曲データ検索画面処理 - /toneme/search.php -
4.3.7 曲データ追加機能
- 曲データ追加画面クラス(TuneAddInputState)...曲データ追加画面を表示する - /toneme/add_class.php
- 曲データ追加処理クラス(TuneAddDbState)...tunesテーブルに曲データを追加する - /toneme/add.php - 曲の追加をクリックするとadd.phpが実行される、内容を判定し、画面を表示(TuneAddInputStateクラス)か、DBへの追加(TuneAddDbStateクラス)かのどちらかの処理を行う
4.3.8 曲データ編集機能 -
- 曲データ編集画面クラス(TuneEditInputState)...曲データ編集画面を表示する - /toneme/edit_class.php
- 曲データ編集処理クラス(TuneEditDbState)...tunesテーブルの指定された曲データを更新 - /toneme/edit.php - 編集をクリックすると実行される、ほとんどadd.phpと同じである。
4.3.9 曲データ削除機能
- 曲データ削除画面クラス(TuneDeleteConfState)...曲データ削除画面を表示する - /toneme/delete_class.php
- 曲データ削除処理クラス(TuneDeleteDbState)...tunesテーブルの指定された曲データを削除 - /toneme/delete.php - 検索画面で削除をクリックするとdelete.phpが実行される
4.3.10 キモチ曲検索機能
- キモチ曲検索処理 - /toneme/index.php - 実際に動かすが、 'HTML/Template/Flexy.php' がないのでエラーになる

第5章 CakePHPフレームワークを使ってみよう

5.1 CakePHPを使ってみよう
5.1.1 フレームワークを使うメリット
- 開発の生産性が高まる、チームで開発しやすい、拡張しやすい、基本処理の品質が保証される
5.1.2 CakePHPとは
- http://cakephp.jp/ マニュアルはhttp://book.cakepho.org/ja/
5.1.3 CakePHPにおけるMVCモデル
5.1.4 CakePHPのフォルダ構成
- cake(フレームワーク本体を格納)
- app(App用のソースコードを格納) - config(設定ファイル)
- - - - - - - - - - - - - - - - - - - controllers(コントローラのファイル)
- - - - - - - - - - - - - - - - - - - libs(ライブラリファイル)
- - - - - - - - - - - - - - - - - - - locale(国際化対応のためのファイル)
- - - - - - - - - - - - - - - - - - - models(モデルのファイル)
- - - - - - - - - - - - - - - - - - - plugins(プラグインのファイル)
- - - - - - - - - - - - - - - - - - - tests(ユニットテストに必要なファイル)
- - - - - - - - - - - - - - - - - - - tmp(一時ファイル)
- - - - - - - - - - - - - - - - - - - vendors(ThirdParty製のライブラリファイル)
- - - - - - - - - - - - - - - - - - - views(ビューのファイル)
- - - - - - - - - - - - - - - - - - - webroot(DocumentRootに相当するフォルダ)
- plugins(機能追加のためのプラグインのファイル-複数のAPPに共通)
- vendors(ThirdParty製のライブラリファイル-複数のAPPに共通)
5.1.5 とりあえずCakePHPを作ってみる -仮想開発環境がもう一つわからないので、先に進めず断念