Presentation is loading. Please wait.

Presentation is loading. Please wait.

PHP プログラムの実行 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)

Similar presentations


Presentation on theme: "PHP プログラムの実行 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)"— Presentation transcript:

1 PHP プログラムの実行 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)
2007/5/9 平成20年度 情報科学III (理系コア科目・2年生) PHP プログラムの実行 担当 岡村耕二 月曜日 2限 本資料の一部は、堀良彰准教授、天野浩文准教授等による 以前の講義資料をもとにしています。 情報科学III(5)

2 演習の回答例 a, b, c を入力して、2次方程式を解くプログラムを作成せよ。
aX^2 + bX = C 名前、数字を5名分入力し、数字の順に並び替えるプログラムを作成せよ。 入力画面および入力例 出力例 大橋 29 馬出 22 箱崎 12 六本松 9 伊都 4 箱崎 12 六本松 9 馬出 22 伊都 4 大橋 29

3 演習 1: http://bossp.is.kyushu-u.ac.jp/~oka/enshu-2008-0512-01/main.html
メイン <form method="POST" ACTION="niji.php"><p> a=<input type="text" name="a" size="4"><p> b=<input type="text" name="b" size="4"><p> c=<input type="text" name="c" size="4"><p> <input type="submit" value="Go!"> <input type="reset" value="Clear"> </form> 式を解く $a=$_POST["a"]; $b=$_POST["b"]; $c=$_POST["c"]; printf("a=%d,b=%d,c=%d <p>\n",$a,$b,$c); $c = $c * -1; $d = $b * $b - 4 * $a * $c; printf("D=%d <p>\n",$d); printf("<HR>"); if($d>0){ printf(" x = (%d + SQRT(%d))/%d and (%d - SQRT(%d))/%d <br>\n", ($b * -1),$d,2 * $a, ($b * -1),$d,2 * $a ); printf("or x = %.3f and %.3f \n", (($b * -1) + sqrt($d)) / (2 * $a), (($b * -1) - sqrt($d)) / (2 * $a) }elseif ($d==0) { printf(" x = %d/%d. <br>\n",($b * -1),2 * $a); printf("or x = %.3f.", ($b * -1)/(2 * $a)); }elseif ($d <0){ printf(" x = (%d + SQRT(%d)i)/%d and (%d - SQRT(%d)i)/%d <br>\n", ($b * -1),$d * -1 ,2 * $a, ($b * -1),$d * -1 ,2 * $a printf("or x = %.3f + %.3fi and %.3f + %.3fi.", ($b * -1)/(2 * $a), sqrt($d * -1)/(2* $a), ($b * -1)/(2 * $a), sqrt($d * -1)/(2* $a) }

4 演習 2: http://bossp.is.kyushu-u.ac.jp/~oka/enshu-2008-0512-02/main.html
メイン <form method="POST" ACTION="sort.php"><p> name0=<input type="text" name="name0" size="4"> val0=<input type="text" name="val0" size="4"><p> name1=<input type="text" name="name1" size="4"> val1=<input type="text" name="val1" size="4"><p> name2=<input type="text" name="name2" size="4"> val2=<input type="text" name="val2" size="4"><p> name3=<input type="text" name="name3" size="4"> val3=<input type="text" name="val3" size="4"><p> name4=<input type="text" name="name4" size="4"> val4=<input type="text" name="val4" size="4"><p> <input type="submit" value="Sort!"> <input type="reset" value="Clear"> </form> ソート $name=array($_POST["name0"],$_POST["name1"],$_POST["name2"],$_POST["name3"],$_P\ OST["name4"]); $val=array($_POST["val0"],$_POST["val1"],$_POST["val2"],$_POST["val3"],$_POST["\ val4"]); for($i=0;$i<5;$i++) printf("%d %s %d \n<br>",$i,$name[$i],$val[$i]); printf("<HR>"); for($i=0;$i<4;$i++){ for($j=$i+1;$j<5;$j++) if($val[$i] < $val[$j]){ $tmp=$val[$i]; $val[$i]=$val[$j]; $val[$j]=$tmp; $tmp=$name[$i]; $name[$i]=$name[$j]; $name[$j]=$tmp; } printf("%d %s %d <br>",$i,$name[$i],$val[$i]);

5 前回のおさらい(1) 配列(array) 複数の値をリストとしてまとめて格納する. ひとつひとつの値を要素(element)と呼ぶ.
番号で要素を特定するものと,名前で要素を特定するものがある. 多次元の配列も作れる. $fruit[1] = "banana"; // 番号で要素を識別する配列の例 $fruit[0] = "apple"; $fruit[2] = "みかん"; $profile["sex"] = "男"; // 名前で要素を識別する配列(連想配列)の例 $profile["age"] = 20; $profile["country"] = "Japan";

6 実は,並んでいる順番はあまり重要でない.
配列を模式的に書くと 番号で要素を区別する配列の場合 連想配列の場合 "banana" "みかん" "apple" 必要に応じて伸びていく $fruit[0] $fruit[2] $fruit[1] 実は,並んでいる順番はあまり重要でない. 20 "Japan" "男" 必要に応じて伸びていく $profile["sex"] $profile["country"] $profile["age"]

7 前回のおさらい(2) 戻り値を受け取る変数 = 関数名( 引数 ); 関数(function)
( )で囲まれたデータ(引数)を受け取り,何かの処理をして,結果を返す. 「引数」は「ひきすう」と読む. ほとんどの場合,実行結果は,変数に直接代入できる. 実行結果として返される値は,「戻り値」と呼ばれる. 戻り値がのちのち必要になる場合は,いったん変数で受け取っておいて,その変数を利用するとよい. 戻り値を受け取る変数 = 関数名( 引数 );

8 前回のおさらい(3) PHPプログラムがうまく実行されないときのチェックリスト HTMLの開始タグ・終了タグはきちんと対応が取れているか?
例:<head> ~ </head> PHPの開始タグ・終了タグはきちんと対応が取れているか? <?php ~ ?> ( ~ ),{ ~ }," ~ ",などの対応は取れているか? あるべきところにセミコロンがあるか? 連想配列に値をセットするとき/値を読むとき,キーの名前を打ち間違えていないか? 例: $message["Wed"] と $message["Wen"];

9 print( ) に関する補足と訂正 第4回のスライドでは,以下のように説明していた. print( ) は関数である.
正しくは,以下の通りであった. (関数レファレンスの中に書かれてはいるけれど…) 厳密に言うと,実は print( ) は関数ではなく PHP言語が持つ特殊な構文構造であり,括弧を省略することもできる. print または print( ) を実行した結果の値(戻り値)は,常に1である.

10 今日勉強すること PHPの実行形態 PHPと入出力(おさらい) PHPとファイル処理

11 PHPの実行形態

12 PHPはプログラミング言語である ここまでの講義では,HTML 文書に埋め込むような使い方だけを扱ってきたが:
実は,PHPのみでプログラムを書き,webサーバ抜きで実行することもできる. bossp のように,PHP処理系がコマンドラインからでも実行できるようにインストールされているサーバでは,以下のような形式でも実行できる. web ブラウザでアクセスしたときに何の表示も出ないようなときには,これによって何がおかしいのかを知ることができるかも知れない. ~]$ php PHPのファイル名

13 PHPプログラムをコマンドラインから実行すると…
ミニ実習 これまでに作ったPHPプログラムをコマンドラインから実行してみよう Tera Term (TTSSH) で bossp に接続して,PHPプログラムの入っているディレクトリ(~/public_html)まで cd して実行 何がおきるか? ~]$ cd public_html ~]$ php PHPのファイル名

14 PHPプログラムの実行形態(まとめ) PHP処理モジュールがインストールされている web サーバ上で,web サーバ経由で実行させる.
PHPプログラムを実行した結果が,HTMLデータに埋め込まれて,ブラウザに返される. PHPがコマンドラインで実行できるようにインストールされているサーバ上で,コマンドラインから起動する. PHPプログラムを実行した結果が,ディスプレイ上に表示される. 実際には: HTTPレスポンスの一部も合わせて出力される. 純粋のPHPだけでなく,HTML埋め込みのPHPも処理できる.

15 PHPと入出力

16 プログラムにとっての入出力(1) プログラムを実行するときには,普通は,外部から与えたデータを元に計算をさせたり,計算した結果を後に(外に)残したりしたいことが多い. 実行時に外部から何のデータも持ってこない(あるいは,外部の影響をまったく受けない)プログラムがあったとしたら: 何度実行しても同じ実行結果しか生み出せない. 2回以上実行する意味がどれだけあるか? 実行時に得られた計算結果を外部に引き渡さない(あるいは,外部に何の影響も残さない)プログラムがあったとしたら: 何を計算してもその結果を知る方法がない. そもそも,実行する意味があるか?

17 プログラムにとっての入出力(2) 入力(input) プログラムに対して,外部から与えられるデータ 入力の例
Enterキーが押されるまでの間にキーボードから打ち込まれた文字列 ファイルの中に格納されていた文字列や数値 出力(output) プログラムが,外部に対して与える(残す)データ 出力の例 ディスプレイの画面に表示される文字列 ファイルの中に保存される文字列や数値

18 プログラムにとっての入出力(3) 通常のプログラムの典型的な実行形態 入力はキーボードから 出力はディスプレイに 実行中の プログラム

19 プログラムにとっての入出力(4) 場合によっては,入力や出力をファイルに対して行うこともある. 実行中の プログラム

20 標準入出力 多くのオペレーティングシステムでは,実行開始されたプログラムに,以下の3種類の入力・出力をあらかじめ与えている.
標準入力(standard input) デフォルトでは,キーボードから 標準出力(standard output) デフォルトでは,ディスプレイに 標準エラー出力(standard error output) 出力が2つに分かれているのは… 正常に処理できたときのメッセージ等と,何か問題が起きたときのメッセージ等を分離して保存しやすくするため.

21 コマンドラインから実行されるPHPプログラム
標準出力・標準エラー出力をディスプレイに出せる. キーボードからの標準入力を受けることもできる. ファイルに対する入出力もできる. ただし,適切な関数を呼び出す必要がある. 実行中の PHPプログラム インターネット TTSSH SSHが提供する「回廊」

22 webサーバ経由で実行されるPHPプログラム(1)
サーバ上のファイルに対する入出力 これもあまり問題はない. 実際,このような機能を提供するための関数もいろいろと用意されている. 実行中の PHPプログラム サーバ インターネット webサーバ PHP 処理 モジュール

23 webサーバ経由で実行されるPHPプログラム(2)
クライアントに対する入出力? ところが,webサーバ上で実行中のPHPプログラムからは,クライアントのキーボードやディスプレイが直接には見えない. 「標準入出力」の考えは,この実行形態にあまりなじまない. 実行中の PHPプログラム webサーバ インターネット クライアント PHP 処理 モジュール

24 ではどうやって入出力するか? しかたがないので,HTTPの力を借りる. 入力は,HTTPリクエストから受け取る.
出力は,HTTPレスポンスに埋め込む. HTTP リクエスト 実行中の PHPプログラム webサーバ インター ネット HTTP レスポンス クライアント PHP 処理 モジュール

25 クライアントへの間接的な出力 これは,print( ) の呼び出しで簡単に実現できる. ステータス行やメッセージヘッダは自動的に付加される.
HTTPレスポンス PHPプログラム ステータス行 <html> <head> ... </head> <body> <?php print("Hello, World!\n"); ?> </body>  </html> メッセージヘッダ (ない場合もある) (空行) <html> <head> ... </head> <body> Hello, World! </body>  </html>

26 クライアントからの間接的な入力 HTMLの <form> タグを用いる. ブラウザ画面内で入力された内容を集める.
入力させる内容は <input> タグで指定する. submit タイプのボタンがクリックされると,集めた内容を HTTP で送信する. reset タイプのボタンがクリックされると,ブラウザに入力された内容をクリアする. <form method="メソッド名" action="URL"> <input ... > ... <input type="submit" value="送信"> <input type="reset" value="クリア"> </form>

27 <form> タグ(1) <form method="メソッド名" action="URL" ...> ...
method:ブラウザに入力されたデータの送信形式 (GETまたはPOST) GET:データをURLの末尾に追加して送信する.送信できるデータ量には制限がある. POST:データをURLとは別に送信する形式.一度に大量のデータを送信することもできる. action:集めたデータの送信先のURL 通常は,PHPプログラム(HTML埋め込みも可)またはCGIプログラム このファイルと同じディレクトリにあるときには,ファイル名だけでも可. <form method="メソッド名" action="URL" ...> ... </form>

28 <form> タグ(2) <form>タグによるデータ受け渡しの様子
<form>タグを含むwebページを表示中に,submit タイプのボタンをクリック 入力されていた内容が,action 先のプログラムに渡される. HTTP リクエスト webサーバ クライアント PHP 処理 モジュール

29 <form> タグ(3) <form>タグは,PHPだけでなく,CGIプログラムに対するデータ入力の方法としても用いられる. CGI(Common Gateway Interface) webサーバに,webブラウザからの要求に応じてプログラムを起動させるためのしくみ よく用いられるのは Perl で書かれたスクリプト 入力データを集める最初の web ページは,HTMLだけで書いてもよいし,CGIプログラムやPHP(HTML埋め込みを含む)を使って書いてもよい. ファイルをアップロードするようなときは,method,action の他に enctype 属性も指定する必要がある.

30 <input> タグのいろいろ(1)
<input type="text" name="名前"...> 1行のテキストの入力欄を作る. name は項目を区別するための名前.項目ごとに違う名前を指定する. size,maxlength 属性の指定ができる. value を指定すると,あらかじめ文字列を入れておくことができる. <p> 簡単なテキスト入力欄の例 <input type="text" name="text1"> </p>

31 <input> タグのいろいろ(2)
<input type="password" name="名前" ...> パスワード形式の入力欄を作る.ここに入力される内容は画面上ではすべてアスタリスク(*)となる. name は項目を区別するための名前.項目ごとに違う名前を指定する. size,maxlength 属性の指定ができる. value を指定すると,あらかじめ文字列を入れておくことができる.ただし,これもすべてアスタリスク(*)となる. <p> 簡単なパスワード入力欄 <input type="password" name="password1"> </p>

32 <input> タグのいろいろ(3)
<input type="radio" name="名前" ...> ラジオボタンを作る.選択されたボタンの value が送信される. name は項目を区別するための名前.選択肢全体で共通の名前を付ける. 同じ name を付けることで複数のラジオボタンがグループ化され,そのグループ内では,1つしか選択できない. checked 指定したボタンは最初から選択された状態になる. <p> 簡単なラジオボタンの例:PHPを使ったことがありますか? <br>  <input type="radio" name="q1" value="はい">はい  <input type="radio" name="q1" value="いいえ">いいえ </p>

33 <input> タグのいろいろ(4)
<input type="checkbox" name="名前"...> チェックボックスを作る.選択されたボタンの value が送信される. name は項目を区別するための名前. 選択肢全体で共通の名前を付ける. 後ろに [] を付ける(説明は次回). 同じ name を付けることで複数のチェックボックスがグループ化され,そのグループ内で複数選択できる. checked 指定したボタンは最初から選択された状態になる. <p> 質問1 あなたの好きな果物は?(複数選択可) <br>  <input type="checkbox" name="q2[]" value="リンゴ">リンゴ  <input type="checkbox" name="q2[]" value="バナナ">バナナ  <input type="checkbox" name="q2[]" value="キウイ">キウイ </p>

34 <input> タグのいろいろ(5)
<input type="file" name="名前" ...> ファイルの送信欄を作る.自動的に「参照...」または「Browse...」ボタンが表示される. name は項目を区別するための名前.項目ごとに違う名前を指定する. size を指定すると,入力欄の横幅を決められる. <p> 送信するファイル: <br> <input type="file" name="uploadfile1"> </p>

35 <input> タグのいろいろ(6)
<input type="hidden" name="名前" ...> ブラウザ画面には表示されない「隠しデータ」を送信する. name は項目を区別するための名前.項目ごとに違う名前を指定する. <p> <input type="hidden" name="title" value="非表示データ"> </p>

36 その他のタグ(1) <textarea name="名前" ...> </textarea>
複数行のテキスト入力欄を作る. name は項目を区別するための名前.項目ごとに違う名前を指定する. cols,rows で入力欄の横幅,高さを決められる.wrap で自動改行のタイプを指定できる. このタグで囲まれた部分に文字列を入れておくと,あらかじめその文字列が入力された状態になる. <p> テキストエリアの例: <br> <textarea name="message1">ここを編集</textarea> </p>

37 その他のタグ(2) <select name="名前"> <option value="値">選択肢の名前</option> ... </select> プルダウンメニューを作る.どれかの選択肢が選択されたとき,value の内容が送信される. name は項目を区別するための名前.選択肢全体で共通の名前を付ける. <p> 質問1 あなたの血液型は?<br>  <select name="q3“> <option value="A">A型</option>   <option value="B">B型</option>   <option value="O">O型</option>   <option value="AB">AB型</option> </select> </p>

38 ファイルを扱ってみよう file1.txt がサーバーに存在する <?php
print "1. output by fpassthru<br>\n"; $fh=fopen("file1.txt","r"); fpassthru($fh); print "<br><br>\n"; print "2. output after input into array and output the array.<br>\n"; $lines=file("file1.txt"); print_r ($lines); ?>

39 ファイルを扱ってみよう: Upload http://bossp. is. kyushu-u. ac
メイン <form enctype="multipart/form-data" method="POST" ACTION="file2.php"><p> <INPUT type="hidden" name="MAX_FILE_SIZE" SIZE=65536><p> <INPUT type="file" name="testfile" size=20><p> <input type="submit" value="Upload"> <input type="reset" value="Clear"> サーバー <?php printf("name1 %s<br>", $_FILES['testfile']['name']); printf("name2 %s<br><br>",$_FILES['testfile']['tmp_name']); $filename=$_FILES['testfile']['tmp_name']; print "1. outout by fpassthru<br>\n"; $fh=fopen($filename,"r"); fpassthru($fh); print "<br><br>\n"; print "2. output after input into array and output the array.<br>\n"; $lines=file($filename); print_r ($lines); ?>

40 練習問題 手元のクライアントPC上で、英数字でテキストファイルを、Windows XP のメモ帳などで作成し、それをサーバーにアップロードして、 そのテストに含まれる単語数 そのテキストに含まれる文字数 を、表示するプログラムを作成せよ。 例: This is a pen. Is this a pen,too? Yes, it is. 単語数 12 文字数?

41 演習問題 クライアントのWindows XP などで英数字でテキストファイルを作成し、そのファイルに含まれる単語を、抽出し、表示するプログラムを作成せよ。 This is a pen. Is this a pen,too? Yes, it is. 出力結果 this (2) is (3) a(2) pen(2) too(1) yes (1) it(1) 単語は出現頻度やアルファベット順にソーティングできると、なおよい。


Download ppt "PHP プログラムの実行 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)"

Similar presentations


Ads by Google