PHPのCGIフォーム処理プログラミング
HTTPの仕組みとPHPのCGIフォーム処理プログラミング
HTTPの仕組みとPHPのCGI処理※画像クリックで拡大表示
※アイコンの機能:表示 実行 ダウンロード
- HTTPリクエスト・リスポンスとPHPのCGIは、
ブラウザからHTTPリクエストのリクエストラインにある「メソッド」「URL」「プロトコル」から、WEBサーバを通してCGIプログラムへ、「コマンドライン引数」「環境情報」「標準入力」の情報が入力されます。
- PHPの主なHTTP環境情報は、
WEBサーバのプログラム(PerlやPHP、Javaなど)にアクセスする場合、WEBサーバはHTTPリクエストヘッダ情報やアクセス元のIPアドレスなどの情報を環境情報に設定して、プログラムを起動し、ヘッダフィールド名に対応した環境情報で渡されます。
PHPで環境情報を取得するには、$_SERVER[ 'xxx' ]で'xxx'の添字を記述すれば可能です。また、「phpinfo関数 … PHPの設定情報を出力」を実行して、利用可能なPHP環境情報の内容一覧を確認できます。
PHPの主なHTTP環境情報一覧(PDF) - HTMLドキュメントにおいて、リンクタグの「<a href="xxx.php?id=abc" ... >ABC</a>」は「GETメソッド」であり、URIの「?」後の「id=abc」がCGIとしてWEBサーバ:PHPのメッセージボディとしてセットされます。
- HTMLドキュメントにおいて、FORMタグで「<form action="xxx.php" method="POST"> ~ </form>」の「method="POST"」は「POSTメソッド」であり、「action="xxx.php"」がURIに該当しており、「~」に記述した内容がCGIとしてWEBサーバ:PHPのメッセージボディとしてセットされます。
また、「method="GET"」にすると「GETメソッド」となります。 - PHPのメッセージボディのデータ「id」を取得するにはスーパーグローバル変数から、「GETメソッド」のときは$_GET['id']であり、「POSTメソッド」のときは$_POST['id']で、両方のメソッド対応は、$_REQUEST['id']を利用します。
- PHPの主なHTTP環境情報は、
- HTTP1.1の8つのメソッドは、
メソッド 機能 GET リソースの取得 POST 子リソースの作成、リソースへのデータの追加、その他の処理 PUT リソースの更新、リソースの作成 DELETE リソースの削除 HEAD リソースのヘッダ(メタデータ)の取得 OPTIONS リソースがサポートしているメソッドの取得 TRACE 自分宛にリクエストメッセージを返す(ループバック)試験 CONNECT プロキシ動作のトンネル接続への変更 - HTTPリスポンスのステータス・コードは、
HTTPにおいてWebサーバからのレスポンスの意味を表現する3桁の数字からなるコードで、RFC 2616等によって定められています。例えば、「200」:リクエスト成功、「5xx」:サーバーエラーを意味し、クライアントのブラウザがステータスコードを判断して状態を表示します。
HTTPのステータスコード一覧(PDF) - ユーザエージェントの情報を利用することで、
パソコン、スマートフォン、携帯電話の機種やブラウザ・バージョンの判断ができ、その内容に従った表示内容(レイアウトや画像サイズ)をコントロールすることが可能になります。
※ユーザエージェントの一覧・参照サイトリンク
PHPのフォーム処理プログラミング
- フォーム処理プログラミングの主な変数・関数は、
変数/関数 説明 プログラム内容 $_GET
$_POST
$_REQUEST
$_SERVER$_GET:GETメソッドでCGIデータ取得
$_POST:POSTメソッドでCGIデータ取得
$_REQUEST:GET又はPOSTメソッドでCGIデータ取得
$_SERVER['HTTP_REFERER']:遷移前のプログラム・パス
$_SERVER['HTTP_USER_AGENT']:動作中のクライアント側ブラウザの種類(アクセス解析等に利用)
$_SERVER['REQUEST_METHOD']:リクエストメソッド「GET/POST/REQUESTメソッドのCGIデータ取得と環境情報の利用」 「環境情報のユーザーエージェントを利用してパソコン、スマホ、携帯電話の種類を判別」 【HTML】対応
input要素のtype属性
・text
・checkbox
・redio
・password
・hidden
textarea要素
select要素
【PHP】
・セッション関数
・フォーム入力データ形式チェックのライブラリ
・ファイル出力関数formタグの「POST」メソッド、リンクタグの「GET」メソッドの使い分けとinput要素のtype属性とtextarea要素に対するCGIデータ取得やセッションデータへの書き込み・読み込みの記述方法 「セッション利用なし:フォームタグのinput要素type属性、textarea要素における記述とデータ保持(フォームデータをGETメソッドのリンク)」 「セッション利用あり:フォームタグのinput要素type属性、textarea要素における記述とデータ保持の処理」 「フォームからの入力形式チェックのライブラリ関数(以下の入力チェックプログラムで利用)」 「入力チェック:フォームタグのinput要素type属性、select要素における記述とデータ保持の処理」 「ファイル出力:セッション利用と入力チェックを含めたフォームタグのinput要素type属性における記述とデータ保持のファイル出力処理」
※ファイル出力のフォーマットは、「PHPファイルシステムのプログラミング」にあるマスターファイル形式を参照下さい。rawurlencode
rawurldecode
htmlspecialchars
$_SERVERrawurlencode:RFC3986に基づきURLエンコード
rawurldecode:URLエンコード文字列をデコード
htmlspecialchars:特殊文字をHTMLエンティティに変換
$_SERVER['PHP_SELF']:自分自身のプログラム・パス「フォーム入力されたURL+リンクデータをエンコード・デコード処理」 - フォーム処理のファイルアップロードは、
- ファイルのアップロードは、HTMLのinput要素のtype属性である「file」を利用します。form要素のenctype属性で、「multipart/form-data」の指定をしないとファイルをアップロードできません。
ファイルのアップロードは、同時に複数ファイルも可能で、input要素のname属性でPHP側で処理するためのCGIパラメータを指定する必要があります。 - HTTPリクエストで、PHPプログラムのスーパーグローバル変数の「$_FILES」にフォームからのname属性値やファイルのアップロード容量、アップロードしたファイル名、アップロードした際のエラーがあるかなどの情報を得ることができます。
エラーがないこと、適切なファイル(拡張子でチェック)、アップロードのファイル容量の大きさなどをチェックして、OKである場合にテンポラリファイルにあるファイルを保存したいフォルダへ移動(move_uploaded_file関数の利用)して、ファイルのアップロード処理が完了します。
- ファイルのアップロードは、HTMLのinput要素のtype属性である「file」を利用します。form要素のenctype属性で、「multipart/form-data」の指定をしないとファイルをアップロードできません。