PHP
Webページ関係 †
設定 †
アップロードするファイルサイズを大きくする †
- php.ini設定
- POSTサイズの制限も受けるので合わせて変更する。
post_max_size = 16M
upload_max_filesize = 16M
file_uploads = On
バージョン表示を消す †
- PHPが出力するヘッダにはPHPのバージョン情報も含まれる。
- PHPのバージョンを表示することはセキュリティ面から好ましいとは言えないので、特に理由がない限りはOFFにしておくのが好ましい。
- "expose_php = OFF"とする。
リクエストの取得 †
- GETメソッドおよびPOSTメソッドによってブラウザより渡されるデータの取得。
GETメソッド †
<input type="text" name="abc">
- このようなフォームからリクエストを受け取る場合は次のように記述する。
$var = $_GET["abc"];
POSTメソッド †
<input type="text" name="abc">
- このようなフォームからリクエストを受け取る場合は次のように記述する。
$var = $_POST["abc"];
GET、POST共通 †
- システム変数、$_REQUEST[]を参照する。
- $_REQUEST[]では、GETメソッド、POSTメソッド両方からのデータ取得が出来る。
- 本来POSTされるべきデータをGETで偽装された場合に区別できないので推奨されない。
チェックボックスの処理 †
- チェックボックスでの複数チェックの状態を取得するには、HTMLは次のように記述する。
<input type="checkbox" name="abc[]" value="01">選択肢A
<input type="checkbox" name="abc[]" value="02">選択肢B
<input type="checkbox" name="abc[]" value="03">選択肢C
- name属性を「abc[]」として配列表記にしておく。
- PHP側でデータを参照すると配列変数として得られる。
- 次のように添え字ありでも構わない。
<input type="checkbox" name="abc[1]" value="01">
<input type="checkbox" name="abc[k001]" value="01">
- この状態を"hidden"にて次のフォームへ渡す場合も、同様に記述する。
<input type="hidden" name="abc[]" value="01">
<input type="hidden" name="abc[]" value="02">
ファイルの受信 †
- フォームの記述は、<form>でenctype="multipart/form-data"を指定する。
- ファイル選択は、<input type="file"> にて配置する。
<!-- サンプル -->
<form enctype="multipart/form-data" method="post" action="getimage.php" >
<input type="file" name="fileA">
<input type="file" name="fileB">
<input type="file" name="fileC">
<input type="submit" value="送信">
</form>
- PHP側では受け取ったファイルをテンポラリに保存する。
- テンポラリを作るディレクトリは、php.iniで設定する。
; 設定例
upload_tmp_dir = "C:\xampplite\tmp"
- スクリプトでは、$_FILES配列変数を参照することで、ファイルの詳細を得ることが出来る。
- ファイルを1つ選び、残り2つは空欄で送信した場合の$_FILESは以下の通り。
$_FILES[] |
| fileA |
| | name | readme.txt |
| | type | text/plain |
| | tmp_name | C:\xampplite\tmp\php31.tmp |
| | error | 0 |
| | size | 2435 |
| fileB |
| | name | |
| | type | |
| | tmp_name | |
| | error | 4 |
| | size | 0 |
| fileB |
| | name | |
| | type | |
| | tmp_name | |
| | error | 4 |
| | size | 0 |
- 元ファイル名、サイズ、テンポラリファイルのパスが入っているので、これを利用する。
- 保存されたファイルはスクリプトの終了時に削除されるので、必要ならコピーしておく必要がある。
セッション †
- セッションを使用するとスーパーグローバル配列変数$_SESSIONを使用して、セッション機能を利用できる。
セッションの開始/破棄 †
- 明示的に開始する場合は、session_start()関数を使用する。
- 既にセッションが開始されている場合は保存されているセッションデータが読み込まれる。
session_start();
- php.iniの設定で自動開始とすることもできる。
php.ini
[Session]
session.auto_start = 1
- 明示的にセッションを破棄する場合は、session_destroy()関数を使用する。
session_destroy();
- 明示的に破棄しないとサーバに情報が残り続けるので、自動破棄する機構がある。
- セッションの有効時間を何秒とするか、php.iniの設定
php.ini
session.gc_maxlifetime = 1440; // = 24min (24 x 60sec)
- 期限切れセッションデータの物理削除処理(ガベージコレクション)の起動設定。
- session_start()関数が呼ばれるたびに、以下の設定値を用いて確率試行が行われる。
php.ini
// 1/100の確率でGC起動
session.gc_probability = 1
session.gc_divisor = 100
セッションデータの利用 †
- スーパーグローバル配列変数$_SESSIONを使用する。
- 配列と同じ扱いで良い。
$_SESSION['name'] = $name; // セッションへ登録
if (isset($_SESSION['name'])) {
print $_SESSION['name'].'さん、こんにちは!'; // 登録内容の利用
}
- 特定の要素を削除する場合は、unset()関数にて要素を削除できる。
unset($_SESSION['name']);
- 全ての要素を削除する場合は、新たに配列を割り当てる方が早い。
$_SESSION = array();
Smarty †
- 有名なテンプレートエンジン。
- テンプレートは標準でファイルを使用する。ファイル以外のリソースを使用する場合は、register_resource()メソッドにて自前で用意した関数を登録する必要がある。
ファイル以外のリソースを使う †
{や}を本文で使う †
- Smrty処理しない範囲が決まっているなら、{literal}〜{/literal}タグで囲む。
- スポット的ならそれぞれ、{ldelim}および{rdelim}が対応している。