PHP-はじめの一歩(その6)スクリプトの解説

   プログラミング [2010/11/20]
ゆんべの続きです。

言い忘れてましたが、PHPを使って動的なホームページを作ろうと思ったら、知識としては、だいたい以下のようなのが必要です。

・HTML :タグそのものをスクリプトで操作しながら出力するので。
 ワープロ的なエディタでしかHPを書いてない人だと、タグそのものをあまり見慣れてないでしょうから、ちょっとハードルありますね。

・JavaScript :これまたHTMLの一部ですから。
 こちらも「スクリプト」なので、言わばプログラムです。こっちは、ブラウザ側で動かす部分。
 それに対してPHPは、サーバ側で動く部分。

・PHP :ちょっとだけね。

この時点で「うんざり:ギブアップ」な方も多いかもしれませんが、さるでもやれそうだから、思ったほどではないはず。
だいたい、さるなんかは、さるまねベースですから、細かいところは、その都度ぐぐって(Googleで検索して)ます。
例えば、「PHP ファイルアクセス 例」とか入れれば・・・・・出る出る。それを参考にすればいいだけ。

ちなみに、昨日「PHPって何の略?」って気になってぐぐったら。
「ゆめぞー先生のPHP講座」って言うサイトを見つけました。「ふーん」ですた。
でも、PHPが「PHP Hypertext Preprocessor」の略って言う説明を見て、「PHP」が既に入ってんじゃん???


●さて、昨日のPHPスクリプトの解説
============
  <body ・・・・>



1 <table border="1" width="95%">
2
3 <?php
4 //****変数の初期化
5 $item_ary = array();
6
7 //****タブ区切りデータファイルをオープン
8 $tsvfp = fopen("PPkago_sample_list.tsv", "r");
9 if ($tsvfp == false)
10 {
11 ?>

12   <td><tr>データファイルのオープンに失敗しました。</td></tr>
13 <?php
14 }
15 //****オープン成功
16 else
17 {
18   //****1行づつ読み込み
19   while($sline = fgets($tsvfp, 4096))
20   {
21     //****EOF/空行はスキップ
22     if (strlen($sline) < 9) continue;
23     //****日本語の部分をshift-jisからutf-8に変換
24     $sline = mb_convert_encoding($sline, 'UTF-8', 'SJIS-win');
25     //****配列として分解
26     $item_ary = explode("\t", rtrim($sline));
27     //****材料提供可否とコメントを文字メッセージに変換
28     if ($item_ary[9] == "1")
29     {
30       $fOKNG = "可";
31       $OKmsg = "";
32     }
33     else
34     {
35       $fOKNG = "不可";
36       $OKmsg = htmlspecialchars($item_ary[10]);
37     }
38     //****HTMLとして出力
39 ?>

40     <tr>
41     <td width="50%" align="center" bgcolor="#ffffff">
42     <img src="ppeco/<?=htmlspecialchars($item_ary[1]);?>">
43     </td>
44     <td width="50%" align="left" bgcolor="#ffffff">
45     <font color=blue>番号:
46     <b><?=htmlspecialchars($item_ary[0]);?></b></font><br>
47     <?=htmlspecialchars($item_ary[3]);?><br>
48 <?php
49     if ($item_ary[2] != null)
50     {
51 ?>

52     <a href="ppeco/<?=htmlspecialchars($item_ary[2]);?>">
53     大きい写真</a><br>
54 <?php
55     }
56 ?>

57     <font color=blue>サイズ:おおよそ
58      H<?=htmlspecialchars($item_ary[4]);?>
59     ×W<?=htmlspecialchars($item_ary[5]);?>
60     ×D<?=htmlspecialchars($item_ary[6]);?>
61     cm</font><br>
62     <font color=red>サンプル個数:<b>
63      <?=htmlspecialchars($item_ary[7]);?>
64     /<?=htmlspecialchars($item_ary[8]);?>
65     </b></font><br>
66     <font color=red>材料提供:<b><?=$fOKNG;?></b></font><br>
67     <?=OKmsg;?><br>
68     <font color=green>手数料:
69     <b>¥<?=htmlspecialchars($item_ary[11]);?>
70     </b></font><br>
71     <!input type="SUBMIT" NAME="submit" VALUE="申し込み">
72     </td>
73     </tr>
74 <?php
75   }
76   fclose($tsvfp);
77 }
78 ?>

79
80 </table>



  </body>
============

赤く色を付けたところが、PHPのスクリプトです。<?php・・・?>で囲まれていない部分は、そのままクライアント(ブラウザ)に送られるデータ(HTML)になります。

行番号もふって見ました。
でも、このブログ記事の中にHTMLのタグを記述するのがとっても大変なので、以降<>は省略します。

・4行目 //で始まっているので、コメントです。
 //以降は、行末までコメントとみなされます。
 ちなみに、/*・・・*/の場合は、「・・・」の部分がコメントで、複数の行を跨ぐこともできます。

・5行目 配列変数の宣言です。ここにデータ(タブ区切りデータ)一行分を格納します。
 他の単独の値、文字列を格納するための変数であれば、宣言なしでいきなり使えますが、配列は別っみたいです。

・7~14行目 データファイルをオープンしてます。
 オープンに失敗すると、fopen()はfalseをリターンするので、falseの場合は、tr(行)とtd(カラム)の中に、エラーメッセージを表示して、tableタグを閉じます。
 16行目~ はオープン成功時の処理。その終わり位置は77行目です。

・19行目 whileループです。75行目がループ処理の終わり位置です。
 fgets()で1行づつデータを読み込んで、$slineにセットします。
 gets()は、ファイルの最後まで読むとfalseをリターンするので、その時点でループ終了になります。

・22行目 EOF(end of file)とか空白行があった場合、処理しないで次のループ。
 strlen()は文字列の長さを求める関数で、この場合、9文字より少なかったら、continueで19行目に戻ります。

・24行目 読み込んだ1行分のデータの中に日本語が含まれているような場合、sift-jisからutf-8に変換して、元の$slineにセットします。

・26行目 $slineのデータをexplode()関数で、\t(=タブコード)を区切りとして配列に分解します。
 rtrim()は文字列の中の空白文字とかを削除する関数です。
 これで$item_aryという配列に分解されたデータ(文字)が配置されます。

・29~37行目 材料の提供可否を入力データとしては、1、0で表しているので、人間が見て理解できる文字に置き換えます。また、「不可」の場合に「色違いだったらいいよ」とかコメントを入れるので、その場合のコメントを別の変数にセットしてます。

・40~73行目 ここがHTMLデータの中に繰り返し出力される部分です。
 途中<?=変数;?> となっている部分は、「指定されている変数にセットされているデータをその箇所に文字列としてセットする」という意味です。
 htmlspecialchars()は、指定された文字列の中をチェックしてHTMLとしては問題のある文字(<>など)を問題ない形式に変換する関数です。
 また、48行目から56行目では、大きい写真のファイル名が指定されていなければ、「大きい写真」と表示されてリンクされる画像の指定自体をセットしない ようにしています。

・76行目 75行目がwhileループの終わりの処理なので、使い終わったデータファイルをクローズする処理です。

以上、PHPスクリプト自体は、80行にも満たない内容で、やりたいことができそうです。


●動かして見る(デバッグ)
 Eclipseの使い方になります。

・現在開いているPHPスクリプトをテスト動作させるためには、まずはApacheを動かす必要があります。
 何回か前の記事で書いてたのですが、ディスクトップに作成したxammp_controlのショートカットで起動して、表示されるウィンドウでApacheを[Start]させます。

・次にEclipseに戻って、「実行」-「デバックの構成」を選択します。
 左側の欄に「PHP Webページ」と表示されたアイコンがあるので、そこでマウスを右クリックします。
 表示されるプルダウンメニューから「新規」を選択します。
 右側の欄にデバックする対象を指定できるようになるので、「名前」と「ファイル」を指定します。
 「名前」は適当な名前をつければよくて、「ファイル」はテストしたいPHPファイルを指定します。[参照]ボタンで選択ダイアログを使って選んだ方が、パス指定とか悩まなくて済みます。
 一番下の「URL」が実際にデバック開始時の対象PHPを指定する部分で、ブラウザのアドレスバーと同じ指定方法です。通常は「ファイル」指定を元に自動生成でいいでしょう。
 [適用]ボタンで保存が行われ、この設定がデバッグを開始したときのデフォルトになります。
 [デバッグ]ボタンで、デバック開始です。(2回目以降は、[F11]キーで開始することができます。)

・前のデバック構成の指定で「最初の行でブレーク」が指定されているので、先頭行で動きは一時停止します。
 [F7]はGoで、[F6]は一行づつ(ステップ)実行、関数とかに差し掛かったときに関数の中にステップインする場合は[F5]を押せばいいです。

・例えば、ステップ実行とかで一時停止している状態のときに、スクリプト内の変数とかに、マウスカーソルを近づけると、その時点でのその変数の内容がポップアップ表示されます。
 また、ウインドウ内に「変数」というタグがあれば、そのタグを選択すると、使用している変数の一覧と内容が表示されます。

・止めたい行で一時停止したい場合は、スクリプトソースの行番号の左側をマウスで右クリックすると、プルダウンメニューが表示され、その中の「ブレークポイントの切り替え」を選択すれば、その行にブレークポイントが設定されて、そこを処理する前の状態で一時停止します。当然、ブレークポイントを設定した行ががif文の中で、テスト時にそこが処理されないようなときは、一時停止(ブレーク)は起きません。

●動きました、アップします
 載せたコードは、デバッグしたもの(なので、昨日とちょっと違う)だから、当然動きます。
 HTMLから参照している画像ファイル、それと元になるタブ区切りデータをサーバにアップします。
http://nga78n.miraiserver.com/ppecosamples.php 出ました。
 ついでに、データファイルにもう2レコード追加してアップしなおしてみます。
 出るかな・・・・

 次回は、[申し込み]ボタンをここに追加して、それによって表示される申し込みフォームのページを考えます。
では。m(__)m

 


スポンサーサイト


コメントの投稿

非公開コメント

カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
プロフィール

さるもすなる

Author:さるもすなる
さるです。別HPサイト「さるもすなる」から侵食してきました。 山菜/きのこ、それとタイトルにしたPPバンド籠のことをメインに徒然に・・・・暇を持て余したさるの手仕事:男手芸のブログってことで。

最新記事
最新コメント
月別アーカイブ
カテゴリ
天気予報

-天気予報コム- -FC2-
本家のHPのトップ
山菜や茸の話です
PPバンドの籠作品と作り方です
投稿をお待ちしております



ブログランキング・にほんブログ村へ にほんブログ村 ハンドメイドブログへ



マニュアルのお申し込み



検索フォーム
リンク
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR