情報科学III

平成23年度前期 情報科学III (理系コア科目)
PHP プログラムの実行(まとめ)
担当 松永 裕介
月曜日 2限
http://okaweb.ec.kyushu-u.ac.jp/lectures/jk3/
本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明准
1
教授、岡村准教授等による以前の講義資料をもとにしています。
前回のおさらい(1)
 PHPプログラムの処理形態
1. PHP処理モジュールがインストールされている web サーバ
上で,web サーバ経由で実行させる.
2. PHPがコマンドラインで実行できるようにインストールされて
いるサーバ上で,コマンドラインから起動する.
 PHPプログラムの入出力
– コマンドラインから実行される場合は簡単
• ディスプレイ,キーボード,ファイル
– webサーバから実行される場合は,単純ではない.
2
前回のおさらい(2)
 webサーバで実行されるPHPプログラムの入出力
– HTTPの力を借りる.
• 入力は,HTTPリクエストから受け取る.
• 出力は,HTTPレスポンスに埋め込む.
HTTP
リクエ
スト
クライアント
インター
ネット
HTTP
レスポ
ンス
実行中の
PHPプログラム
web
サーバ
PHP
処理
モジュー
ル
3
前回のおさらい(3)
 クライアントへの間接的な出力
– HTML データに print( ) の出力が埋め込まれる.
– ステータス行やメッセージヘッダが自動的に付加される.
PHP
プログラム
PHPからの出
力を含むweb
ページ
print( ) で出力すると,そ
の内容がHTMLデータに
埋め込まれてクライアント
に返送される.
4
前回のおさらい(4)
 クライアントからの間接的な入力
– HTMLの <form> ~ </form>タグを用いる.
– submit タイプのボタンがクリックされると,集めた内容を
HTTP で送信する.
利用者の入
力データを
フォームに含
むwebページ
利用者の
入力を処理
するPHP
プログラム
<form> タグのあるページで
入力を集めて,PHPプログラムに送る.
5
前回のおさらい(5)
 <form> ~ </form> タグ
– method:ブラウザに入力されたデータをサーバに送信する
ときの形式
(GETまたはPOST)
• GET:データをURLの末尾に追加して送信する.
• POST:データをURLとは別に送信する.
– action:集めたデータの送信先のURL
• 通常は,PHPプログラム(HTML埋め込みも可)または
CGIプログラム
<form method="メソッド名" action="URL" ...>
...
</form>
6
前回のおさらい(6)
 実際の入力部分は,<input> タグで
<form method="メソッド名" action="URL" ...>
<input type="タイプ名" name="項目名">
<input type="タイプ名" name="項目名">
...
</form>
7
前回のおさらい(7)
 <input>タグの例
– <input type="submit" name="名前"...> :送信ボタン
– <input type="text" name="名前"...> :1行の入力欄
 他に
– "radio"(ラジオボタン),"password"(パスワード形式の入力欄),
"checkbox" (チェックボックス),"file"(ファイルの送信欄),
"hidden"(隠しデータ),
– <textarea name="名前" ...> ~</textarea>
(複数行の入力欄)
– <select name="名前">
<option value="値">選択肢の名前</option>
...
</select>
(プルダウンメニュー)
8
前回の補足と訂正
 複数選択の可能な "checkbox" タイプの入力欄
– <input> タグの name 属性の値は,複数選択された場合
にはPHPの配列に格納されるように,"q2[]" のような名前
にしておくとよい.
<p>
質問1 あなたの好きな果物は?(複数選択可)
<br>
<input type="checkbox" name="q2[]" value="リンゴ">リンゴ
<input type="checkbox" name="q2[]" value="バナナ">バナナ
<input type="checkbox" name="q2[]" value="キウイ">キウイ
</p>
9
PHPと入出力(承前)
10
外部からのデータの受け取り方(1)
 入力データをPHPプログラムへ送るのは <form> ~ </form>
を使えばよいとして…
 受け側のPHPプログラムでは,<form> ~ </form> タグから
送られてきたデータをどのようにして受け取ればよいか?
?
入力された
データ
HTML
ファイル
受け側の
PHP
プログラム
POST
またはGET
<form> タグのあるページで
入力を集めて,PHPプログラムに送る.
11
外部からのデータの受け取り方(2)
 PHPプログラムの外部から送り込まれるデータ
– <form> ~ </form> タグで集める利用者入力データ以外
のものもある.
• PHPプログラムを実行しているwebサーバに関する情報
• PHPプログラム自身に関する情報(ファイル名など)
プログラム
自身の情報
POST
またはGET
利用者が入力
HTML
したデータ
ファイル
受け側の
PHP
プログラム
サーバの
情報
12
外部からのデータの受け取り方(3)
 webサーバ経由で起動されたPHPプログラムには,外部から来
るデータが自動的に格納される,定義済みの連想配列がある.
– $_SERVER["名前"]
– $_ENV["名前"]
– $_POST["名前"]
– $_GET["名前"]
 PHPプログラムがwebサーバ経由で起動されると,上記の配列
はすでにアクセス可能になっている.
– 要素には値もセットされている.
13
$_SERVER['名前']と$_ENV['名前']
 $_SERVER["名前"]
– そのPHPプログラムを実行しているwebサーバに関する情報
たとえば:
• $_SERVER["HTTP_HOST"] :サーバのホスト名
• $_SERVER["SERVER_ADDR"] :サーバのIPアドレス
• $_SERVER["HTTP_USER_AGENT"] :そのPHPプロ
グラムにアクセスしてきたクライアントがサーバに対して名
乗っているブラウザ名
 $_ENV["名前"]
– そのPHPプログラムが実行されるときの環境に関する情報
14
これらの連想配列の内容を確認する方法
 phpinfo( ) 関数を実行する
– 第4回のスライドで紹介した.
<?php phpinfo(); ?>
15
$_POST['名前']
 そのPHPプログラムに対して,POSTメソッドで送り込まれたデー
タ
$_POST["名前"]
入力された
データ
入力された
データ
HTML
ファイル
POST
受け側の
PHP
プログラム
<form> タグのあるページで
入力を集めて,PHPプログラムに送る.
16
$_GET['名前']
 そのPHPプログラムに対して,GETメソッドで送り込まれたデータ
$_GET["名前"]
入力された
データ
入力された
データ
HTML
ファイル
GET
受け側の
PHP
プログラム
<form> タグのあるページで
入力を集めて,PHPプログラムに送る.
17
連想配列 $_POST[ ] ($_GET[ ] )のキー
 <input> (<textarea>,<select>)タグの中で指定され
た name 属性の値が,これらの連想配列のキー(要素を特定す
るための名前)になる.
$_POST["key1"]
入力データ
入力データ
HTML
ファイル
POST
受け側の
PHP
プログラム
<input type="text" name="key1">
18
2段以上のPOST/GET
 <form> タグで集めたデータを受け取った PHP プログラムが,
さらに次の PHP プログラムにデータを伝えるための <form> タ
グを含むことがある.
データを入力
して,送信ボタ
ンをクリック
HTML
ファイル
POST/GET
さらにデータを
入力して,また
送信ボタンを
クリック
受け側の
PHP
プログラム
POST/GET
受け側の
PHP
プログラム
19
POST/GETしたデータの到達範囲
 そのときの POST(GET) メソッドで送信されたデータが,送信先
のPHPプログラムの $_POST[ ] ($_GET[ ])連想配列に入
る.
$_POST["key1"]
($_GET["key1"])
入力データ
1
入力データ
2
HTML
ファイル
受け側の
PHP
プログラム1
POST/GET
ここで送信されるデータは,
そのままでは,プログラム
2には伝わらない.
$_POST["key1"]
($_GET["key1"])
POST/GET
受け側の
PHP
プログラム2
20
入力されたデータを2段以上先まで伝える方法
 いくつか方法はあるが,簡単なものは:
– "hidden" タイプの <input> タグで
$_POST["key1"]
($_GET["key1"])
入力データ
1
入力データ
2
HTML
ファイル
受け側の
PHP
プログラム1
<input
type="text"
name="key1">
POST/GET
$_POST["key1"]
$_POST["key2"]
($_GET["key1"])
($_GET["key2"])
POST/GET
<input type="hidden" name="key1"
value="$_POST["key1"]">
<input type="text" name="key2">
受け側の
PHP
プログラム2
心情的には,
こうしたいが,
文法的に×
21
php プログラミング
 基本的な文法を用いる。
– 分岐、ループ
 配列を用いる。
 文字列を扱う。
 HTML から、入力したデータを渡してもらう。
 HTML から、ファイルでデータを渡してもらう。
22