目玉焼きに塩

おいしい

【読書メモ】パーフェクト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関数を使う。

qiita.com

  • 値が入力されているかどうかのバリデーションで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/');