PHP-はじめの一歩(その10)Windowsプログラムの作り方(3)
プログラミング [2010/11/29]
では、PHPを使って目的のウィンドウプログラムを作って見ましょう。
でも、今日は途中までです。
①まずは、格納場所を用意します。
Bamcompile1.21の下に「ppecomakelist」というフォルダを作成しました。
②ウィンドウのフォームを作ります。
WinBinder付属のFE(FormEditor)を起動して、以下のような、二つのウィンドウ(フォーム)を作成しました。


プロジェクトを保存するときに、それぞれ「ppecomakelist」、「ppecoitemedit」という名前でppecomakelistフォルダに保存します。
そうすると、それぞれ、名前に.form.phpと.prjと付いたファイルが作成されます。
③ppecomakelistフォームを表示する。
昨日作ったサンプルソース(firstwin.phpw)をベースに以下のようなソースにしました。
基本的に 10行目の「include "ppecomakelist.form.php";」だけ間違えなければ、作ったフォームを表示することはできます。
---------------------------
1 <?php
2 //******************************************************************************
3 //PHPで作るWindowプログラム その1
4 //
5 //******************************************************************************
6 //****お決まり。必ず必要なインクルード
7 include "../../WinBinder/phpcode/include/winbinder.php";
8
9 //****フォームエディタ(FE)で作られたソース。
10 include "ppecomakelist.form.php";
11
12 //****ウィンドウへ"process_main"関数をメッセージハンドラとして割り当てている。
13 //****FEで作成されるメインウィンドウID は、$winmainなので変更。
14 wb_set_handler($winmain, "process_main");
15
16 //****ここでウィンドウ のメインループに入る。これより後に、実行文を書いてはならない。
17 wb_main_loop();
18
19
20 //******************************************************************************
21 //メッセージハンドラ
22 // $window ウィンドウオブジェクト
23 // $id コントロールID
24 //******************************************************************************
25 function process_main($window, $id)
26 {
27 static $listfile_filter = array(
28 array("タブ区切りデータ", "*.tsv"),
29 array("テキストデータ", "*.txt"),
30 array("All files", "*.*")
31 );
32
33
34 switch ($id)
35 {
36 //****参照ボタンをクリックされたら
37 case IDC_BTSELECT:
38 //ファイル選択ダイアログを表示
39 $tsvfile = wb_sys_dlg_open($window, "サンプルリストファイル", $listfile_filter);
40 //wb_message_box($window, "selected file=".$tsvfile);
41
42 //選択されたファイル(パス)をエディットにセットする。
43 wb_set_text(wb_get_control($window,IDC_EDFILENAME), $tsvfile);
44 break;
45
46 //****開くボタンをクリックされたら
47 case IDC_BTOPEN:
48 //エディットからファイルパス名を取得
49 $tsvfile = wb_get_text(wb_get_control($window,IDC_EDFILENAME));
50 //wb_message_box($window, "input file name=".$tsvfile);
51
52 //ファイルからデータを読み込んで配列にセットする。
53 $aryList = array();
54 $aryList = GetTsvFile($window, $tsvfile);
55
56 //読み込んだ行数を求める。
57 $line_cnt = count($aryList);
58 //wb_message_box($window, "line count=".$line_cnt);
59
60 //レコード内の番号とサンプル名を結合した文字列を作り、配列にする。
61 $ary_capt = array();
62 for ($i=0; $i<$line_cnt; $i++)
63 {
64 $ary_capt[$i] = $aryList[$i][0] . " " . $aryList[$i][3];
65 //wb_message_box($window, "made list caption=".$ary_capt[$i]);
66 }
67
68 //作った文字列をリストにセットする。
69 wb_set_text(wb_get_control($window,IDC_LSSAMPLES), $ary_capt);
70 break;
71
72 case IDCLOSE:
73 //****【x】ボタンが押された場合
74 //****ウィンドウを終了する。
75 wb_destroy_window($window);
76 break;
77 }
78 }
79
80
81 //******************************************************************************
82 //ファイル読み込み
83 // $window ウィンドウオブジェクト
84 // $tsvfile TSVファイル名
85 //******************************************************************************
86 function GetTsvFile($window, $tsvfile)
87 {
88 $list_ary = array();
89 $line_cnt = 0;
90
91 //****タブ区切りデータファイルをオープン
92 $tsvfp = fopen($tsvfile, "r");
93 if ($tsvfp == false)
94 {
95 wb_message_box($window, "データファイルのオープンに失敗しました。");
96 }
97 //****オープン成功
98 else
99 {
100 //****1行づつ読み込み
101 while($sline = fgets($tsvfp, 4096))
102 {
103 //****EOF/空行はスキップ
104 if (strlen($sline) < 9) continue;
105 //****配列として分解
106 $list_ary[$line_cnt] = array();
107 $list_ary[$line_cnt] = explode("\t", rtrim($sline));
108 //wb_message_box($window, "#".$line_cnt.":".$list_ary[$line_cnt][0]);
109 $line_cnt++;
110 } //end while:read line
111
112 fclose($tsvfp);
113 } //end else:file opened
114
115 return $list_ary;
116 } //end fuction
117
118
119 ?>
---------------------------
④フォームに配置したコントロール(ボタンとかリストとか)に動きを与えます。
今日は、データファイル名を指定して、それをオープンし、内容をリストボックス内に表示するところまで作って見ました。
WinBinderで以下の関数が用意されているので、それを使います。
・wb_sys_dlg_open:ファル選択ダイアログを表示して、選択されたファイルのパス名をリターンする。
・wb_get_control:フォームに配置されているコントロールのウィンドウオブジェクトをコントロールID(番号)から求める。
・wb_set_text:エディットコントロールに文字列をセットする。あるいは、リストボックスに文字列をセットする。リストボックスの場合は、文字列の配列を指定すると複数行にその文字列をセットしてくれる。
・wb_get_text:エディットコントロールから入力されている文字列を取得する。
・wb_message_box:メッセージボックスを表示します。デバック用に使っています。
今日は
「参照」ボタンの処理(37行目~ case IDC_BTSELECT:)と、
「開く」ボタンの処理(47行目~ case IDC_BTOPEN:)を作りました。
指定されたデータファイルをオープンして読み込むところは、前回のサーバ側スクリプトのソースをベースにしました。
上記のソースを「ppecomakelist.phpw」という名前で、ppecomakelistフォルダにセーブします。
セーブした.phpwをダブルクリックするとWinBinderがスクリプトを実行してくれます。
で、こんな絵がでます。

ここで、WinBinderの感想ですが、やっぱりデバッグの仕掛けが無い(と思っている)のがちょっとねー。
なので、あっちこっちにwb_message_boxを仕掛けて、ちょっとづつコードを増やして行ってます。
それと、用意されているwb_xxxx関数のマニュアル(ヘルプ)がWinBinderについてきているんですが、お世辞にも分かりやすいとは言えない内容。ぜんぜん親切じゃない。
やっぱり下知識がなくても作り始められるのはいいんですが、これだとデバッグにはかなり難儀しそうです。
今日はこの辺で。 m(__)m
でも、今日は途中までです。
①まずは、格納場所を用意します。
Bamcompile1.21の下に「ppecomakelist」というフォルダを作成しました。
②ウィンドウのフォームを作ります。
WinBinder付属のFE(FormEditor)を起動して、以下のような、二つのウィンドウ(フォーム)を作成しました。


プロジェクトを保存するときに、それぞれ「ppecomakelist」、「ppecoitemedit」という名前でppecomakelistフォルダに保存します。
そうすると、それぞれ、名前に.form.phpと.prjと付いたファイルが作成されます。
③ppecomakelistフォームを表示する。
昨日作ったサンプルソース(firstwin.phpw)をベースに以下のようなソースにしました。
基本的に 10行目の「include "ppecomakelist.form.php";」だけ間違えなければ、作ったフォームを表示することはできます。
---------------------------
1 <?php
2 //******************************************************************************
3 //PHPで作るWindowプログラム その1
4 //
5 //******************************************************************************
6 //****お決まり。必ず必要なインクルード
7 include "../../WinBinder/phpcode/include/winbinder.php";
8
9 //****フォームエディタ(FE)で作られたソース。
10 include "ppecomakelist.form.php";
11
12 //****ウィンドウへ"process_main"関数をメッセージハンドラとして割り当てている。
13 //****FEで作成されるメインウィンドウID は、$winmainなので変更。
14 wb_set_handler($winmain, "process_main");
15
16 //****ここでウィンドウ のメインループに入る。これより後に、実行文を書いてはならない。
17 wb_main_loop();
18
19
20 //******************************************************************************
21 //メッセージハンドラ
22 // $window ウィンドウオブジェクト
23 // $id コントロールID
24 //******************************************************************************
25 function process_main($window, $id)
26 {
27 static $listfile_filter = array(
28 array("タブ区切りデータ", "*.tsv"),
29 array("テキストデータ", "*.txt"),
30 array("All files", "*.*")
31 );
32
33
34 switch ($id)
35 {
36 //****参照ボタンをクリックされたら
37 case IDC_BTSELECT:
38 //ファイル選択ダイアログを表示
39 $tsvfile = wb_sys_dlg_open($window, "サンプルリストファイル", $listfile_filter);
40 //wb_message_box($window, "selected file=".$tsvfile);
41
42 //選択されたファイル(パス)をエディットにセットする。
43 wb_set_text(wb_get_control($window,IDC_EDFILENAME), $tsvfile);
44 break;
45
46 //****開くボタンをクリックされたら
47 case IDC_BTOPEN:
48 //エディットからファイルパス名を取得
49 $tsvfile = wb_get_text(wb_get_control($window,IDC_EDFILENAME));
50 //wb_message_box($window, "input file name=".$tsvfile);
51
52 //ファイルからデータを読み込んで配列にセットする。
53 $aryList = array();
54 $aryList = GetTsvFile($window, $tsvfile);
55
56 //読み込んだ行数を求める。
57 $line_cnt = count($aryList);
58 //wb_message_box($window, "line count=".$line_cnt);
59
60 //レコード内の番号とサンプル名を結合した文字列を作り、配列にする。
61 $ary_capt = array();
62 for ($i=0; $i<$line_cnt; $i++)
63 {
64 $ary_capt[$i] = $aryList[$i][0] . " " . $aryList[$i][3];
65 //wb_message_box($window, "made list caption=".$ary_capt[$i]);
66 }
67
68 //作った文字列をリストにセットする。
69 wb_set_text(wb_get_control($window,IDC_LSSAMPLES), $ary_capt);
70 break;
71
72 case IDCLOSE:
73 //****【x】ボタンが押された場合
74 //****ウィンドウを終了する。
75 wb_destroy_window($window);
76 break;
77 }
78 }
79
80
81 //******************************************************************************
82 //ファイル読み込み
83 // $window ウィンドウオブジェクト
84 // $tsvfile TSVファイル名
85 //******************************************************************************
86 function GetTsvFile($window, $tsvfile)
87 {
88 $list_ary = array();
89 $line_cnt = 0;
90
91 //****タブ区切りデータファイルをオープン
92 $tsvfp = fopen($tsvfile, "r");
93 if ($tsvfp == false)
94 {
95 wb_message_box($window, "データファイルのオープンに失敗しました。");
96 }
97 //****オープン成功
98 else
99 {
100 //****1行づつ読み込み
101 while($sline = fgets($tsvfp, 4096))
102 {
103 //****EOF/空行はスキップ
104 if (strlen($sline) < 9) continue;
105 //****配列として分解
106 $list_ary[$line_cnt] = array();
107 $list_ary[$line_cnt] = explode("\t", rtrim($sline));
108 //wb_message_box($window, "#".$line_cnt.":".$list_ary[$line_cnt][0]);
109 $line_cnt++;
110 } //end while:read line
111
112 fclose($tsvfp);
113 } //end else:file opened
114
115 return $list_ary;
116 } //end fuction
117
118
119 ?>
---------------------------
④フォームに配置したコントロール(ボタンとかリストとか)に動きを与えます。
今日は、データファイル名を指定して、それをオープンし、内容をリストボックス内に表示するところまで作って見ました。
WinBinderで以下の関数が用意されているので、それを使います。
・wb_sys_dlg_open:ファル選択ダイアログを表示して、選択されたファイルのパス名をリターンする。
・wb_get_control:フォームに配置されているコントロールのウィンドウオブジェクトをコントロールID(番号)から求める。
・wb_set_text:エディットコントロールに文字列をセットする。あるいは、リストボックスに文字列をセットする。リストボックスの場合は、文字列の配列を指定すると複数行にその文字列をセットしてくれる。
・wb_get_text:エディットコントロールから入力されている文字列を取得する。
・wb_message_box:メッセージボックスを表示します。デバック用に使っています。
今日は
「参照」ボタンの処理(37行目~ case IDC_BTSELECT:)と、
「開く」ボタンの処理(47行目~ case IDC_BTOPEN:)を作りました。
指定されたデータファイルをオープンして読み込むところは、前回のサーバ側スクリプトのソースをベースにしました。
上記のソースを「ppecomakelist.phpw」という名前で、ppecomakelistフォルダにセーブします。
セーブした.phpwをダブルクリックするとWinBinderがスクリプトを実行してくれます。
で、こんな絵がでます。

ここで、WinBinderの感想ですが、やっぱりデバッグの仕掛けが無い(と思っている)のがちょっとねー。
なので、あっちこっちにwb_message_boxを仕掛けて、ちょっとづつコードを増やして行ってます。
それと、用意されているwb_xxxx関数のマニュアル(ヘルプ)がWinBinderについてきているんですが、お世辞にも分かりやすいとは言えない内容。ぜんぜん親切じゃない。
やっぱり下知識がなくても作り始められるのはいいんですが、これだとデバッグにはかなり難儀しそうです。
今日はこの辺で。 m(__)m
スポンサーサイト
成長が早い
ねこ [2010/11/28]
秋口に生まれたダヤ子(ダヤン似?の子猫)がみるみるおおきくなってます。

育つごとに、人相・・いや猫相が「悪(わる)」顔になってきてます。
まるで「ガンバ」に出てくる「ノロイ」みたいな感じ。

しかも、落ち着きまったくなし。凶暴さが出てきてます。
でも、たまには縁側で。

ね、キツイ顔つきでしょ。これでも女の子。

育つごとに、人相・・いや猫相が「悪(わる)」顔になってきてます。
まるで「ガンバ」に出てくる「ノロイ」みたいな感じ。

しかも、落ち着きまったくなし。凶暴さが出てきてます。
でも、たまには縁側で。

ね、キツイ顔つきでしょ。これでも女の子。
PHP-はじめの一歩(その9)Windowsプログラムの作り方(2)
プログラミング [2010/11/27]
11/25「PHP-はじめの一歩(その8)Windowsプログラムの作り方」の続きです。
前回で、PHPで作成したスクリプトからexeを作成する方法を説明しました。
今日は、ウィンドウを出して、そこからの操作で「何か」させるプログラムを作るための方法です。
■ウィンドウありプログラムの作成
Window表示部分も言語使用としてはPHPを使う。
ただし、エントリになるスクリプトの拡張子は、.phpwである必要がある。
まずは、サンプルスクリプトを参考にして(ぐぐれば、説明してくれているサイトがあります。)、firstwin.phpwを作ってみましょう。
①シンプルなウィンドウプログラムの作成と仮実行
bamcompileのフォルダの下にfirstwinフォルダを作成し、以下の内容のfirstwin.phpwを作成します。
------------------
<?php
//******************************************************************************
//PHPで作るWindowプログラム その1
//
//******************************************************************************
//****お決まり。必ず必要なインクルード
include "../../WinBinder/phpcode/include/winbinder.php";
//****ウィンドウ作成
//引数は順に、親ウィンドウのハンドル、作成するウィンドウの種類、
//ウィンドウのタイトル、サイズ(w、h)
$mainwin = wb_create_window(NULL, AppWindow, "ようこそ!", 300, 200);
//****コントロール作成(今回の場合はボタン)
//引数は、親ウィンドウハンドル(前の行のリターン)、コントロールの種類、
//コントロールの配置位置(x、y)、サイズ(w、h)、コントロールのID。
wb_create_control($mainwin, PushButton, "ここを押す", 110, 80, 80, 40, 1);
//****ウィンドウへ"process_main"関数をメッセージハンドラとして割り当てている。
wb_set_handler($mainwin, "process_main");
//****ここでウィンドウ のメインループに入る。
//これより後に、実行文を書いてはいけないそうです。
wb_main_loop();
//******************************************************************************
//メッセージハンドラ
//******************************************************************************
//第1引数にウィンドウのハンドラ、
//第2引数にウィンドウ内のオブジェクトに割り当てられたIDが入る。
function process_main($window, $id)
{
switch ($id)
{
case 1:
//****ポップアップを生成。
//第1引数はparentウィンドウ、第2引数は表示テキ スト。
wb_message_box($window, "メッセージボックスです。");
break;
case IDCLOSE:
//****【x】ボタンが押された場合
//****ウィンドウを終了する。
wb_destroy_window($window);
break;
}
}
?>
------------------
セーブしたfirstwin.phpwのアイコンが、WinBinderのアイコンになっていれば、その状態で実行することが可能です。ダブルクリックしてみてください。
タイトル「ようこそ」の画面が表示されれば、成功です。
もし、一瞬ウィンドウが表示されているようで、すぐ消える場合は、インクルードしているwinbinder.phpのパスが正しくない可能性があるので、見直してください。
もっと凝ったものを作成したい場合には、WinBinderに含まれるライブラリ仕様を参照する必要があります。
「スタート」-「すべてのプログラム」-「WinBinder」-「Welcome to WinBinder」を起動します。右図のウィンドウが表示されます。ウィンドウ中の「WinBinder Manual」をクリックして、関数リファレンスを参照してください。
その他に、WinBinderをインストールしたフォルダにサンプルがありますので、参考にしてください。
C:\Pleiades_e35\WinBinder\phpcode\examples
②ウィンドウのデザイン
画面の大きさやカスタムコントロールの配置を最初からデザインしたい場合は、「スタート」-「すべてのプログラム」-「WinBinder」-「Form Editor」で、FormEditorを起動できます。
FormEditorの使い方の詳細は割愛します。
仮に下図のようなウィンドウを作ったとします。(使えるコントロール全部貼ってみました。)

FormEditorのメニュー「File」-「Save project」を選択し、「保存する場所」にfirstwinフォルダを選択して、「ファイル名」(プロジェクト名)も「firstwin」として、作ったデザインをセーブします。
そうすると、firstwinフォルダに、firstwin.prjとfirstwin.form.phpというファイルが作成されます。
firstwin.form.phpには、デザインしたウィンドウ/コントロールを生成・表示すための、スクリプト(ソース)が含まれています。firstwin.prjは、そのソースをFormEditorで再編集するときのためのデータです。(注:なので、.form.phpを別のエディタで編集した後に、FormEditorで開いてセーブし直すと、他のエディタで編集した内容は無効になります。)
③デザインの取り込み
次に、このデザインを先のfirstwin.phpwに取り込みましょう。
firswin.phpwを以下のように編集することで、取り込み可能です。
------------------
<?php
//******************************************************************************
//PHPで作るWindowプログラム その1
//
//******************************************************************************
//****お決まり。必ず必要なインクルード
include "../../WinBinder/phpcode/include/winbinder.php";
//****ウィンドウ作成
//引数は順に、親ウィンドウのハンドル、作成するウィンドウの種類、
//ウィンドウのタイトル、サイズ(w、h)
//****FEで作成したソースに含まれるため、不要。
//$mainwin = wb_create_window(NULL, AppWindow, "ようこそ!", 300, 200);
//****コントロール作成(今回の場合はボタン)
//引数は、親ウィンドウハンドル(前の行のリターン)、コントロールの種類、
//コントロールの配置位置(x、y)、サイズ(w、h)、コントロールのID。
//****FEで作成したソースに含まれるため、不要。
//wb_create_control($mainwin, PushButton, "ここを押す", 110, 80, 80, 40, 1);
//****フォームエディタ(FE)で作られたソース。
//wb_create_windowと_controlが含まれる
include "firstwin.form.php";
//****ウィンドウへ"process_main"関数をメッセージハンドラとして割り当てている。
//****FEで作成されるメインウィンドウIDは、$winmainなので変更。
//wb_set_handler($mainwin, "process_main");
wb_set_handler($winmain, "process_main");
//****ここでウィンドウ のメインループに入る。
//これより後に、実行文を書いてはいけないそうです。
wb_main_loop();
//******************************************************************************
//メッセージハンドラ
//******************************************************************************
//第1引数にウィンドウのハンドラ、
//第2引数にウィンドウ内のオブジェクトに割り当てられたIDが入る。
function process_main($window, $id)
{
switch ($id)
{
//****FEで作成したボタンコントロールのIDがIDC_PUSHBUTTON1001なので変更。
//case 1:
case IDC_PUSHBUTTON1001:
//****ポップアップを生成。
//第1引数はparentウィンドウ、第2引数は表示テキスト。
wb_message_box($window, "メッセージボックスです。");
break;
case IDCLOSE:
//****【x】ボタンが押された場合
//****ウィンドウを終了する。
wb_destroy_window($window);
break;
}
}
?>
------------------
.phpwをセーブして、前と同じように、ダブルクリックして実行してみましょう。
以下の画面が表示されれば成功です。
[PushButton1]をクリックするとメッセージボックスが表示されるはずです。
⑥コンパイルして単独で動作するEXEを作る
さあ、いよいよ単独動作(配布)可能なEXEの作成になります。
難解です。しかもデバッカがないので、ミスしても簡単には修正できません。なぜ、動かないのか調査するのが大変なので、ミスしないように注意してください。
⑥-1 コンパイルパラメタ指定ファイルを作る
以下の内容をfirstwinフォルダ内にfirstwin.bcpという名前でセーブする。
------------------
MAINFILE firstwin.phpw
OUTFILE firstwin.exe
WINDOWED
COMPRESS
DESTINATION /
EMBED firstwin
EMBED firstwin.form.php
DESTINATION include
EMBED C:\Pleiades_e35\WinBinder\phpcode\include\winbinder.php
EMBED C:\Pleiades_e35\WinBinder\phpcode\include\wb_generic.inc.php
EMBED C:\Pleiades_e35\WinBinder\phpcode\include\wb_resources.inc.php
EMBED C:\Pleiades_e35\WinBinder\phpcode\include\wb_windows.inc.php
EXTENSION C:\Pleiades_e35\WinBinder\binaries\php4\ext\php_winbinder.dll
------------------
⑥-2 スクリプト内のinclude指定の変更
DESTINATIONとEMBEDで指定する実行時仮想空間に従ってスクリプトのincludeパスを変更する必要がある。
つまり、⑥-1の指定の場合、EXE実行時には、
/(ルート)にfirstwin.phpwとfirstwin.form.phpが配置され、
/includeにwinbinder.php~wb_windows.inc.phpが配置されている
という意味になるらしい。
よって、firstwin.phpw内のincludeの指定では、その仮想のフォルダ指定としなければならない。
------------------
:
:
//****お決まり。必ず必要なインクルード
//※絶対パス指定だと、exeにしたとき実行時にもそのパスを参照してしまう。
//include "../../WinBinder/phpcode/include/winbinder.php";
include "include/winbinder.php";
:
:
------------------
他の.phpソースをインルードしてその中のfunctionを実行したいような場合もたぶん同様に、.bcpで指定する必要があるはず。
ちなみに、その辺の意味を知らずに外部.phpのインクルードを行ったが、うまく行かなかった。
⑥-3 コンパイルする
「■ウィンドウなしのプログラムを作成してみる」で説明したのと同様に、ディスクトップに作成したBamcompileのショートカットを起動する。表示されるDOSプロンプトで以下のコマンドを実行する。
例)C:\Pleiades_e35\bamcompile1.21> bamcompile firstwin\firstwin.bcp
------------------
C:\Pleiades_e35\bamcompile1.21> bamcompile firstwin\firstwin.bcp
Bambalam PHP EXE Compiler/Embedder 1.21
Using project file: firstwin\firstwin.bcp
Windowed application
Compress
Mainfile: firstwin.phpw
Outfile: firstwin.exe
Embedding firstwin.bcpEncoding and embedding firstwin.form.php
Encoding and embedding firstwin.phpwEmbedding firstwin.prj
Encoding and embedding include/winbinder.php
Encoding and embedding include/wb_generic.inc.php
Encoding and embedding include/wb_resources.inc.php
Encoding and embedding include/wb_windows.inc.php
Embedding php_winbinder.dll and adding it to extension loader
Compressing final exe..
Compression done
firstwin.exe created successfully!
C:\Pleiades_e35\bamcompile1.21> dir
------------------
コンパイルが成功したら、dirコマンドを打って見ましょう。
bamcompile1.21の下に、firstwin.exeが作成されているはずです。
⑥-4 動作確認
本来、単純に作成されたEXEを実行すればいい話なのですが、この環境の場合はそうはいかないようです。
開発環境だけで動作するexeが作られる場合があるので、以下のことをやって確認してみてください。
・WinBinderのインストール先フォルダの名前を一時的に変更する。
C:\Pleiades_e35\WinBinder → TWinBinder
・作ったプログラムのソースフォルダの名前を一時的に変更する。
C:\Pleiades_e35\bamcompile1.21\firstwin → Tfirstwin
その状態で、DOSプロンプトから実行してみてください。
例)C:\Pleiades_e35\bamcompile1.21> firstwin
⑥-1、⑥-2の工程が正しく行われていない場合、.phpwを実行すると正しく動作するのに、⑥-4の確認、あるいは、WinBinderを組み込んでいない他のWindowsPCでは動作しない(全く表示しないし、メッセージも出ません。)現象になりますので、十分ご注意ください。
PHPスクリプト処理レベルでのエラーがある場合は、DOSプロンプトからコマンド入力で機動した場合、かろうじてメッセージが表示されることがあります。
おー 長かった。
次回は、いよいよ目的のプログラムを作ってみたいと思います。
今日はこの辺で。 m(__)m
前回で、PHPで作成したスクリプトからexeを作成する方法を説明しました。
今日は、ウィンドウを出して、そこからの操作で「何か」させるプログラムを作るための方法です。
■ウィンドウありプログラムの作成
Window表示部分も言語使用としてはPHPを使う。
ただし、エントリになるスクリプトの拡張子は、.phpwである必要がある。
まずは、サンプルスクリプトを参考にして(ぐぐれば、説明してくれているサイトがあります。)、firstwin.phpwを作ってみましょう。
①シンプルなウィンドウプログラムの作成と仮実行
bamcompileのフォルダの下にfirstwinフォルダを作成し、以下の内容のfirstwin.phpwを作成します。
------------------
<?php
//******************************************************************************
//PHPで作るWindowプログラム その1
//
//******************************************************************************
//****お決まり。必ず必要なインクルード
include "../../WinBinder/phpcode/include/winbinder.php";
//****ウィンドウ作成
//引数は順に、親ウィンドウのハンドル、作成するウィンドウの種類、
//ウィンドウのタイトル、サイズ(w、h)
$mainwin = wb_create_window(NULL, AppWindow, "ようこそ!", 300, 200);
//****コントロール作成(今回の場合はボタン)
//引数は、親ウィンドウハンドル(前の行のリターン)、コントロールの種類、
//コントロールの配置位置(x、y)、サイズ(w、h)、コントロールのID。
wb_create_control($mainwin, PushButton, "ここを押す", 110, 80, 80, 40, 1);
//****ウィンドウへ"process_main"関数をメッセージハンドラとして割り当てている。
wb_set_handler($mainwin, "process_main");
//****ここでウィンドウ のメインループに入る。
//これより後に、実行文を書いてはいけないそうです。
wb_main_loop();
//******************************************************************************
//メッセージハンドラ
//******************************************************************************
//第1引数にウィンドウのハンドラ、
//第2引数にウィンドウ内のオブジェクトに割り当てられたIDが入る。
function process_main($window, $id)
{
switch ($id)
{
case 1:
//****ポップアップを生成。
//第1引数はparentウィンドウ、第2引数は表示テキ スト。
wb_message_box($window, "メッセージボックスです。");
break;
case IDCLOSE:
//****【x】ボタンが押された場合
//****ウィンドウを終了する。
wb_destroy_window($window);
break;
}
}
?>
------------------
セーブしたfirstwin.phpwのアイコンが、WinBinderのアイコンになっていれば、その状態で実行することが可能です。ダブルクリックしてみてください。
タイトル「ようこそ」の画面が表示されれば、成功です。
もし、一瞬ウィンドウが表示されているようで、すぐ消える場合は、インクルードしているwinbinder.phpのパスが正しくない可能性があるので、見直してください。
もっと凝ったものを作成したい場合には、WinBinderに含まれるライブラリ仕様を参照する必要があります。
「スタート」-「すべてのプログラム」-「WinBinder」-「Welcome to WinBinder」を起動します。右図のウィンドウが表示されます。ウィンドウ中の「WinBinder Manual」をクリックして、関数リファレンスを参照してください。
その他に、WinBinderをインストールしたフォルダにサンプルがありますので、参考にしてください。
C:\Pleiades_e35\WinBinder\phpcode\examples
②ウィンドウのデザイン
画面の大きさやカスタムコントロールの配置を最初からデザインしたい場合は、「スタート」-「すべてのプログラム」-「WinBinder」-「Form Editor」で、FormEditorを起動できます。
FormEditorの使い方の詳細は割愛します。
仮に下図のようなウィンドウを作ったとします。(使えるコントロール全部貼ってみました。)

FormEditorのメニュー「File」-「Save project」を選択し、「保存する場所」にfirstwinフォルダを選択して、「ファイル名」(プロジェクト名)も「firstwin」として、作ったデザインをセーブします。
そうすると、firstwinフォルダに、firstwin.prjとfirstwin.form.phpというファイルが作成されます。
firstwin.form.phpには、デザインしたウィンドウ/コントロールを生成・表示すための、スクリプト(ソース)が含まれています。firstwin.prjは、そのソースをFormEditorで再編集するときのためのデータです。(注:なので、.form.phpを別のエディタで編集した後に、FormEditorで開いてセーブし直すと、他のエディタで編集した内容は無効になります。)
③デザインの取り込み
次に、このデザインを先のfirstwin.phpwに取り込みましょう。
firswin.phpwを以下のように編集することで、取り込み可能です。
------------------
<?php
//******************************************************************************
//PHPで作るWindowプログラム その1
//
//******************************************************************************
//****お決まり。必ず必要なインクルード
include "../../WinBinder/phpcode/include/winbinder.php";
//****ウィンドウ作成
//引数は順に、親ウィンドウのハンドル、作成するウィンドウの種類、
//ウィンドウのタイトル、サイズ(w、h)
//****FEで作成したソースに含まれるため、不要。
//$mainwin = wb_create_window(NULL, AppWindow, "ようこそ!", 300, 200);
//****コントロール作成(今回の場合はボタン)
//引数は、親ウィンドウハンドル(前の行のリターン)、コントロールの種類、
//コントロールの配置位置(x、y)、サイズ(w、h)、コントロールのID。
//****FEで作成したソースに含まれるため、不要。
//wb_create_control($mainwin, PushButton, "ここを押す", 110, 80, 80, 40, 1);
//****フォームエディタ(FE)で作られたソース。
//wb_create_windowと_controlが含まれる
include "firstwin.form.php";
//****ウィンドウへ"process_main"関数をメッセージハンドラとして割り当てている。
//****FEで作成されるメインウィンドウIDは、$winmainなので変更。
//wb_set_handler($mainwin, "process_main");
wb_set_handler($winmain, "process_main");
//****ここでウィンドウ のメインループに入る。
//これより後に、実行文を書いてはいけないそうです。
wb_main_loop();
//******************************************************************************
//メッセージハンドラ
//******************************************************************************
//第1引数にウィンドウのハンドラ、
//第2引数にウィンドウ内のオブジェクトに割り当てられたIDが入る。
function process_main($window, $id)
{
switch ($id)
{
//****FEで作成したボタンコントロールのIDがIDC_PUSHBUTTON1001なので変更。
//case 1:
case IDC_PUSHBUTTON1001:
//****ポップアップを生成。
//第1引数はparentウィンドウ、第2引数は表示テキスト。
wb_message_box($window, "メッセージボックスです。");
break;
case IDCLOSE:
//****【x】ボタンが押された場合
//****ウィンドウを終了する。
wb_destroy_window($window);
break;
}
}
?>
------------------
.phpwをセーブして、前と同じように、ダブルクリックして実行してみましょう。
以下の画面が表示されれば成功です。
[PushButton1]をクリックするとメッセージボックスが表示されるはずです。
⑥コンパイルして単独で動作するEXEを作る
さあ、いよいよ単独動作(配布)可能なEXEの作成になります。
難解です。しかもデバッカがないので、ミスしても簡単には修正できません。なぜ、動かないのか調査するのが大変なので、ミスしないように注意してください。
⑥-1 コンパイルパラメタ指定ファイルを作る
以下の内容をfirstwinフォルダ内にfirstwin.bcpという名前でセーブする。
------------------
MAINFILE firstwin.phpw
OUTFILE firstwin.exe
WINDOWED
COMPRESS
DESTINATION /
EMBED firstwin
EMBED firstwin.form.php
DESTINATION include
EMBED C:\Pleiades_e35\WinBinder\phpcode\include\winbinder.php
EMBED C:\Pleiades_e35\WinBinder\phpcode\include\wb_generic.inc.php
EMBED C:\Pleiades_e35\WinBinder\phpcode\include\wb_resources.inc.php
EMBED C:\Pleiades_e35\WinBinder\phpcode\include\wb_windows.inc.php
EXTENSION C:\Pleiades_e35\WinBinder\binaries\php4\ext\php_winbinder.dll
------------------
・MAINFILE | :エントリのある.phpwを指定する。 | |
・OUTFILE | :コンパイルした結果のEXE名を指定する。 | |
・WINDOWED | :ウィンドウプログラムである場合に指定する。これを指定するとEXE起動時にDOSプロンプトを開かない。ただし、デバック段階では、指定しないと、チープではあるがDOSプロンプトでエラーメッセージを確認することができる場合がある。 | |
・COMPRESS | :作成されたEXEを圧縮して小さくする指定。 | |
・DESTINATION | :.phpwをコンパイルして実行する場合、もともと動作していた環境(includeしていた.php)を仮想的にEXE内部に配置する必要があるらしい、その仮想フォルダを指定する。 | |
・EMBED | :先にDESTINATIONで指定した仮想フォルダに配置する(組み込む)インクルードファイルを指定する。 | |
・EXTENSION | :DLLをEXE内に取り込む場合に指定する。少なくともphp_winbinder.dllは必要。 |
⑥-2 スクリプト内のinclude指定の変更
DESTINATIONとEMBEDで指定する実行時仮想空間に従ってスクリプトのincludeパスを変更する必要がある。
つまり、⑥-1の指定の場合、EXE実行時には、
/(ルート)にfirstwin.phpwとfirstwin.form.phpが配置され、
/includeにwinbinder.php~wb_windows.inc.phpが配置されている
という意味になるらしい。
よって、firstwin.phpw内のincludeの指定では、その仮想のフォルダ指定としなければならない。
------------------
:
:
//****お決まり。必ず必要なインクルード
//※絶対パス指定だと、exeにしたとき実行時にもそのパスを参照してしまう。
//include "../../WinBinder/phpcode/include/winbinder.php";
include "include/winbinder.php";
:
:
------------------
他の.phpソースをインルードしてその中のfunctionを実行したいような場合もたぶん同様に、.bcpで指定する必要があるはず。
ちなみに、その辺の意味を知らずに外部.phpのインクルードを行ったが、うまく行かなかった。
⑥-3 コンパイルする
「■ウィンドウなしのプログラムを作成してみる」で説明したのと同様に、ディスクトップに作成したBamcompileのショートカットを起動する。表示されるDOSプロンプトで以下のコマンドを実行する。
例)C:\Pleiades_e35\bamcompile1.21> bamcompile firstwin\firstwin.bcp
------------------
C:\Pleiades_e35\bamcompile1.21> bamcompile firstwin\firstwin.bcp
Bambalam PHP EXE Compiler/Embedder 1.21
Using project file: firstwin\firstwin.bcp
Windowed application
Compress
Mainfile: firstwin.phpw
Outfile: firstwin.exe
Embedding firstwin.bcpEncoding and embedding firstwin.form.php
Encoding and embedding firstwin.phpwEmbedding firstwin.prj
Encoding and embedding include/winbinder.php
Encoding and embedding include/wb_generic.inc.php
Encoding and embedding include/wb_resources.inc.php
Encoding and embedding include/wb_windows.inc.php
Embedding php_winbinder.dll and adding it to extension loader
Compressing final exe..
Compression done
firstwin.exe created successfully!
C:\Pleiades_e35\bamcompile1.21> dir
------------------
コンパイルが成功したら、dirコマンドを打って見ましょう。
bamcompile1.21の下に、firstwin.exeが作成されているはずです。
⑥-4 動作確認
本来、単純に作成されたEXEを実行すればいい話なのですが、この環境の場合はそうはいかないようです。
開発環境だけで動作するexeが作られる場合があるので、以下のことをやって確認してみてください。
・WinBinderのインストール先フォルダの名前を一時的に変更する。
C:\Pleiades_e35\WinBinder → TWinBinder
・作ったプログラムのソースフォルダの名前を一時的に変更する。
C:\Pleiades_e35\bamcompile1.21\firstwin → Tfirstwin
その状態で、DOSプロンプトから実行してみてください。
例)C:\Pleiades_e35\bamcompile1.21> firstwin
⑥-1、⑥-2の工程が正しく行われていない場合、.phpwを実行すると正しく動作するのに、⑥-4の確認、あるいは、WinBinderを組み込んでいない他のWindowsPCでは動作しない(全く表示しないし、メッセージも出ません。)現象になりますので、十分ご注意ください。
PHPスクリプト処理レベルでのエラーがある場合は、DOSプロンプトからコマンド入力で機動した場合、かろうじてメッセージが表示されることがあります。
おー 長かった。
次回は、いよいよ目的のプログラムを作ってみたいと思います。
今日はこの辺で。 m(__)m
PHP-はじめの一歩(その8)Windowsプログラムの作り方
プログラミング [2010/11/25]
第2部です。
PHPでWindowsプログラムを作れるそうです。
なので、先日作ったサーバスクリプトが使用するタブ区切りデータを作成するためのプログラムを作ってみたいと思います。(※テキストエディタがあれば、十分作成可能なようにデータは簡素化した形式にしましたが、ここはアエテやって見ます。)
●必要環境
▲Bamcompile
PHPをコンパイルしてexeにする環境
①http://www.bambalam.se/bamcompile/
「Download Bamcompile1.21 (win32) zip」を選択しダウンロードする。
→http://www.bambalam.se/bamcompile/download/bamcompile1.21.zip
▲WinBinder
PHPスクリプトでウィンドウ表示/描画などを行うためのライブラリ?スクリプト動作環境
②http://winbinder.org/download.php
「WinBinder-0.46.0.exe」を選択する。
→http://winbinder.org/files/WinBinder-0.46.0.exe
上記2つだと、デバッグがなんか難しそうなので、コアの処理のデバッグ用に前回もつかったEclipseを使います。もしかしたら、WinBinderのスクリプトもデバックできるのかも・・・・
▲Eclipse
③http://mergedoc.sourceforge.jp/
「Eclips 3.5 Galileo Pleades All in One」を選択し、その後サブセットを選択する画面が表示されるので「PHP」版か「Ultimate」版を選択するとダウンロードが開始される。使用したのは、PHP-JREあり版
→http://ftp.jaist.ac.jp/pub/mergedoc/pleiades/3.5/pleiades-e3.5-php-jre_20100226.zip
●インストール
Eclipseのインストールについては、省略します。
▲Bamcompileのインストール
インストールは、bamcompile1.21.zipを展開して、適当なフォルダに配置するのみ。
コンパイルの実行は、DOSプロンプト上で行うので、ショートカットを準備する。
1)ディスクトップ上でマウスの右クリックで、「新規作成」-「ショートカット」を選択する。
2)ショートカット作成のウィザードが起動されるので、以下を指定する。
作成場所:ディスクトップ
名前:bamcompile
3)作成された、ショートカットのアイコンを右クリックし、「プロパティ」を表示し、以下を指定する。
リンク先:%SystemRoot%\system32\cmd.exe /k
作業フォルダ:C:\Pleiades_e35\bamcompile1.21
※C:\Pleiades_e35は、展開したbamcompile1.21の配置先。
▲WinBinderのインストール
インストールは、WinBinder-0.46.0.exeを実行し、インストール先にbamcompileのインストール先の近くを指定する。例えば、C:\\Pleiades_e35\WinBinderとか。
●ウィンドウなしのプログラムを作成してみる
①phpスクリプトを作成する
Eclipseを起動して、簡単なプログラムを作成する。
デバックはEclips上で実施する。以下を「first.php」として作成。
---------------
<?php
echo "はじめてなんです。\n";
echo "どうぞお手柔らかに。\n";
?>
---------------
※Eclips上でのテスト実行の方法については省略する。
※bamconpileのサポートするのは、PHP4なので、Eclipsのプロジェクトを作成する際に、PHP4を指定すること。
②コンパイルして実行
Bamcompileの環境下に作成したphpファイルをコピーする。
例)C:\Pleiades_e35\bamcompile1.21\first\first.php
注)Eclipseの環境がS-JIS以外だと、日本語は文字化けするので、phpスクリプトをS-JISに変換する必要があります。例えば、sakuraエディタは、「名前を付けて保存」を選択すると、「文字コードセット」と「改行コード」を指定できるので、それぞれ「SJIS」、「CR+LF」を選択して保存し直すとよいでしょう。
Bamcompileのショートカットを起動し、表示されるDOSプロンプトで以下のコマンドを実行する。
例)C:\\Pleiades_e35\bamcompile1.21> bamcompile first\first.php first\first.exe
コンパイルが成功したら、実行してみましょう。
---------------
C:\\Pleiades_e35\bamcompile1.21> bamcompile first\first.php first\first.exe
Bambalam PHP EXE Compiler/Embedder 1.21
Mainfile: first\first.php
Outfile: first\first.exe
Encoding and embedding first\first.php
first\first.exe created successfully!
C:\\Pleiades_e35\bamcompile1.21>first\first
はじめてなんです。
どうぞお手柔らかに。
C:\\Pleiades_e35\bamcompile1.21>
---------------
簡単でしたね。
では、今日はこの辺で。 m(__)m
PHPでWindowsプログラムを作れるそうです。
なので、先日作ったサーバスクリプトが使用するタブ区切りデータを作成するためのプログラムを作ってみたいと思います。(※テキストエディタがあれば、十分作成可能なようにデータは簡素化した形式にしましたが、ここはアエテやって見ます。)
●必要環境
▲Bamcompile
PHPをコンパイルしてexeにする環境
①http://www.bambalam.se/bamcompile/
「Download Bamcompile1.21 (win32) zip」を選択しダウンロードする。
→http://www.bambalam.se/bamcompile/download/bamcompile1.21.zip
▲WinBinder
PHPスクリプトでウィンドウ表示/描画などを行うためのライブラリ?スクリプト動作環境
②http://winbinder.org/download.php
「WinBinder-0.46.0.exe」を選択する。
→http://winbinder.org/files/WinBinder-0.46.0.exe
上記2つだと、デバッグがなんか難しそうなので、コアの処理のデバッグ用に前回もつかったEclipseを使います。もしかしたら、WinBinderのスクリプトもデバックできるのかも・・・・
▲Eclipse
③http://mergedoc.sourceforge.jp/
「Eclips 3.5 Galileo Pleades All in One」を選択し、その後サブセットを選択する画面が表示されるので「PHP」版か「Ultimate」版を選択するとダウンロードが開始される。使用したのは、PHP-JREあり版
→http://ftp.jaist.ac.jp/pub/mergedoc/pleiades/3.5/pleiades-e3.5-php-jre_20100226.zip
●インストール
Eclipseのインストールについては、省略します。
▲Bamcompileのインストール
インストールは、bamcompile1.21.zipを展開して、適当なフォルダに配置するのみ。
コンパイルの実行は、DOSプロンプト上で行うので、ショートカットを準備する。
1)ディスクトップ上でマウスの右クリックで、「新規作成」-「ショートカット」を選択する。
2)ショートカット作成のウィザードが起動されるので、以下を指定する。
作成場所:ディスクトップ
名前:bamcompile
3)作成された、ショートカットのアイコンを右クリックし、「プロパティ」を表示し、以下を指定する。
リンク先:%SystemRoot%\system32\cmd.exe /k
作業フォルダ:C:\Pleiades_e35\bamcompile1.21
※C:\Pleiades_e35は、展開したbamcompile1.21の配置先。
▲WinBinderのインストール
インストールは、WinBinder-0.46.0.exeを実行し、インストール先にbamcompileのインストール先の近くを指定する。例えば、C:\\Pleiades_e35\WinBinderとか。
●ウィンドウなしのプログラムを作成してみる
①phpスクリプトを作成する
Eclipseを起動して、簡単なプログラムを作成する。
デバックはEclips上で実施する。以下を「first.php」として作成。
---------------
<?php
echo "はじめてなんです。\n";
echo "どうぞお手柔らかに。\n";
?>
---------------
※Eclips上でのテスト実行の方法については省略する。
※bamconpileのサポートするのは、PHP4なので、Eclipsのプロジェクトを作成する際に、PHP4を指定すること。
②コンパイルして実行
Bamcompileの環境下に作成したphpファイルをコピーする。
例)C:\Pleiades_e35\bamcompile1.21\first\first.php
注)Eclipseの環境がS-JIS以外だと、日本語は文字化けするので、phpスクリプトをS-JISに変換する必要があります。例えば、sakuraエディタは、「名前を付けて保存」を選択すると、「文字コードセット」と「改行コード」を指定できるので、それぞれ「SJIS」、「CR+LF」を選択して保存し直すとよいでしょう。
Bamcompileのショートカットを起動し、表示されるDOSプロンプトで以下のコマンドを実行する。
例)C:\\Pleiades_e35\bamcompile1.21> bamcompile first\first.php first\first.exe
コンパイルが成功したら、実行してみましょう。
---------------
C:\\Pleiades_e35\bamcompile1.21> bamcompile first\first.php first\first.exe
Bambalam PHP EXE Compiler/Embedder 1.21
Mainfile: first\first.php
Outfile: first\first.exe
Encoding and embedding first\first.php
first\first.exe created successfully!
C:\\Pleiades_e35\bamcompile1.21>first\first
はじめてなんです。
どうぞお手柔らかに。
C:\\Pleiades_e35\bamcompile1.21>
---------------
簡単でしたね。
では、今日はこの辺で。 m(__)m
マニュアル、サンプルの申し込みページ復活
PPバンド籠 [2010/11/21]
大急ぎで、マニュアルとサンプル籠の申し込みページを復活させました。
サンプル籠の方は、ほとんど「もの」がなくて、最近作って置いてあるものをそろそろ陳列しようかと思ってますが・・・・・
マニュアル:「初級編2」のお申し込みができるようになっております。
→「http://sarumosunaru.starfree.jp/ppecofrm.php」
概要説明は、こちらです。
どうぞ、よろしく。
PHP-はじめの一歩(その7)サーバ側完了
プログラミング [2010/11/21]
昨日の続きです。
以下のシステム構成が全体なのですが、
(Ⅰ)自分のPC上で、タブ区切り形式のデータを作る(編集更新する)ためのプログラム
(Ⅱ)上記のプログラムで作成したタブ区切りデータを読み込んで、一覧ページを表示するためのPHPスクリプト
(Ⅲ)一覧ページ上の「申し込み」ボタンが押されたときに、「申し込み」ページを表示し、必要事項を入力して「送信」とやったら、さるにその内容の連絡を送るPHPスクリプト
今日、サーバ側で動作する(Ⅱ)(Ⅲ)をほぼ完成させました。
(Ⅲ)でちょっと大変だったのが、JavaScriptで動作する金額計算と、PHPでメールを自動的に送信するところ。
ここでのソース開示は、セキュリティ的になんだか無防備すぎるかと思うので、止めておきます。
残りは、(Ⅰ)ですが、
実は、PHPでWindowsアプリを作れるらしいので、それを次回から書き込んで行きます。
今日は、この辺で。 m(__)m
以下のシステム構成が全体なのですが、
(Ⅰ)自分のPC上で、タブ区切り形式のデータを作る(編集更新する)ためのプログラム
(Ⅱ)上記のプログラムで作成したタブ区切りデータを読み込んで、一覧ページを表示するためのPHPスクリプト
(Ⅲ)一覧ページ上の「申し込み」ボタンが押されたときに、「申し込み」ページを表示し、必要事項を入力して「送信」とやったら、さるにその内容の連絡を送るPHPスクリプト
今日、サーバ側で動作する(Ⅱ)(Ⅲ)をほぼ完成させました。
(Ⅲ)でちょっと大変だったのが、JavaScriptで動作する金額計算と、PHPでメールを自動的に送信するところ。
ここでのソース開示は、セキュリティ的になんだか無防備すぎるかと思うので、止めておきます。
残りは、(Ⅰ)ですが、
実は、PHPでWindowsアプリを作れるらしいので、それを次回から書き込んで行きます。
今日は、この辺で。 m(__)m
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から参照している画像ファイル、それと元になるタブ区切りデータをサーバにアップします。
「PPバンドかご サンプルリスト」 出ました。
ついでに、データファイルにもう2レコード追加してアップしなおしてみます。
出るかな・・・・
次回は、[申し込み]ボタンをここに追加して、それによって表示される申し込みフォームのページを考えます。
では。m(__)m
言い忘れてましたが、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から参照している画像ファイル、それと元になるタブ区切りデータをサーバにアップします。
「PPバンドかご サンプルリスト」 出ました。
ついでに、データファイルにもう2レコード追加してアップしなおしてみます。
出るかな・・・・
次回は、[申し込み]ボタンをここに追加して、それによって表示される申し込みフォームのページを考えます。
では。m(__)m
PHP-はじめの一歩(その5)スクリプトのコーディング
プログラミング [2010/11/19]
11/18「PHP-はじめの一歩(その4)スクリプトの設計」の続きです。
上記の記事で予告した(?)の機能のスクリプトを作成します。
●テストデータの準備
まずは、扱うデータとして、テスト用データをテキストエディタで作成します。
データの構成は、
-----------
・サンプル番号 :テキスト
・籠サンプルの写真 :画像ファイル名
・大きい写真 :画像ファイル名
・名前 :テキスト
・サイズH :数値(cm)
・サイズW :数値(cm)
・サイズD :数値(cm)
・残数 :数値
・作成数 :数値
・材料の提供可/不可 :1=可、0=不可
・不可の場合のコメント :テキスト
・サンプルの値段 :数値(円)
-----------
これをデータの並び(レコード)に置き換えて、入力すると以下のような感じ。
------------------------------
S-1 PPkagoS-1.jpg PPkagoS-1B.jpg 籠 20 15 25 1 4 1 色違い可 850
S-5 PPkagoS-5.jpg PPkagoS-5B.jpg 筒 25 25 10 0 1 0 1000
------------------------------
間が空いているところは、タブを入力して区切ります。
テスト用なので2行(レコード)もあれば十分でしょう。
ファイル名は、ppkago_sample_list.tsvとします。
これを 開発環境のフォルダである、「C:\Pleiades_e35\xampp\htdocs\sarumosunaru_cgi」にセーブします。
●PHPスクリプトを作る
まずは、Eclipseを起動します。(11/17「PHP-はじめの一歩(その3)サンプルをアップ」ご参照。)
先日作った「sample.php」が表示されました。
この間sample.phpのテストを実行した状態で閉じたので、「PHPデバック」の画面構成になってます。
編集中心の「PHP」という画面構成があるので、それに切り替えます。Eclipseの画面の右上くらいに切り替え用のアイコンボタンがあります。「PHPデバック」と書いてある隣です。
▲新規にPHPスクリプトファイルを開く
「ファイル」-「新規」-「PHPファイル」を選択して、
作成するファイル名を「ppecosamples.php」と付けます。
「完了」ボタンをクリックします。エディタとしてのウィンドウ中央に、<?php とだけ書かれた「ppecosamples.php」が表示されます。
さあ、それではコーディングに入りましょう。
▲作りこむ処理は
昨日も書いたのですが、おおまかな処理シーケンスとしては、以下です。
//****タブ区切りデータファイルをオープンして読み込み
//****1行づつ配列に変換して保持
//****HTMLとして出力
▲今あるHTMLのベースをコピペ
<?php下に「//」でこのプログラムの機能とかをコメントで入れて、?>で閉じます。
次に、今回作る「見た目」は、前のHTMLがあるので、それを一旦全部コピペします。
そこで<table>内をデータファイルを元に作成すればいいだけ。(のはず。)
▲一個一個処理を潰していきましょう。
・ファイルのオープンは、fopen()関数
・読み込みは、一行づつ読む fgets()関数
・一行の解析は、explode()関数
※タブ区切りのデータを簡単に配列にしてくれちゃいます。
こんな便利な機能があるとは。感動ものです。
・それと、mb_conbert_encoding()関数
後で気づいたのですが、Windowsなのでデータは単純にはshift-jisとしてデータが作成されます。
なので、それをUTF-8に変換する必要があります。
※shift-jisのままでもEclipseの設定をshift-jisに設定して、
htmlに<meta>でcharsetをshift-jisに設定してあげればいいだけ
なんですけど、今回はサーバ標準?のUTF-8を使います。
▲こんな感じに・・・・・
============
<body ・・・・>
:
:
:
<table border="1" width="95%">
<?php
$errmsg = "";
$item_ary = array();
//****タブ区切りデータファイルをオープン
$tsvfp = fopen("PPkago_sample_list.tsv", "r");
if ($tsvfp == false)
{
$errmsg = "データファイルのオープンに失敗しました。";
}
//****オープン成功
else
{
//****1行づつ読み込み
while($sline = fgets($tsvfp, 4096))
{
//****EOF/空行はスキップ
if (strlen($sline) < 9) continue;
//****日本語の部分をshift-jisからutf-8に変換
$sline = mb_convert_encoding($sline, 'UTF-8', 'SJIS-win');
//****配列として分解
$item_ary = explode("\t", rtrim($sline));
//****材料提供可否とコメントを文字メッセージに変換
if ($item_ary[9] == "1")
{
$fOKNG = "可";
$OKmsg = htmlspecialchars($item_ary[10]);
}
else
{
$fOKNG = "不可";
$OKmsg = "";
}
//****HTMLとして出力
?>
<tr>
<td width="50%" align="center" bgcolor="#ffffff">
<img src="ppeco/<?=htmlspecialchars($item_ary[1]);?>">
</td>
<td width="50%" align="left" bgcolor="#ffffff">
<font color=blue>番号:
<b><?=htmlspecialchars($item_ary[0]);?></b></font><br>
<?=htmlspecialchars($item_ary[3]);?><br>
<?php
if ($item_ary[2] != null)
{
?>
<a href="ppeco/<?=htmlspecialchars($item_ary[2]);?>">
大きい写真</a><br>
<?php
}
?>
<font color=blue>サイズ:おおよそ
H<?=htmlspecialchars($item_ary[4]);?>
×W<?=htmlspecialchars($item_ary[5]);?>
×D<?=htmlspecialchars($item_ary[6]);?>
cm</font><br>
<font color=red>サンプル個数:<b>
<?=htmlspecialchars($item_ary[7]);?>
/<?=htmlspecialchars($item_ary[8]);?>
</b></font><br>
<font color=red>材料提供:<b><?=$fOKNG;?></b></font><br>
<?=OKmsg;?><br>
<font color=green>手数料:
<b>¥<?=htmlspecialchars($item_ary[11]);?>
</b></font><br>
<!input type="SUBMIT" NAME="submit" VALUE="申し込み">
</td>
</tr>
<?php
}
fclose($tsvfp);
}
?>
</table>
:
:
:
</body>
============
ちょっと記事が長すぎなので、中身の解説は次回。
今日はこの辺で。m(__)m
上記の記事で予告した(?)の機能のスクリプトを作成します。
●テストデータの準備
まずは、扱うデータとして、テスト用データをテキストエディタで作成します。
データの構成は、
-----------
・サンプル番号 :テキスト
・籠サンプルの写真 :画像ファイル名
・大きい写真 :画像ファイル名
・名前 :テキスト
・サイズH :数値(cm)
・サイズW :数値(cm)
・サイズD :数値(cm)
・残数 :数値
・作成数 :数値
・材料の提供可/不可 :1=可、0=不可
・不可の場合のコメント :テキスト
・サンプルの値段 :数値(円)
-----------
これをデータの並び(レコード)に置き換えて、入力すると以下のような感じ。
------------------------------
S-1 PPkagoS-1.jpg PPkagoS-1B.jpg 籠 20 15 25 1 4 1 色違い可 850
S-5 PPkagoS-5.jpg PPkagoS-5B.jpg 筒 25 25 10 0 1 0 1000
------------------------------
間が空いているところは、タブを入力して区切ります。
テスト用なので2行(レコード)もあれば十分でしょう。
ファイル名は、ppkago_sample_list.tsvとします。
これを 開発環境のフォルダである、「C:\Pleiades_e35\xampp\htdocs\sarumosunaru_cgi」にセーブします。
●PHPスクリプトを作る
まずは、Eclipseを起動します。(11/17「PHP-はじめの一歩(その3)サンプルをアップ」ご参照。)
先日作った「sample.php」が表示されました。
この間sample.phpのテストを実行した状態で閉じたので、「PHPデバック」の画面構成になってます。
編集中心の「PHP」という画面構成があるので、それに切り替えます。Eclipseの画面の右上くらいに切り替え用のアイコンボタンがあります。「PHPデバック」と書いてある隣です。
▲新規にPHPスクリプトファイルを開く
「ファイル」-「新規」-「PHPファイル」を選択して、
作成するファイル名を「ppecosamples.php」と付けます。
「完了」ボタンをクリックします。エディタとしてのウィンドウ中央に、<?php とだけ書かれた「ppecosamples.php」が表示されます。
さあ、それではコーディングに入りましょう。
▲作りこむ処理は
昨日も書いたのですが、おおまかな処理シーケンスとしては、以下です。
//****タブ区切りデータファイルをオープンして読み込み
//****1行づつ配列に変換して保持
//****HTMLとして出力
▲今あるHTMLのベースをコピペ
<?php下に「//」でこのプログラムの機能とかをコメントで入れて、?>で閉じます。
次に、今回作る「見た目」は、前のHTMLがあるので、それを一旦全部コピペします。
そこで<table>内をデータファイルを元に作成すればいいだけ。(のはず。)
▲一個一個処理を潰していきましょう。
・ファイルのオープンは、fopen()関数
・読み込みは、一行づつ読む fgets()関数
・一行の解析は、explode()関数
※タブ区切りのデータを簡単に配列にしてくれちゃいます。
こんな便利な機能があるとは。感動ものです。
・それと、mb_conbert_encoding()関数
後で気づいたのですが、Windowsなのでデータは単純にはshift-jisとしてデータが作成されます。
なので、それをUTF-8に変換する必要があります。
※shift-jisのままでもEclipseの設定をshift-jisに設定して、
htmlに<meta>でcharsetをshift-jisに設定してあげればいいだけ
なんですけど、今回はサーバ標準?のUTF-8を使います。
▲こんな感じに・・・・・
============
<body ・・・・>
:
:
:
<table border="1" width="95%">
<?php
$errmsg = "";
$item_ary = array();
//****タブ区切りデータファイルをオープン
$tsvfp = fopen("PPkago_sample_list.tsv", "r");
if ($tsvfp == false)
{
$errmsg = "データファイルのオープンに失敗しました。";
}
//****オープン成功
else
{
//****1行づつ読み込み
while($sline = fgets($tsvfp, 4096))
{
//****EOF/空行はスキップ
if (strlen($sline) < 9) continue;
//****日本語の部分をshift-jisからutf-8に変換
$sline = mb_convert_encoding($sline, 'UTF-8', 'SJIS-win');
//****配列として分解
$item_ary = explode("\t", rtrim($sline));
//****材料提供可否とコメントを文字メッセージに変換
if ($item_ary[9] == "1")
{
$fOKNG = "可";
$OKmsg = htmlspecialchars($item_ary[10]);
}
else
{
$fOKNG = "不可";
$OKmsg = "";
}
//****HTMLとして出力
?>
<tr>
<td width="50%" align="center" bgcolor="#ffffff">
<img src="ppeco/<?=htmlspecialchars($item_ary[1]);?>">
</td>
<td width="50%" align="left" bgcolor="#ffffff">
<font color=blue>番号:
<b><?=htmlspecialchars($item_ary[0]);?></b></font><br>
<?=htmlspecialchars($item_ary[3]);?><br>
<?php
if ($item_ary[2] != null)
{
?>
<a href="ppeco/<?=htmlspecialchars($item_ary[2]);?>">
大きい写真</a><br>
<?php
}
?>
<font color=blue>サイズ:おおよそ
H<?=htmlspecialchars($item_ary[4]);?>
×W<?=htmlspecialchars($item_ary[5]);?>
×D<?=htmlspecialchars($item_ary[6]);?>
cm</font><br>
<font color=red>サンプル個数:<b>
<?=htmlspecialchars($item_ary[7]);?>
/<?=htmlspecialchars($item_ary[8]);?>
</b></font><br>
<font color=red>材料提供:<b><?=$fOKNG;?></b></font><br>
<?=OKmsg;?><br>
<font color=green>手数料:
<b>¥<?=htmlspecialchars($item_ary[11]);?>
</b></font><br>
<!input type="SUBMIT" NAME="submit" VALUE="申し込み">
</td>
</tr>
<?php
}
fclose($tsvfp);
}
?>
</table>
:
:
:
</body>
============
ちょっと記事が長すぎなので、中身の解説は次回。
今日はこの辺で。m(__)m
PHP-はじめの一歩(その4)スクリプトの設計
プログラミング [2010/11/18]
11/17「PHP-はじめの一歩(その3)サンプルをアップ」の続きです。
さて、昨日までで、自分のPCでPHPスクリプトを開発(作ってテスト)する環境の構築と、実際のサーバへのアップの段取りができたので、いよいよ目的のものの開発に入ります。
そもそも作りたいのは、
「PPバンドかご サンプルリスト」のページを簡単に更新できる仕掛けと、
「申し込み」を行っていただくためのフォーム。
従来のここ「http://nga78n.web.fc2.com/omake/ppecofrm.html」です。
上記のページは今までは、手で毎回HTMLを更新していました。
また、「申し込み」によって表示されるはずの、申し込みフォームは、infoseekのタダサービス終了とともに無くなってしまいました。
現状の全体構想としては、
(Ⅰ)自分のPC上で、タブ区切り形式のデータを作る(編集更新する)ためのプログラム
(Ⅱ)上記のプログラムで作成したタブ区切りデータを読み込んで、一覧ページを表示するためのPHPスクリプト
(Ⅲ)一覧ページ上の「申し込み」ボタンが押されたときに、「申し込み」ページを表示し、必要事項を入力して「送信」とやったら、さるにその内容の連絡を送るPHPスクリプト
の三つの仕掛けを考えています。
最初は(Ⅱ)から着手します。
一覧データから読み取って「サンプルリスト」ページを表示するスクリプトを作るということです。
通常、というか多くは、こういうリスト形式のものは、DBを利用することが多いのですが、
DB(MySQLとか)利用を許可しているタダサイトは少ないですし、
もしDB利用型で作って、この間のように、スペース提供者が急に「ヤーメタ」ってことになると、路頭に迷ってしまうことになるので、いわゆるDBは利用しないで作ります。
それに、何万件とかのデータを処理するわけではないので。
なので、ページに表示する元データは、Excelやテキストエディタでも編集(データの追加/更新)が可能な、タブ区切り形式のデータを使います。
---------------------------
ここで、PHPの特徴をさらーっと説明すると。
▲<?php ・・・・ ?> で囲まれたところがスクリプトとして、サーバ側で処理される部分になる
▲逆に囲まれていない部分は、HTMLデータとしてクライアント側に送られるデータ
▲PHPは基本的にC言語に似ている。
(ちなみに、さるがプログラム言語として知っているのはC言語のみ。)
・処理行の終わりは「;」で終わる。
・コメントは「/*・・・*/」「//・・・」
・if-else if-else、while、for、switchなどの書き方は、C言語と一緒。
・ifとかwhileの処理ブロックは「{・・・}」で囲む。
・標準関数的なものもかなりC言語的。数はC言語の比ではない。(と思う。)
▲ちょっと違うかなーというところは、
・変数の先頭には、「$」が付く。
・付かないのは関数名、defineで定義した定数。
・変数の型の宣言は明確ではない。
・配列は、「= array(・・・);」で宣言する。
・オブジェクトは、「= new xxxx();」で確保?する。(C++はnewでしたっけ?)
・メモリ領域の明快な確保/解放はあまり意識しなくてもいい?
普通の変数は「= null;」、配列は「unset(配列名);」で使用終了する。
特にやらなくても、処理が終われば、勝手に解放されるみたい。
・関数の宣言は 「function xxx()」
・defineはプリコンパイルではなく実行時に解釈される。(スクリプトなんで。)
また、C言語とはちょっと違う。
・includeも同じく実行時。なので、include自身もif文で飛ばしたりもできる。
「結構違うじゃん」と思うかもしれませんが、そんなに大したことはない。
コンパイル型の言語に比べれば、かなりいい加減に作ってもそれなりに動く感じ。
楽です。
でも、あくまでも、さるの単なる感想なので、正しい知識は、
「ソフィのPHP入門」等で学習されることをおススメします。
---------------------------
さて、話を元に戻して、(Ⅱ)の設計です。
まずは、表示したいデータの項目を列挙します。
・籠サンプルの写真
・サンプル番号
・コメント
・大きい写真
・サイズ(H、W、D)
・残数
・作成数
・材料の提供可/不可
・不可の場合のコメント
・サンプルの値段
このくらいでしょうか。
この列挙データをファイルとしてスクリプトと同じフォルダに持っていることが(Ⅱ)のスクリプトの動作の前提となります。
それでもって、(Ⅱ)の処理をもう少し具体的な処理区分に分けると以下のようになります。
//****タブ区切りデータファイルをオープンして読み込み
//****1行づつ配列に変換して保持
//****HTMLとして出力
わーシンプル。
では実際にコーディング始めます。
今日の記事は、この辺で。 m(__)m
さて、昨日までで、自分のPCでPHPスクリプトを開発(作ってテスト)する環境の構築と、実際のサーバへのアップの段取りができたので、いよいよ目的のものの開発に入ります。
そもそも作りたいのは、
「PPバンドかご サンプルリスト」のページを簡単に更新できる仕掛けと、
「申し込み」を行っていただくためのフォーム。
従来のここ「http://nga78n.web.fc2.com/omake/ppecofrm.html」です。
上記のページは今までは、手で毎回HTMLを更新していました。
また、「申し込み」によって表示されるはずの、申し込みフォームは、infoseekのタダサービス終了とともに無くなってしまいました。
現状の全体構想としては、
(Ⅰ)自分のPC上で、タブ区切り形式のデータを作る(編集更新する)ためのプログラム
(Ⅱ)上記のプログラムで作成したタブ区切りデータを読み込んで、一覧ページを表示するためのPHPスクリプト
(Ⅲ)一覧ページ上の「申し込み」ボタンが押されたときに、「申し込み」ページを表示し、必要事項を入力して「送信」とやったら、さるにその内容の連絡を送るPHPスクリプト
の三つの仕掛けを考えています。
最初は(Ⅱ)から着手します。
一覧データから読み取って「サンプルリスト」ページを表示するスクリプトを作るということです。
通常、というか多くは、こういうリスト形式のものは、DBを利用することが多いのですが、
DB(MySQLとか)利用を許可しているタダサイトは少ないですし、
もしDB利用型で作って、この間のように、スペース提供者が急に「ヤーメタ」ってことになると、路頭に迷ってしまうことになるので、いわゆるDBは利用しないで作ります。
それに、何万件とかのデータを処理するわけではないので。
なので、ページに表示する元データは、Excelやテキストエディタでも編集(データの追加/更新)が可能な、タブ区切り形式のデータを使います。
---------------------------
ここで、PHPの特徴をさらーっと説明すると。
▲<?php ・・・・ ?> で囲まれたところがスクリプトとして、サーバ側で処理される部分になる
▲逆に囲まれていない部分は、HTMLデータとしてクライアント側に送られるデータ
▲PHPは基本的にC言語に似ている。
(ちなみに、さるがプログラム言語として知っているのはC言語のみ。)
・処理行の終わりは「;」で終わる。
・コメントは「/*・・・*/」「//・・・」
・if-else if-else、while、for、switchなどの書き方は、C言語と一緒。
・ifとかwhileの処理ブロックは「{・・・}」で囲む。
・標準関数的なものもかなりC言語的。数はC言語の比ではない。(と思う。)
▲ちょっと違うかなーというところは、
・変数の先頭には、「$」が付く。
・付かないのは関数名、defineで定義した定数。
・変数の型の宣言は明確ではない。
・配列は、「= array(・・・);」で宣言する。
・オブジェクトは、「= new xxxx();」で確保?する。(C++はnewでしたっけ?)
・メモリ領域の明快な確保/解放はあまり意識しなくてもいい?
普通の変数は「= null;」、配列は「unset(配列名);」で使用終了する。
特にやらなくても、処理が終われば、勝手に解放されるみたい。
・関数の宣言は 「function xxx()」
・defineはプリコンパイルではなく実行時に解釈される。(スクリプトなんで。)
また、C言語とはちょっと違う。
・includeも同じく実行時。なので、include自身もif文で飛ばしたりもできる。
「結構違うじゃん」と思うかもしれませんが、そんなに大したことはない。
コンパイル型の言語に比べれば、かなりいい加減に作ってもそれなりに動く感じ。
楽です。
でも、あくまでも、さるの単なる感想なので、正しい知識は、
「ソフィのPHP入門」等で学習されることをおススメします。
---------------------------
さて、話を元に戻して、(Ⅱ)の設計です。
まずは、表示したいデータの項目を列挙します。
・籠サンプルの写真
・サンプル番号
・コメント
・大きい写真
・サイズ(H、W、D)
・残数
・作成数
・材料の提供可/不可
・不可の場合のコメント
・サンプルの値段
このくらいでしょうか。
この列挙データをファイルとしてスクリプトと同じフォルダに持っていることが(Ⅱ)のスクリプトの動作の前提となります。
それでもって、(Ⅱ)の処理をもう少し具体的な処理区分に分けると以下のようになります。
//****タブ区切りデータファイルをオープンして読み込み
//****1行づつ配列に変換して保持
//****HTMLとして出力
わーシンプル。
では実際にコーディング始めます。
今日の記事は、この辺で。 m(__)m
PHP-はじめの一歩(その3)サンプルをアップ
プログラミング [2010/11/17]
11/17「PHP-はじめの一歩(その2)Eclipseインストール」の続きです。
昨日作ったPHPスクリプトを 利用申請したサーバにアップして動くかどうか試してみます。
前準備として、昨日インストールしたEclipse/Pleiadesの「C:\Pleiades_e35\xampp\xammp_control.exe」と
「C:\Pleiades_e35\eclipse\eclipse.exe」のショートカットをディスクトップに作成して起動しやすくします。
1)作成したショートカットでxammp_controlを起動して、ApacheをStartさせます。
2)同じく作成したショートカットでeclipseを起動します。
昨日作成したsample.phpの中身が表示されます。
そのスクリプトは、昨日のままの状態では、少しチープすぎるので、もうちょっとだけ手を加えます。
最低限、charsetの指定はしないと文字化けするんで、以下のようなコードにしました。
--------------------
<?php
$honjitu = date("Ymd His");
$message = "はじめてのPHPスクリプトです。";
?>
<html>
<head>
<meta HTTP-EQUIV="Content-Type" content="text/html; charset=UTF-8">
<title>さるもすなる</title>
</head>
<body BACKGROUND="image/mainback.gif">
<hr>
<h1 align="center">
<img src="image/rolling1.gif" align="middle">
<font COLOR="#004466"> さるもすなるCGIテスト中 </font>
<img src="image/rolling2.gif" align="middle">
</h1>
<hr>
<?=$message;?>-<?=$honjitu;?>
<br><br>
<?php include_once "js_hotwavespace.php"; ?>
</body>
</html>
--------------------
途中のinlude_onceは、利用させてもらうサーバの利用規定で、入れなければいけないJavaScriptのコードです。
あと、何個か画像の参照があるので、それをワークディレクトリである「sarumosunaru_cgi」の下に準備します。
実際のパスは、「C:\Pleiades_e35\xampp\htdocs\sarumosunaru_cgi」の下になります。
そこにimageフォルダを作成して、mainback.gif、rolling1.gif、rolling2.gifをセットします。
[F11]と[F7]で動作確認して見ます。
動きました。
3)できたスクリプトをアップしましょう。
ffftpを使います。頂いたメールの情報でFTPのセットアップを行います。
・・・・・・つながったみたい。
ルートに「/cgi-bin」というフォルダが既に用意されていました。
たぶんこの下にphpスクリプトをセットしないと動かないかな?
でも、試しに、ルートにアップしてみます。
sarumosunaru_cgi以下の、sample.php、js_hotwavespace.phpをアップして、
imageフォルダをサーバ上に作成し、.gif三つをアップしました。
ブラウザのアドレスバーに以下のURLを打ち込んで見ます。
「http://sarumosunaru.starfree.jp/sample.php」
動きました。
割とすんなり行きました。
おかげで、日を越さない内にこの記事アップできそう。
今日は、この辺で。m(__)m
昨日作ったPHPスクリプトを 利用申請したサーバにアップして動くかどうか試してみます。
前準備として、昨日インストールしたEclipse/Pleiadesの「C:\Pleiades_e35\xampp\xammp_control.exe」と
「C:\Pleiades_e35\eclipse\eclipse.exe」のショートカットをディスクトップに作成して起動しやすくします。
1)作成したショートカットでxammp_controlを起動して、ApacheをStartさせます。
2)同じく作成したショートカットでeclipseを起動します。
昨日作成したsample.phpの中身が表示されます。
そのスクリプトは、昨日のままの状態では、少しチープすぎるので、もうちょっとだけ手を加えます。
最低限、charsetの指定はしないと文字化けするんで、以下のようなコードにしました。
--------------------
<?php
$honjitu = date("Ymd His");
$message = "はじめてのPHPスクリプトです。";
?>
<html>
<head>
<meta HTTP-EQUIV="Content-Type" content="text/html; charset=UTF-8">
<title>さるもすなる</title>
</head>
<body BACKGROUND="image/mainback.gif">
<hr>
<h1 align="center">
<img src="image/rolling1.gif" align="middle">
<font COLOR="#004466"> さるもすなるCGIテスト中 </font>
<img src="image/rolling2.gif" align="middle">
</h1>
<hr>
<?=$message;?>-<?=$honjitu;?>
<br><br>
<?php include_once "js_hotwavespace.php"; ?>
</body>
</html>
--------------------
途中のinlude_onceは、利用させてもらうサーバの利用規定で、入れなければいけないJavaScriptのコードです。
あと、何個か画像の参照があるので、それをワークディレクトリである「sarumosunaru_cgi」の下に準備します。
実際のパスは、「C:\Pleiades_e35\xampp\htdocs\sarumosunaru_cgi」の下になります。
そこにimageフォルダを作成して、mainback.gif、rolling1.gif、rolling2.gifをセットします。
[F11]と[F7]で動作確認して見ます。
動きました。
3)できたスクリプトをアップしましょう。
ffftpを使います。頂いたメールの情報でFTPのセットアップを行います。
・・・・・・つながったみたい。
ルートに「/cgi-bin」というフォルダが既に用意されていました。
たぶんこの下にphpスクリプトをセットしないと動かないかな?
でも、試しに、ルートにアップしてみます。
sarumosunaru_cgi以下の、sample.php、js_hotwavespace.phpをアップして、
imageフォルダをサーバ上に作成し、.gif三つをアップしました。
ブラウザのアドレスバーに以下のURLを打ち込んで見ます。
「http://sarumosunaru.starfree.jp/sample.php」
動きました。
割とすんなり行きました。
おかげで、日を越さない内にこの記事アップできそう。
今日は、この辺で。m(__)m
PHP-はじめの一歩(その2)Eclipseインストール
プログラミング [2010/11/17]
11/16「PHP-はじめの一歩」の続きです。
ダウンロードしたPleiades(pleiades-e3.5-php-jre_20100226.zip)は、Windows上でPHP開発環境を構築するためのプログラムセットで、以下のものが含まれるらしい。
+ Apache 2.2.11
+ MySQL 5.1.33 (Community Server)
+ PHP 5.2.9 + PEAR (PHP 4 wird nicht mehr unterst・zt)
+ XAMPP Control Version 2.5 from www.nat32.com
+ XAMPP CLI Bundle 1.3 from Carsten Wiedmann
+ XAMPP Security 1.0
+ SQLite 2.8.15
+ OpenSSL 0.9.8i
+ phpMyAdmin 3.1.3.1
+ ADOdb 5.06a
+ Mercury Mail Transport System v4.62
+ FileZilla FTP Server 0.9.31
+ Webalizer 2.01-10
+ Zend Optimizer 3.3.0
+ eAccelerator 0.9.5.3 for PHP 5.2.9 (auskommentiert php.ini)
etc
肝心のEclipseという名前が出てきてないので、ちょっと不安。
しかも、そもそもJREってなんだ?(Java Runtime EnvironmentでJavaで作られたプログラムを動作させる環境らしい。でも、PHPを開発する環境にどう関連付くのか全く理解できていない。)
前提とするOS環境は、以下だそうだ。
+ 64 MB以上のRAM
+ 250 MB以上のディスクの空き容量
+ Windows NT, 2000, 2003, XP (EMPFOHLEN?), VISTA
+ 32 Bit Systeme (not 64bit PC/SO?)
残念ながら、今使っているWindows7は出てこない。またまた不安。
まずは、インストール方法を解説してくれているサイトを参考に以下の手順でインストールを実行して見ます。
1)「C:\Pleiades_e35」というフォルダを作って、pleiades-e3.5-php-jre_20100226.zipの中身を全てコピー(解凍)。
2)DOSプロンプトを開いて、「C:\Pleiades_e35\xammp\setup_xammp.bat」を実行。
なんだか、成功したような・・・・・
3)今度は、エクスプローラから「C:\Pleiades_e35\xammp\xamp_controler.exe」を実行。
Apacheと書いてある隣の「Start」と書いているボタン押してみた。「Running」と表意されたので、どうも動いたみたい。動作させる際になんかWindowsのセキュリティ関連のメッセージが出力されたが、「ホームネットワーク」を選択して、許可した。
他に、MySQLを起動させるボタンもある。まずは、よく分からないので、触らないでおく。
4)IEを起動して、「http://localhost/」とアドレスを打ち込んでみた。
「XAMPP」とブラウザに大きく出ました。たぶんここまでは成功。
5)そのままでは、外からのアクセスとかが危ないらしいので、セキュリティ設定をする必要があるそうだ。
「http://localhost/」の画面の「日本語」と書いてあるリンクをクリック。
→ようこそ画面が出た。
→左側のメニューから「ステータス」を選択する。
→ステータス画面が出た。以下の内容。
----------------
MySQL データベース 開始
PHP 開始
HTTPS (SSL) 開始
Common Gateway Interface (CGI) 開始
Server Side Includes (SSI) 開始
SMTP Service 停止
FTP Service 停止
----------------
あれ?MySQLはstartさせなかったのにと思って、前のxammp_controlのウィンドウをみたら、MySQLが「Runinng」になっていた。・・・いつの間に?
→左側のメニューから「セキュリティ」を選択。
かなり、危ない状況であることが、別ウィンドウで表示された。
→その下に「http://localhost/security/xamppsecurity.php 」とリンクされているところをクリック
MySQLのrootのパスワードとXAMMPのユーザ/パスワード登録を実行する。
MySQLはxampp_controlでStop-Startを行った後、ブラウザの画面の左側のメニューから「セキュリティ」を選択すると前の画面がでて、「要注意」となっている部分が減った。
これで、httpdサーバ(ローカルwebサーバ)の起動は成功したものと思われます。
6)Eclipse(C:\Pleiaes_e35\eclipse\eclipse.exe)を実行して見る
途中、ワークディレクトリをどうするか質問されたが、デフォルトのままとした。
また、Windowsのセキュリティメッセージが表示されたが、再度「ホームネットワーク」を許可とした。
起動した。
7)Eclipseの「ファイル」-「新規」-「PHPプロジェクト」を選択して、プロジェクトを作成する。
プロジェクト名「sarumosunaru_cgi」とした。
→次に、「ファイル」-「新規」-「PHPファイル」を選択してPHPスクリプトをエディタできるようにする。
PHPスクリプト名は「sample.php」とした。
→ソースは簡単に以下の内容を打ち込んだ。
--------------
<?php
$honjitu = date("Ymd His");
$message = "はじめてのPHPスクリプト";
?>
<html>
<body>
<?=$message;?>-<?=$honjitu;?>
</body>
</html>
--------------
→[F11]キーでデバック開始、[F7]キーで続行とやってみた。
Eclipseのデバッカ内のブラウザに何か出ました。
日本語コードを何にするかmetaタグで指定していないので文字が化けしたが、何かはでた。
→試しに、IEでアドレスに「http://localhost/sarumosunaru_cgi/sample.php」と打ったらやっぱり出ました。
ブラウザのエンコードをUTF-8に変更したら、「はじめてのPHPスクリプト-20101117・・・・」と出ました。
成功です。
PHPの言語仕様やサンプルに関しては、http://nyx.pu1.net/ 「ソフィのPHP入門」がさるのバイブルになりそうです。
一段落したので、今日はこの辺で。 m(__)m
ダウンロードしたPleiades(pleiades-e3.5-php-jre_20100226.zip)は、Windows上でPHP開発環境を構築するためのプログラムセットで、以下のものが含まれるらしい。
+ Apache 2.2.11
+ MySQL 5.1.33 (Community Server)
+ PHP 5.2.9 + PEAR (PHP 4 wird nicht mehr unterst・zt)
+ XAMPP Control Version 2.5 from www.nat32.com
+ XAMPP CLI Bundle 1.3 from Carsten Wiedmann
+ XAMPP Security 1.0
+ SQLite 2.8.15
+ OpenSSL 0.9.8i
+ phpMyAdmin 3.1.3.1
+ ADOdb 5.06a
+ Mercury Mail Transport System v4.62
+ FileZilla FTP Server 0.9.31
+ Webalizer 2.01-10
+ Zend Optimizer 3.3.0
+ eAccelerator 0.9.5.3 for PHP 5.2.9 (auskommentiert php.ini)
etc
肝心のEclipseという名前が出てきてないので、ちょっと不安。
しかも、そもそもJREってなんだ?(Java Runtime EnvironmentでJavaで作られたプログラムを動作させる環境らしい。でも、PHPを開発する環境にどう関連付くのか全く理解できていない。)
前提とするOS環境は、以下だそうだ。
+ 64 MB以上のRAM
+ 250 MB以上のディスクの空き容量
+ Windows NT, 2000, 2003, XP (EMPFOHLEN?), VISTA
+ 32 Bit Systeme (not 64bit PC/SO?)
残念ながら、今使っているWindows7は出てこない。またまた不安。
まずは、インストール方法を解説してくれているサイトを参考に以下の手順でインストールを実行して見ます。
1)「C:\Pleiades_e35」というフォルダを作って、pleiades-e3.5-php-jre_20100226.zipの中身を全てコピー(解凍)。
2)DOSプロンプトを開いて、「C:\Pleiades_e35\xammp\setup_xammp.bat」を実行。
なんだか、成功したような・・・・・
3)今度は、エクスプローラから「C:\Pleiades_e35\xammp\xamp_controler.exe」を実行。
Apacheと書いてある隣の「Start」と書いているボタン押してみた。「Running」と表意されたので、どうも動いたみたい。動作させる際になんかWindowsのセキュリティ関連のメッセージが出力されたが、「ホームネットワーク」を選択して、許可した。
他に、MySQLを起動させるボタンもある。まずは、よく分からないので、触らないでおく。
4)IEを起動して、「http://localhost/」とアドレスを打ち込んでみた。
「XAMPP」とブラウザに大きく出ました。たぶんここまでは成功。
5)そのままでは、外からのアクセスとかが危ないらしいので、セキュリティ設定をする必要があるそうだ。
「http://localhost/」の画面の「日本語」と書いてあるリンクをクリック。
→ようこそ画面が出た。
→左側のメニューから「ステータス」を選択する。
→ステータス画面が出た。以下の内容。
----------------
MySQL データベース 開始
PHP 開始
HTTPS (SSL) 開始
Common Gateway Interface (CGI) 開始
Server Side Includes (SSI) 開始
SMTP Service 停止
FTP Service 停止
----------------
あれ?MySQLはstartさせなかったのにと思って、前のxammp_controlのウィンドウをみたら、MySQLが「Runinng」になっていた。・・・いつの間に?
→左側のメニューから「セキュリティ」を選択。
かなり、危ない状況であることが、別ウィンドウで表示された。
→その下に「http://localhost/security/xamppsecurity.php 」とリンクされているところをクリック
MySQLのrootのパスワードとXAMMPのユーザ/パスワード登録を実行する。
MySQLはxampp_controlでStop-Startを行った後、ブラウザの画面の左側のメニューから「セキュリティ」を選択すると前の画面がでて、「要注意」となっている部分が減った。
これで、httpdサーバ(ローカルwebサーバ)の起動は成功したものと思われます。
6)Eclipse(C:\Pleiaes_e35\eclipse\eclipse.exe)を実行して見る
途中、ワークディレクトリをどうするか質問されたが、デフォルトのままとした。
また、Windowsのセキュリティメッセージが表示されたが、再度「ホームネットワーク」を許可とした。
起動した。
7)Eclipseの「ファイル」-「新規」-「PHPプロジェクト」を選択して、プロジェクトを作成する。
プロジェクト名「sarumosunaru_cgi」とした。
→次に、「ファイル」-「新規」-「PHPファイル」を選択してPHPスクリプトをエディタできるようにする。
PHPスクリプト名は「sample.php」とした。
→ソースは簡単に以下の内容を打ち込んだ。
--------------
<?php
$honjitu = date("Ymd His");
$message = "はじめてのPHPスクリプト";
?>
<html>
<body>
<?=$message;?>-<?=$honjitu;?>
</body>
</html>
--------------
→[F11]キーでデバック開始、[F7]キーで続行とやってみた。
Eclipseのデバッカ内のブラウザに何か出ました。
日本語コードを何にするかmetaタグで指定していないので文字が化けしたが、何かはでた。
→試しに、IEでアドレスに「http://localhost/sarumosunaru_cgi/sample.php」と打ったらやっぱり出ました。
ブラウザのエンコードをUTF-8に変更したら、「はじめてのPHPスクリプト-20101117・・・・」と出ました。
成功です。
PHPの言語仕様やサンプルに関しては、http://nyx.pu1.net/ 「ソフィのPHP入門」がさるのバイブルになりそうです。
一段落したので、今日はこの辺で。 m(__)m
PHP-はじめの一歩
プログラミング [2010/11/16]
サンプル籠だとか、マニュアルだとかを注文してもらう用のサイト(CGI)を作ろうかと思っています。
他のネタも少なくなるころだし、どうせなので、ここで経過を記録して行こうかと思います。
まずは、「なぜCGI(Common Gateway Interface:ブラウザからサーバに対して、何かプログラムを動作させるように指示して、その結果をレスポンスしてもらう仕掛け。レスポンスは、当然ブラウザが受け取って意味をなすHTMLの形式で出力してもらうことが多い。)か?」ということですが。
だいたい、さるのHPは写真とそれへのコメントがセットで、それ以上の脚色を必要としていません。言わばさるレベルな為に何の見た目の工夫もありません。
でも、量が多くなってくると、その整理は、それなりに大変です。
普通、形式がある程度一定で、書かれている内容の構成が一緒なら、それをデータベース化してシンプルに保存しておいて、「見る」ときに、定型化した見た目のフォーマットにはめ込んで見せるのが一般的です。
今までは、HTML形式のタグテキストをエディタで毎回修正していたのですが、「もう少し簡単に中身の追加や更新ができるようにしたいなー」というのがその主な理由です。
でも、この間HPを全体引っ越したおかげで、以前準備していた仕掛けが使えなくなったので、俄然「CGI化が必要になってしまった」というのが本当のところです。
おー。前置きが長い。
さて、「はじめの一歩」なので何からはじめるか。
1)CGIを作る言語は色々ありますが、最近はPHPが多いみたいなのでそれを使います。
2)「PHPを使う」と決めたら、次にそれを「動作させてもいいよ」と言ってくれる、ホームページサービスを探します。
さるの場合、お金を掛けないことを目標にしているので、当然「無料」を探しました。それなりにありました。
で、申し込みました。二日前に申し込んで、今日、ユーザ登録ができたとの回答がありました。
3)PHPでプログラム(スクリプト)を作って、テストする環境を準備する必要があります。
最悪、「無し」でエディタさえあれば、できないこともありませんが、さすがに、本チャンのサーバ使ってはデバックテストは効率が悪いので、できるだけ開発環境を準備した方がいいでしょう。
Eclipseという統合開発環境(IDE)があるそうで、「Eclips 3.5 Galileo Pleades All in On」というのが「全部入り」みたいなので、さるは、それをダンロードしました。(http://mergedoc.sourceforge.jp/ ご参考)
この続きは、また次回(できれば明日)。m(__)m
他のネタも少なくなるころだし、どうせなので、ここで経過を記録して行こうかと思います。
まずは、「なぜCGI(Common Gateway Interface:ブラウザからサーバに対して、何かプログラムを動作させるように指示して、その結果をレスポンスしてもらう仕掛け。レスポンスは、当然ブラウザが受け取って意味をなすHTMLの形式で出力してもらうことが多い。)か?」ということですが。
だいたい、さるのHPは写真とそれへのコメントがセットで、それ以上の脚色を必要としていません。言わばさるレベルな為に何の見た目の工夫もありません。
でも、量が多くなってくると、その整理は、それなりに大変です。
普通、形式がある程度一定で、書かれている内容の構成が一緒なら、それをデータベース化してシンプルに保存しておいて、「見る」ときに、定型化した見た目のフォーマットにはめ込んで見せるのが一般的です。
今までは、HTML形式のタグテキストをエディタで毎回修正していたのですが、「もう少し簡単に中身の追加や更新ができるようにしたいなー」というのがその主な理由です。
でも、この間HPを全体引っ越したおかげで、以前準備していた仕掛けが使えなくなったので、俄然「CGI化が必要になってしまった」というのが本当のところです。
おー。前置きが長い。
さて、「はじめの一歩」なので何からはじめるか。
1)CGIを作る言語は色々ありますが、最近はPHPが多いみたいなのでそれを使います。
2)「PHPを使う」と決めたら、次にそれを「動作させてもいいよ」と言ってくれる、ホームページサービスを探します。
さるの場合、お金を掛けないことを目標にしているので、当然「無料」を探しました。それなりにありました。
で、申し込みました。二日前に申し込んで、今日、ユーザ登録ができたとの回答がありました。
3)PHPでプログラム(スクリプト)を作って、テストする環境を準備する必要があります。
最悪、「無し」でエディタさえあれば、できないこともありませんが、さすがに、本チャンのサーバ使ってはデバックテストは効率が悪いので、できるだけ開発環境を準備した方がいいでしょう。
Eclipseという統合開発環境(IDE)があるそうで、「Eclips 3.5 Galileo Pleades All in On」というのが「全部入り」みたいなので、さるは、それをダンロードしました。(http://mergedoc.sourceforge.jp/ ご参考)
この続きは、また次回(できれば明日)。m(__)m
ムキタケの汁物
山菜・きのこ採り [2010/11/16]
この土日は、冬眠準備(冬支度)やらなんやらで、結局、山には行けず。期せずして、先週のムキタケが今年最後のキノコ採りだったかも。
そんなことを考えて、ちょっと寂しい思いのさるです。
(冬が嫌いなので。)
さて、昨日めあたらしくもないキノコ料理を少しご紹介しましたが、
ブログへの書き込みと同時進行で作った「ムキタケの汁物」を懲りもせず紹介いたします。
これです。

既に湯がいたムキタケを、お湯に入れて、醤油、みりん、お酒、ダシの素少々。
さらに、鶏肉とセリ(主に根っこの方:さるは根っこの方が好きだから)を入れて一煮しました。
Goodです。
というか、単なる具の種類が少ない鶏鍋って感じだけど、それはそれ。うまいはうまい。
なにせ、ムキタケは、味に癖みたいのが無いので、ちょっと料理として特徴をだすのは難しいかも。
食感がツルっとしているところが、最大の特徴なので、
さるの予想でしかありませんが、ワンタンスープのようなものの、ワンタンの代わりが合うのではないかと。
まだ、ちょっとあるけど、湯がいてから1週間たってるので、早く食べないと。
そんなことを考えて、ちょっと寂しい思いのさるです。
(冬が嫌いなので。)
さて、昨日めあたらしくもないキノコ料理を少しご紹介しましたが、
ブログへの書き込みと同時進行で作った「ムキタケの汁物」を懲りもせず紹介いたします。
これです。

既に湯がいたムキタケを、お湯に入れて、醤油、みりん、お酒、ダシの素少々。
さらに、鶏肉とセリ(主に根っこの方:さるは根っこの方が好きだから)を入れて一煮しました。
Goodです。
というか、単なる具の種類が少ない鶏鍋って感じだけど、それはそれ。うまいはうまい。
なにせ、ムキタケは、味に癖みたいのが無いので、ちょっと料理として特徴をだすのは難しいかも。
食感がツルっとしているところが、最大の特徴なので、
さるの予想でしかありませんが、ワンタンスープのようなものの、ワンタンの代わりが合うのではないかと。
まだ、ちょっとあるけど、湯がいてから1週間たってるので、早く食べないと。
「PPバンドかごの作り方 初級編2」完成
PPバンド籠 [2010/11/14]
昨年の春に「PPバンドかごの作り方 初級編」というのを出して、maglogのサイトで販売を始めてました。
たいして売れてはおりませんが・・・・^^;)
でもって、続編を一年くらい前から、「作成中」でしたが、やっとこさ完成させました。

「初級編」の内容と前半の導入部分は、ほぼいっしょで、
後半の籠は、ここ数年で作った籠で、HPに作り方を詳しく書かなかったものを載せました。
目次的には、
1.PPバンドってなんだろう 3
2.使う道具 4
3.編み方の名前 5
3.1 格子編み 5
3.2 網代編み 5
3.3 石畳編み 6
3.4 花結び編み 6
3.5 六つ目編み 7
3.6 三つ編み 7
4.籠の編み方 8
4.1 テッシュケースの作り方 8
4.2 飾り部品(玉と花)の作り方 14
4.3 格子編み手提げ籠の作り方 18
4.4 差し六つ目編みの小籠の作り方 25
4.5 石畳編みのショルダー籠の作り方 34
4.6 花結び編み手提げ籠の作り方 43
4.7 模様になる網代編み籠の作り方 50
です。
7mm幅のバンドを使うものが多いので、材料的に少しハードルがあるなーと思っています。
「初級編」はmaglogからの購入が可能ですが、今回はやめて、
直接、注文していただく方式にしたいと思っています。
別途、新しい注文サイトができた場合には、ご案内します。
なにせ、HPまるっと引っ越したばかりなもので、仕掛けがまだ出来上がってません。
お急ぎの場合は、ここにメールいただければ、対応いたします。
反応に、少し時間がかかるかもしれませんが、
その辺はご容赦の程。m(__)m
「初級編」の一部分をサンプルとしてここにダウンロードできるリンクがあります。
こんな感じというのが、お分かりいただけるかと。PDF形式です。
たいして売れてはおりませんが・・・・^^;)
でもって、続編を一年くらい前から、「作成中」でしたが、やっとこさ完成させました。

「初級編」の内容と前半の導入部分は、ほぼいっしょで、
後半の籠は、ここ数年で作った籠で、HPに作り方を詳しく書かなかったものを載せました。
目次的には、
1.PPバンドってなんだろう 3
2.使う道具 4
3.編み方の名前 5
3.1 格子編み 5
3.2 網代編み 5
3.3 石畳編み 6
3.4 花結び編み 6
3.5 六つ目編み 7
3.6 三つ編み 7
4.籠の編み方 8
4.1 テッシュケースの作り方 8
4.2 飾り部品(玉と花)の作り方 14
4.3 格子編み手提げ籠の作り方 18
4.4 差し六つ目編みの小籠の作り方 25
4.5 石畳編みのショルダー籠の作り方 34
4.6 花結び編み手提げ籠の作り方 43
4.7 模様になる網代編み籠の作り方 50
です。
7mm幅のバンドを使うものが多いので、材料的に少しハードルがあるなーと思っています。
「初級編」はmaglogからの購入が可能ですが、今回はやめて、
直接、注文していただく方式にしたいと思っています。
別途、新しい注文サイトができた場合には、ご案内します。
なにせ、HPまるっと引っ越したばかりなもので、仕掛けがまだ出来上がってません。
お急ぎの場合は、ここにメールいただければ、対応いたします。
反応に、少し時間がかかるかもしれませんが、
その辺はご容赦の程。m(__)m
「初級編」の一部分をサンプルとしてここにダウンロードできるリンクがあります。
こんな感じというのが、お分かりいただけるかと。PDF形式です。
キノコ食べました
山菜・きのこ採り [2010/11/14]
キノコを採ってきた(自慢)話ばっかりで、食べた話をしてませんでした。
でも、特別変わった食べ方は少なくって、ほとんどはお味噌汁の具です。
マイタケ
・「きりたんぽ」という鍋です。
この鍋にマイタケは外せません。

・マイタケ・スパゲッティです。
食べてるときは、うまいうまい言って食べたんですが、その後 事件がありました。
このとき料理せずに残したマイタケを冷蔵庫に入れていたら・・・・
マイタケにホームステイしていた連中が這い出してきて・・・・・
大騒ぎでした。

ウスヒラタケ
・油炒め
食べるラー油での味付けをベースにして、
左バターしょうゆ味と
右万能つゆ仕立てにしてみました。
さる的には、バターしょうゆ味が好きでした。

ナラタケ
・納豆汁です。
「サワモタシは絶対これ」とさるは思っています。
サトイモ、豆腐/油揚げ、塩漬けワラビとサワモタシ。当然、納豆はすりつぶしたものが入っています。

ナメコ
・ナメコ汁です。
ナメコ汁以外の食べ方って・・・・・。思い浮かびません。
・あと、白だしか、醤油で似たのに、大根おろしを入れて食べたような。
写真は撮ってませんでした。
ブナハリタケ
初めて食べたので、何も考えずに
・お味噌汁の具にしました。

・それと白だしで煮ました。

ヌメリツバタケモドキ
今回初めてチャレンジしようと思っていたら、
湯がきすぎてスライムになってしまったので、食べるのを断念しました。
ムキタケ
・油炒めです。
炒め物にいいよと教えてもらったので、中華風というか、またまた食べるラー油で炒めて、塩コショウ、醤油で味付けしました。ベーコンと合うとの話でしたが、無かったのでハムを入れました。結構いけました。

・煮物
ただいま調理中。鶏肉といっしょに煮物にしたいと思います。
でも、特別変わった食べ方は少なくって、ほとんどはお味噌汁の具です。
マイタケ
・「きりたんぽ」という鍋です。
この鍋にマイタケは外せません。

・マイタケ・スパゲッティです。
食べてるときは、うまいうまい言って食べたんですが、その後 事件がありました。
このとき料理せずに残したマイタケを冷蔵庫に入れていたら・・・・
マイタケにホームステイしていた連中が這い出してきて・・・・・

大騒ぎでした。

ウスヒラタケ
・油炒め
食べるラー油での味付けをベースにして、
左バターしょうゆ味と
右万能つゆ仕立てにしてみました。
さる的には、バターしょうゆ味が好きでした。

ナラタケ
・納豆汁です。
「サワモタシは絶対これ」とさるは思っています。
サトイモ、豆腐/油揚げ、塩漬けワラビとサワモタシ。当然、納豆はすりつぶしたものが入っています。

ナメコ
・ナメコ汁です。
ナメコ汁以外の食べ方って・・・・・。思い浮かびません。
・あと、白だしか、醤油で似たのに、大根おろしを入れて食べたような。
写真は撮ってませんでした。
ブナハリタケ
初めて食べたので、何も考えずに
・お味噌汁の具にしました。

・それと白だしで煮ました。

ヌメリツバタケモドキ
今回初めてチャレンジしようと思っていたら、
湯がきすぎてスライムになってしまったので、食べるのを断念しました。
ムキタケ
・油炒めです。
炒め物にいいよと教えてもらったので、中華風というか、またまた食べるラー油で炒めて、塩コショウ、醤油で味付けしました。ベーコンと合うとの話でしたが、無かったのでハムを入れました。結構いけました。

・煮物
ただいま調理中。鶏肉といっしょに煮物にしたいと思います。
ミニミニ籠に盛り付け
PPバンド籠 [2010/11/10]
昨日、ご紹介した半端材料で作ったミニミニ籠に盛り付けしてみました。

ちょっとため息が出てしまいました。
我ながらセンスないなー。
これ、実は、「花」「玉」の作り方の説明のサンプル写真にしようと思って作りました。
したがって、メインは籠を作ったときの止め具とかワンポイントにする「花」「玉」一個一個です。
決して、「こうしたらいいでしょ」ってわけではないんですよ。
・・・・・言い訳がましいかな。
なので「花」「玉」はくくりつけではなく、バラバラに取り出せますし、他の籠に取り付け可能な状態にしてあります。
今日は、この辺で。m(__)m

ちょっとため息が出てしまいました。
我ながらセンスないなー。
これ、実は、「花」「玉」の作り方の説明のサンプル写真にしようと思って作りました。
したがって、メインは籠を作ったときの止め具とかワンポイントにする「花」「玉」一個一個です。
決して、「こうしたらいいでしょ」ってわけではないんですよ。
・・・・・言い訳がましいかな。
なので「花」「玉」はくくりつけではなく、バラバラに取り出せますし、他の籠に取り付け可能な状態にしてあります。
今日は、この辺で。m(__)m
半端材料で作るミニミニ籠
PPバンド籠 [2010/11/09]
30cmくらいしかないPPバンドの半端材料が、結構ジャマだったので、
ちーっちゃい籠を作ってみました。

模様的には、100均とかにもありそうですが、これでなかなか手間は掛かってます。
というか、小さい方が何かと大変です。
作り方は、以前このブログでも紹介させていただいた、ティッシュケースの「箱」とおぼ同じ。
取っ手は、「取っ手Ⅴ」です。
バンドはあえて幅&色をまちまちにしています。
まだ、こでれ完成ではなくて、これからまだ飾りつけがあります。
飾り付ける材料も、これから作ります。
今日は、この辺で。 m(__)m
ちーっちゃい籠を作ってみました。

模様的には、100均とかにもありそうですが、これでなかなか手間は掛かってます。
というか、小さい方が何かと大変です。
作り方は、以前このブログでも紹介させていただいた、ティッシュケースの「箱」とおぼ同じ。
取っ手は、「取っ手Ⅴ」です。
バンドはあえて幅&色をまちまちにしています。
まだ、こでれ完成ではなくて、これからまだ飾りつけがあります。
飾り付ける材料も、これから作ります。
今日は、この辺で。 m(__)m
ムキタケ採りました。どうやって食べよう
山菜・きのこ採り [2010/11/09]
今年は、確かに秋が遅かったので、やっぱりそのまま寒くなるのも2週間くらい送れている気がします。
紅葉も里山では、もうちょっとという感じ。あんまり綺麗に紅葉しないかもしれないですね。

昨年、ムキタケを結構とった場所に昨日行ってきました。
1本の木だけがちょうど採りごろでした。
逆光でよく見えないかもしれませんが、割と見事に生えてます。
レジ袋1つ分くらいありました。


そのほかは、クリタケとシモフリシメジ。
シモフリシメジが少々あったみたいですが、さるは見つけることができませんでした。
ちぇ。
やっと、ムキタケを剥いて湯がいて、一服。
今年は、採ってきたキノコのほとんどが、汁物の具にしかしていないので、もう少し他の料理は無いものかと、ただいま検索中。
紅葉も里山では、もうちょっとという感じ。あんまり綺麗に紅葉しないかもしれないですね。

昨年、ムキタケを結構とった場所に昨日行ってきました。
1本の木だけがちょうど採りごろでした。
逆光でよく見えないかもしれませんが、割と見事に生えてます。
レジ袋1つ分くらいありました。


そのほかは、クリタケとシモフリシメジ。
シモフリシメジが少々あったみたいですが、さるは見つけることができませんでした。
ちぇ。
やっと、ムキタケを剥いて湯がいて、一服。
今年は、採ってきたキノコのほとんどが、汁物の具にしかしていないので、もう少し他の料理は無いものかと、ただいま検索中。
生後1ヶ月のダヤン(似?)
ねこ [2010/11/09]
こいつ、ひとっつもだまって居ない。
なので、写真はなかなか取れませんでした。

ただでさえボロ家なのに、障子があっちこっち破かれて、さらに悲惨な感じになってます。

っと、よく見たら、「ダヤ子」でした。
あれれ。

なので、写真はなかなか取れませんでした。

ただでさえボロ家なのに、障子があっちこっち破かれて、さらに悲惨な感じになってます。

っと、よく見たら、「ダヤ子」でした。
あれれ。

シロボッコとアカボッコ
山菜・きのこ採り [2010/11/02]
さるの棲む地域では、一箇所に纏まって生える状態を「ボッコ」と呼びます。
ごく局所的な呼び方かもしれないのですが、そうなんです。
でもって、白っぽいキノコでボッコになる(実はナラタケらしいんですが、)のをシロボッコ、

赤茶けたボッコになるキノコをアカボッコ(これはクリタケ)と言います。
(ニガクリタケをこれと間違えたというあれです。)

ここ数年ほとんど同時に生えることが稀だったのですが、今年はかろうじて、同時になった模様。
ただし、シロボッコは先週くらいが最盛期だったらしく、既に朽ちた巨大なボッコ跡を見ました。
でもこれ、本当にサワ付近に生えるサワモタシ(ナラタケ)と同じなんでしょうか。
さるは、未だに疑ってます。
アカボッコの方は、寒くなってからでも生えるので、まだまだこれから。
でも、このキノコは本当に虫が付いてることが多くて。
写真のキノコも穴が開いているのが見えますよね。
ワラジムシのような形の小さいのや、ウ○ムシみたいな長いのが、たいてい潜んでます。
なので、よーく洗わないと、食べる段階で出現しちゃって・・・虫の苦手な方は卒倒するでしょうね。
でも、さるの一族では「虫も食わないようなキノコはさる(人)も食われん」と言って、虫が付いてる方が安心と言ってます。(^^;)やれやれ。
「虫出し」のやり方というのを、ここのご訪問者からお聞きしたので、今度試します。
(日曜に採った写真のキノコは全部、実家に引き取ってもらったので、今回は試してません。)
そろそろ、寒くなってきてキノコシーズンもあと少し。
ナラタケの瓶詰めに失敗して空のビンが大量にあるので、ビチクするまで採るぞー。 m(__)m
ごく局所的な呼び方かもしれないのですが、そうなんです。
でもって、白っぽいキノコでボッコになる(実はナラタケらしいんですが、)のをシロボッコ、

赤茶けたボッコになるキノコをアカボッコ(これはクリタケ)と言います。
(ニガクリタケをこれと間違えたというあれです。)

ここ数年ほとんど同時に生えることが稀だったのですが、今年はかろうじて、同時になった模様。
ただし、シロボッコは先週くらいが最盛期だったらしく、既に朽ちた巨大なボッコ跡を見ました。
でもこれ、本当にサワ付近に生えるサワモタシ(ナラタケ)と同じなんでしょうか。
さるは、未だに疑ってます。
アカボッコの方は、寒くなってからでも生えるので、まだまだこれから。
でも、このキノコは本当に虫が付いてることが多くて。
写真のキノコも穴が開いているのが見えますよね。
ワラジムシのような形の小さいのや、ウ○ムシみたいな長いのが、たいてい潜んでます。
なので、よーく洗わないと、食べる段階で出現しちゃって・・・虫の苦手な方は卒倒するでしょうね。
でも、さるの一族では「虫も食わないようなキノコはさる(人)も食われん」と言って、虫が付いてる方が安心と言ってます。(^^;)やれやれ。
「虫出し」のやり方というのを、ここのご訪問者からお聞きしたので、今度試します。
(日曜に採った写真のキノコは全部、実家に引き取ってもらったので、今回は試してません。)
そろそろ、寒くなってきてキノコシーズンもあと少し。
ナラタケの瓶詰めに失敗して空のビンが大量にあるので、ビチクするまで採るぞー。 m(__)m