PHP超入門 (43)
さて、前回では、既にハードディスク上にある文章(テキストファイル)に、
新しく文章(テキスト)を追加する方法をご紹介しましたが、あんまり、シッ
クリこないというか、普段使っているワードとかエクセルには「新規追加」な
んていうメニューはないので、あまりピンとこない、というところでお話は終
わりました。
そこで、今回はそれを解決する、1つの例を考えてみたいと思います。
■文章(テキスト)一度ブラウザに呼び出して、上書き保存する
今まで、何度も出てきましたが、基本となるPHPプログラムは、
----------------------------------------------------------
<?php
$file = fopen("C:\\inetpub\\wwwroot\\php\\xxx.txt","A");
fwrite($file,"B");
fclose($file);
?>
----------------------------------------------------------
という非常に簡単なプログラムであり、
・「xxx.txt」という文章(テキスト)ファイルに
・引数(ひきすう)「A」をいろいろ指定することにより
・「B」という内容の文章(テキスト)を
いろいろと操作する。
ということをになります。
この引数(ひきすう)には、いくつかのアルファベットの文字で指定してやり、
それぞれの働きは
----------------------------------------------------
引数 意味 ファイルが存在しない場合
----------------------------------------------------
r 読み込み専用 エラー
r+ 読み書き可能 エラー
w 書き込み専用 ファイルを作成
w+ 読み書き可能 ファイルを作成
a 追加書き込み専用 ファイルを作成
a+ 読み込み、追加可能 ファイルを作成
----------------------------------------------------
という風になります。
この場合、「r」や「r+」の場合は、単に文章(テキスト)を「見るだけ」な
ので、あまり面白くもなんともないのですし、ハードディスク上に予め、文章
(テキスト)ファイルを用意しておかなければならないので、ちょっとメンド
クサイです。
引数(ひきすう)が「w」や「w+」の場合は、書きたい文章(テキスト)を入
力すれば、自動的にハードディスク上にファイルを作成してくれ、その上、指
定した文章(テキスト)の内容も書き込んでくれます。
ただし、その文章(テキスト)を訂正したい場合、「w」や「w+」の場合は、完
全に上書き保存してしまうので、訂正したい部分も含めて、1から文章を作成
し直さなければなりません。
引数(ひきすう)が「a」や「a+」の場合は、「w」や「w+」の場合と同様、書
きたい文章(テキスト)を入力すれば、自動的にハードディスク上にファイル
を作成してくれ、その上、指定した文章(テキスト)の内容も書き込んでくれ
すが、この場合、「追加書き込み」オンリーの機能しかなく、既に書き込んで
ある文章(テキスト)に手を加えることはできません。
このように、これらの機能単体だと、使い勝手が悪いし、欲を言えば、ワード
やエクセルのように、「新規作成」「上書き保存」「名前を付けて保存」みた
いなことができれば非常に使い勝手がよくなると思いますし、第一、いちいち
プログラムの中で指定して、そのプログラムを走らせる、というのも面倒です
し、実用的ではありません。
できれば、インターネット上で見かける掲示板のように、プログラムの存在を
意識せずに、ブラウザだけで操作をしたい、というのが本音でしょう。
そこで、それについて、徐々にではありますが、それをステップ・バイ・ステ
ップで実現させていきたいと思います。
■まずは、文章(テキスト)をブラウザ経由で作成する
以前、HTML文のフォームから、ハードディスク上に新しく、文章(テキスト)
ファイルを作成したお話をしました。
このメルマガを初めて読まれる方、あるいは、「忘れちゃった〜」という方は、
以下をご参照ください。
http://www.e-and-a.ws/06/096.asp
この時、使用した、HTMLのフォーム文は
---------------------------------------------------
<html>
<head>
<title>入力フォーム</title>
</head>
<body>
<form action="096-3.php" method="post">
テキスト入力:<input type="text" name="text01">
<input type="submit" name="bottun1" value="入 力">
</form>
</body>
</html>
---------------------------------------------------
で、(ファイル名は「096-1.htm」)
フォーム文から入力した内容をハードディスク上に保存するPHPプログラムは
----------------------------------------------------------
<?php
$text01 = $_POST["text01"];
$file = fopen("C:\\inetpub\\wwwroot\\php\\096-2.txt","w");
fwrite($file,$text01);
fclose($file);
print("書き込み終了しました。");
?>
----------------------------------------------------------
でした。(ファイル名は「096-3.php」)
ここで、繰り返しになりますが、上のHTML文とPHPプログラムの連携というか、
流れをお話しますと、
HTMLの入力フォームに適当な文章をキーボードから入力する
↓
入力された内容が、PHPプログラムに渡され、変数「$text01」に渡される。
これは、PHPプログラムの「$text01 = $_POST["text01"]」の部分で実現し
ています。
↓
「$text01」の内容が、「096-2.txt」に書き込まれる
といった具合になります。
これは、一番最初に書いた、今までお話してきたPHPプログラムの雛型
----------------------------------------------------------
<?php
$file = fopen("C:\\inetpub\\wwwroot\\php\\xxx.txt","A");
fwrite($file,"B");
fclose($file);
?>
----------------------------------------------------------
の「B」の部分に、直接、文章を書くのではなく、HTML文のフォームから
受け取った内容を、変数である「$text01」に置き換えているのにすぎません。
では、その内容変更をPHPプログラムに直接指定するのではなく、PHPプログラ
ムを意識せずに、ブラウザから操作するにはどうしたらよいか?
チョット考えてみましょう。。。
一番単純なのは、上のHTML文とPHPプログラムを利用して、初めから文章を書
き直すことです。
でも、それは、先程お話したようにチョット面倒です。
そこで。。。これは私が考えた1例ですが、
こんなのは如何でしょうか?
-------------------------------------------------------------------------------
<?php
$file = fopen("C:\\inetpub\\wwwroot\\php\\096-2.txt","r");
$text01 = fgets($file);
fclose($file);
?>
<html>
<head>
<title>入力フォーム</title>
</head>
<body>
<form action="096-3.php" method="post">
テキスト入力:<input type="text" name="text01" value="<?php print($text01) ?>">
<input type="submit" name="bottun1" value="入 力">
</form>
</body>
</html>
-------------------------------------------------------------------------------
これは、以前お話した「アクセスカウンター」のお話
http://www.e-and-a.ws/06/096.asp
この時、使用した、HTMLのフォーム文は
http://www.e-and-a.ws/06/093.asp
の流用です。
ここで、クドクド説明しても、年末年始のこともありますので、とりあえず結
論から。。。
すごく前のお話の繰り返しになりますが、
上の
---------------------------------------------------
<html>
<head>
<title>入力フォーム</title>
</head>
<body>
<form action="096-3.php" method="post">
テキスト入力:<input type="text" name="text01">
<input type="submit" name="bottun1" value="入 力">
</form>
</body>
</html>
---------------------------------------------------
を、「096-1.htm」の名前で、「C:\Inetpub\wwwroot\php」に保存。
次に
----------------------------------------------------------
<?php
$text01 = $_POST["text01"];
$file = fopen("C:\\inetpub\\wwwroot\\php\\096-2.txt","w");
fwrite($file,$text01);
fclose($file);
print("書き込み終了しました。");
?>
----------------------------------------------------------
を「096-3.php」の名前で、「C:\Inetpub\wwwroot\php」に保存。
そして、今回、新しく登場した
-------------------------------------------------------------------------------
<?php
$file = fopen("C:\\inetpub\\wwwroot\\php\\096-2.txt","r");
$text01 = fgets($file);
fclose($file);
?>
<html>
<head>
<title>入力フォーム</title>
</head>
<body>
<form action="096-3.php" method="post">
テキスト入力:<input type="text" name="text01" value="<?php print($text01) ?>">
<input type="submit" name="bottun1" value="入 力">
</form>
</body>
</html>
-------------------------------------------------------------------------------
を「096-5.php」の名前で、「C:\Inetpub\wwwroot\php」に保存します。
そして、ブラウザのアドレス欄に
http://localhost/php/096-1.htm
と入力して、自分の好きな文章を入力します。
そして、「096-2.txt」というファイルが新しく作成され、その中身がを見る
と、今、入力された内容が書き込まれていることを確認します。
次に、ブラウザのアドレス欄に
http://localhost/php/096-5.php
と入力されると。。。
テキストボックス内に、さっき入力して、「096-2.txt」に保存された内容が
表示されることが確認できると思います。
そして、その表示された内容を自由にに変更して、
「入力」ボタンをおしてから、「096-2.txt」の中身を見てみると。。。
ちゃんと、変更された内容が反映されていることが分かると思います。
と、マァ、こんな感じですが、いかがでしょうか?
以上、小難しいプログラムをヅラヅラとかきましたが、これを、簡単に言葉で
説明すると、
「ハードディスク上に保存されている内容全部を、一旦、ブラウザのフォーム
の中に呼び出し、いろいろと訂正し、その全体の文章を丸ごと、再びハード
ディスクのファイルに上書き保存する」
ということを、小難しい、3つのプログラムで実現しているのにすぎないので
す。
初めにお話したように、思いもよらず、長〜い話となってしまったので、詳し
い話は、また来年ということで、それではどうぞ良いお年をお迎えください。