【読書メモ】パーフェクトPHP(6章 Webアプリケーション入門)
『パーフェクトPHP』「6章 Webアプリケーション入門」の読書メモ。
スーパーグローバル変数(p.177)
$_GET
… GETパラメータの連想配列。$_POST
… POSTで送信されたデータの連想配列。$_FILES
… ファイルのアップロードが行われた際、この変数に情報が格納される。ファイル名、ファイル形式等。$_COOKIE
… キーと値のペアでブラウザ側に保存され、リクエストごとにアプリケーションに送信される。その値がこの変数に格納される。$REQUEST
… $GET、$POST、$COOKIEの3つの内容がまとめて格納されている。それぞれのスーパーグローバル変数を適切に使う方が望ましいため、使用しない方がよい。$_SERVER
… webサーバーの情報やプログラム実行時の環境情報等を格納。ホスト名やIPアドレス、リクエストのプロトコル等。$_ENV
… 環境変数の値を格納。$_SESSION
… セッションの値を連想配列で格納。クッキーと違い、情報をwebサーバー上に格納する。セッションIDをブラウザとwebサーバー間でやりとりして状態を保持する。
(データの)保存処理(p.181)
mysql_connect()関数を実行してDBに接続する。
⇨ この本ではPHP5.3.3で動作確認がされており、PHP7以降では非推奨となっている。mysqli関数を使う。
値が入力されているかどうかのバリデーションでisset()を用いる。「Webの仕組み上、name属性に指定したものが必ず送信されるとは限らない」ため、チェックが必要。(ここら辺、Webの仕組みの知識が乏しくいまいちピンとこない)
mysql_real_escape_string()関数
⇨ mysqli_real_escape_string()関数を使う。SQLインジェクション対策。
エラーメッセージ出力(p.185)
htmlspecialchars()関数。データをそのまま出力するのではなく、エスケープを施してから出力する。XSS等の脆弱性対策。
「必要な場所のみエスケープするのではなく、「基本的にはエスケープを行い、エスケープしたくない場合ではエスケープ処理をしないようにする」という考えでプログラムを作る」
投稿されたひとことの表示(p.186)
mysql_free_result()関数
⇨ mysqli_free_result()関数。mysqli_query()で取得した結果をメモリ上から解放する。mysql_close()関数
⇨ mysqli_close()関数。mysqliをnewして取得した接続を解放する。これらの解放処理はPHPが自動的に行ってくれるが、作法として明示的に行うと良い。
投稿後のリダイレクト(p.188)
- header()関数にLocationとURLを指定することで、指定URLにリダイレクトされる。Locationヘッダには絶対URLを指定する。
header('Location: http://ntoukm.hatenadiary.com/');