PHP超入門 (45)


■ハードディスク上のテキストファイルの中身をフォームに読み込む■

今までの話の流れをここで、一度確認すると、以下のようになります。


 (1) ブラウザのフォーム上に、自分の好きな内容の文章(テキスト)を入力
   する。

                ↓

 (2) ハードディスク上に新しくその入力された文章(テキスト)ファイルを
   PHPプログラムで自動的に作成し、保存する。

                ↓

 (3) その、文章(テキスト)ファイルを丸ごとブラウザのフォーム上に読み
   込んで、ブラウザ上で自分の好きな内容に変更する。

                ↓

 (4) その変更した内容を、丸ごとPHPプログラムで自動的に上書き保存する。


上記の(1)〜(3)の途中までは、今までお話した通りになりますが、前回、(3)
の段階で


-------------------------------------------------------------------------------
<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>
-------------------------------------------------------------------------------


という具合にすると、ブラウザに表示される一行テキストに、PHPのエラーメッ
セージが表示されてしまう、ということが分かりました。


及び


そのエラーの内容は、「PHPプログラムで指定している、変数(今回の場合は
「$text01」)の中身が指定されていない」というものです。


上記の内容は、単純なHTML文ではなく、「HTML文とPHPプログラムは混在して
書くことができる」という、PHPプログラムの性質を利用して、既にPHPプログ
ラムの世界である、ということをご理解ください。


さて、そのエラーを回避するためには、「$text01」の中身を指定する必要があ
りますし、できれば、というか最終的な目的は、前回お話したように、すでに
サーバーのハードディスク上にある、「096-2.txt」、

(↓ ファイルの中身)

の中身を入れ込みたいところです。


そのためにはどうしたらいいでしょうか?



■とりあえず(テキスト)ファイルを開く■


先ずは、とりあえず、「096-2.txt」と言うファイル中身を開いて、PHPプログ
ラムで、イロイロと取り扱えるようにしなければなりません。

そのためには、今まで、何度となく、このメルマガで扱ってきた、fopen(File
Open)関数を用いることになります。


その基本形としては

 $file = fopen("ハードディスク上にあるファイルの位置の指定","そのファイルをどのように扱うかの引数の指定");

となり、上の一行を書くことで、サーバーのハードディスク上にある、文章
(テキスト)ファイルの中身を、変数「$file」に格納することが出来ます。


で、今回の場合は、一連の流れから書くと、

 $file = fopen("C:\\inetpub\\wwwroot\\php\\096-2.txt","r");

という具合になります。


ここで、「C:\\inetpub\\wwwroot\\php\\096-2.txt」という部分は、今回扱う、
「096-2.txt」がある場所を示し、

「r」は、「096-2.txt」という文章(テキスト)ファイルの内容を読み込み専
用で開く、ということになります。


この「r」は、上でも書きましたように、「引数(ひきすう)」と呼び、いく
つかのアルファベット一文字を書くことにより、いくつかの動作の仕方を指定
することができます。


今回は、「r」としましたが、その他のものも含めてお話すると、

----------------------------------------------------
引数    意味      ファイルが存在しない場合
----------------------------------------------------
 r  読み込み専用    エラー
 r+  読み書き可能    エラー
 w  書き込み専用    ファイルを作成
 w+  読み書き可能    ファイルを作成
 a  追加書き込み専用  ファイルを作成
 a+  読み込み、追加可能 ファイルを作成
----------------------------------------------------

という具合になります。


今回の場合は、単純に「096-2.txt」の中身を読み取れればいいので、「r」を
指定した訳です。


以上までの流れをまとめると、

 まず、「$file = fopen("C:\\inetpub\\wwwroot\\php\\096-2.txt","r");」
 という部分を実行し

                ↓

 それから

 -------------------------------------------------------------------------------
 <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>
 -------------------------------------------------------------------------------

の内容を実行するので、結果としては


-------------------------------------------------------------------------------
<?php
$file = fopen("C:\\inetpub\\wwwroot\\php\\096-2.txt","r");
?>

<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>
-------------------------------------------------------------------------------

という具合になります。

でも、このままの状態で実行しても、多分、エラーとなるでしょう。
(↑実際に確認はしていませんが。。。)


なぜなら、上記PHPプログラムの中で、変数「$file」と「$text01」を結びつけ
る内容が、どこにも書いてないからです。



■fgets関数■

ここで、以前のメルマガでチラッと出ましたが、再び「fgets (File Get)」関
数に登場してもらいます。


fgets関数は、fgets()という具合に書き、「()」の中身を指定することによ
り、その動作を発揮することができます。


ここで、少々堅苦しく書くと、


 「fgets()関数」

  fopen()関数 で開いたファイルの、指定したファイル名の1行を取出しま
  す。
  取出す場合には、引数で最大バイト数を指定しますが、省略した場合には
  自動的に 1024バイト(日本語で 512文字分)になります。


となり、今回の場合は、

 $text01 = fgets($file);

という具合に書くことにより、ここで、初めて、変数「$file」と「$text01」
を結びつけることができます。


今回の場合、「096-2.txt」の内容が非常に短い文章なので、上の「fgets()関
数」の「引数(ひきすう)」の部分は省略しましたが、この「096-2.txt」の中
身が、非常に長い場合(正確には、日本語で512文字以上ある場合)

 $text01 = fgets($file,文章(テキスト)ファイルの文字数);

という具合に、具体的な文字数を指定する必要があります。

 例 $text01 = fgets($file,2048);
   この場合、日本語で1024文字分を取り出すことになります。
   日本語一文字は、コンピュータでは2バイトとなるので、2048÷2=1024
   となります。



さて、以上の内容を結合すると、

-------------------------------------------------------------------------------
<?php
$file = fopen("C:\\inetpub\\wwwroot\\php\\096-2.txt","r");
$text01 = fgets($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>
-------------------------------------------------------------------------------


という具合になり、ようやく、ここで初めて、目出度く、ブラウザに表示され
る一行テキストボックスに、サーバーのハードディスク上に保管してある「09
6-2.txt」の内容を読み込むことが可能になります。


今回の場合、これはこれでエラーも出ずに、何とかなりましたが、ここで、最後に

 「fclose($file);」

という一行を加えておきます。


(最終形)
-------------------------------------------------------------------------------
<?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>
-------------------------------------------------------------------------------


この「fclose($file);」というのは、「fclose (File Close)」関数で、最初に
「fopen (File Open)」関数で開いたファイルをお行儀良く、「開いたファイル
は、最後に閉じる」という意味です。


いまいちピンと来なかった場合は、日常使うワードやエクセルでの、「ファイ
ル(F)」→「閉じる(C)」と同じ操作を行う、というイメージです。


今回の場合は、「fclose($file);」がなくても、エラーとなりませんでしたが、
もっと大きなPHPプログラムを作成した場合、思わぬところでエラーとなってし
まう可能性があるので、一度、ファイルを開いた後のお決まりの文章と考えて
くださって結構です。


さてさて、これで何とか一連のPHPプログラムのキモの部分のお話は完了しまし
た。


最後は、この一行テキストボックスに呼び出された内容を再び、サーバーのハ
ードディスクに保存、という具合になりますが、今回も、またまた、長〜い内
容となってしまったので、最後のこの処理の部分は、また、次回と言うことで
ご容赦願います。


次回は、短くて済むかな?

新しく「パソコン(PC)初心者向け パソコンサポートサービス」を始めました。
詳細は専用サイトを御覧ください。

上記の内容はシリーズとしてメールマガジンで配信しています。

42歳のオヤジでもできた!パソコンサーバー化計画 (マガジンID:0000114576)

メールマガジン登録  メールアドレス:
メールマガジン解除  メールアドレス:

Powered by まぐまぐ

copyright(c) 2002-2007 E&A工房 All rights reserved.