Category Archives: PHP超入門:中級編

PHP超入門 (58)

0
Filed under PHP超入門, PHP超入門:中級編

■ 前置き ■

今まで、PHPプログラムにより、

  • ブラウザ経由で、サーバー上にテキスト(文章)ファイルを保存する。

  • その保存した、テキスト(文章)ファイルを再びブラウザに呼び出し、その内容を修正して、再び、サーバー上のハードディスクに保存する。


という内容を延々と話してきて、一応の決着は前号のメルマガでつきました。


上記の操作は、イメージ的には、ワードやエクセルでの「上書き保存」に対応します。

そして、前号の最後で、ワードやエクセルの、「名前を付けて保存」に対応する機能が実現できたら便利かナ~、と申し上げました。


そこで、今号の内容は、PHPプログラムによる、テキスト(文章)ファイルの「名前を付けて保存」ということになりますが。。。


結論としては、出来ることは出来ましたが、エライきたないプログラム(コード)となってしまいました!!

スミマセン。

前回のメルマガを書いた時点では、「最初は、数行の訂正で済むだろう」と考えていたのですが、実際に手をつけてみると、自分的にはドエラい作業となってしまったのです。
(時間も限られているので、「エイッッ!、ヤッッ!」で作ってしまったのが正 直なところです。汗)


理由としては、

  • 自分で作ったはずのプログラムなのに、時間をおいてしまった為、プログラム間の変数名の対応がアヤフヤとなってしまった。

  • 上記の内容に関係しますが、プログラム中に、注釈文を入れていなかったので、PHPのプログラム(コード)の処理の少なくない部分を忘れてしまった。

が挙げられます。


従いまして、後で述べます、私が考えたPHPプログラムですが、あくまでも「とりあえず動いた」というレベルで、あんまり参考にならないと思います。


個人的な目的で使用するには問題ないと思いますが、今回紹介するモノよりも、遙かにスッキリとした、プログラム(コード)の記述がある筈です。


従いまして、今号はプログラム自体に興味のない場合は、次項の内容はスットバしてください。


とりあえず、次項の内容は

  • 面倒だったので、HTML文で出力させる部分は、すべてprint関数で、出力させました。

  • 一応、インターネットエクスプローラとFirefoxでは動作は確認していますが、本来なら、「’」(シングルクォーテーション)は「”」(ダブルクォーテーション)のエスケープシーケンスで記述されるのが正当だと思いますが、今回は、無理矢理、「’」で記述しています。

というレベルです。


そんな訳で、プログラムの開発は、

  • 時間を掛けずに、一気にやること。

  • 後で、自分(あるいは他人)でも分かるように、注釈文はキチンと記述しておくこと。

ということは、大切だナ~、とつくづく実感した次第です。


話はとびますが、現在、日本国内でブログのプログラム(スクリプト)は、Movable Type(ムーバブルタイプ・MT)というものが普及していが、Movable Typeは、一連の200個以上のCGIで構成されています。
(↑ 実際にインストールしてみると分かると思いますが。。。)

これらのプログラム(コード)を、殆どノーミスで作り上げたのは、本当に凄いっっ!!、と思った次第です。


■ プログラム(コード)の詳細 ■

上でも書きましたように、「とりあえず動いた」というレベルで、あんまり参考にならないと思いますので、詳細な内容の記述は割愛し、紹介する程度に留めます。

ですから、あんまり興味のが無い場合には、プログラム(コード)の記述は流してください。


  1. まず、ブラウザのアドレス欄に、

      http://localhost/php/114-1.php

    と入力します。

    そうすると、サーバーの「C:\Inetpub\wwwroot\php」に保存された

    114-1



    「php」フォルダに保存されている、ファイルの一覧がリンク付きで表示されます。

    114-2

  2. そして、そのフォルダに保存された、「test.txt」のリンクをクリックすると、「test.txt」の内容がファイル名と共に、フォーム上に表示されます。

    114-3

  3. そこで、ブラウザ上で自分が好きなように、ファイル名や、文章(テキスト)の内容を修正して、「入力」ボタンをクリックすると。。。

    114-4

  4. サーバー上の、「C:\Inetpub\wwwroot\php」フォルダ内に、上記の内容で修正したファイルが新たに生成され、

    114-5

    その文章(テキスト)ファイルを開いてみると、上記のブラウザ上で修正された内容で保存できている事が確認できると思います。

    114-6

で、そのPHPプログラムの内容ですが、以下の通りになります。

ただ、幾度も述べましたように、殆ど参考にならないと思いますので、詳細な解説は割愛させていただき、プログラム(コード)のソースをコピペするに留めます。


「114-1.php」

—————————————————————————————-
<?php

$dir_file = opendir( ‘./’ );

while( $file_name = readdir( $dir_file ) ){
print “<a href=’./114-2.php?hensuu01=”.”{$file_name}”.”‘>”.”{$file_name}”.”</a>”.”<br>”;
}

closedir( $dir_file );

?>
—————————————————————————————-


「114-2.php」

———————————————————————————
<?php
$hensuu02 = $_GET["hensuu01"];

$filePath = “C:\\inetpub\\wwwroot\\php\\” . $hensuu02;
$text01 = file_get_contents($filePath);

?>

<html>
<head>
<title>入力フォーム</title>
</head>
<body>

<form action=”114-3.php” method=”post”>

ファイル名<br />

<?php
print(”<input type=’text’ name = ‘file_name01′” . ” value=’” . $hensuu02 . “‘>”);
?>

<br />

テキスト入力<br>
<TEXTAREA name=”text01″ rows=”10″ cols=”20″><?php print($text01) ?></TEXTAREA><br>

<input type=”submit” name=”bottun1″ value=”入 力”>

</form>

</body>
</html>
———————————————————————————


「114-3.php」

————————————————————
<?php
$file_name02 = $_POST["file_name01"];
$text01 = $_POST["text01"];

$file_name03 = “C:\\inetpub\\wwwroot\\php\\” . $file_name02;

$file04 = fopen($file_name03,”w”);

fwrite($file04,$text01);

fclose($file04);

print(”書き込み終了しました。”);
?>
————————————————————


殆ど参考にならず、申し訳ありません。


という訳で、次号のネタは何にしようかナ~、と考えている、今日この頃です。


。。。続く

PHP超入門 (57)

0
Filed under PHP超入門, PHP超入門:中級編

■ 前回までのおさらい ■

まず最初に、今号の内容が、一連の流れのどの位置にあるのか、確認いたいと思います。


今までの経過についてその内容を細かく説明すると長くなりますので、ザックリ流れをまとめてみますと、

あるPHPを実行する(ブラウザでアクセスする)と、サーバーのフォルダにあるファイルの一覧が表示される

      ↓

表示されたファイルにはリンクが張られていて、それをクリックすると、ブラウザ上にフォーム(テキストエリア)が表示され、同時に、その中にファイル(テキストファイル)の中身(文章)が表示される

      ↓

ユーザーは、フォーム(テキストエリア)内で、自由に文章が編集できる

      ↓

「保存」のボタンを押すと、編集された文章がテキストファイルとしてサーバー上のハードディスクに再び保存される


ということになります。


で、今回の内容ですが、上でお話した最後の

「保存」のボタンを押すと、編集された文章がテキストファイルとしてサーバー上のハードディスクに再び保存される


段階になります。


PHPプログラムそのものは、前回の最後でご紹介いたしましたので、今回はその詳細ということにしたいと思います。

ただ、今回のプログラムは「これが正解」と言う訳ではなく、他にもいろいろ考え方があるでしょう。

ですから、ぶっちゃけた話、「私がこうしたら動いた」というレベルです。

この点につきましては、予めご了承願います。


また、このPHPプログラムは、あくまでも「個人で使用する」ということを前提で考えました。

不特定多数の人に公開する場合、いろいろなセキュリティ上の処理を施さなければならず、その分、プログラムがやたら複雑になる事を避けているためです。


■ PHPプログラムの詳細 ■

さて、PHPプログラムですが、前回の最後に


———————————————————

<?php
$text01 = $_POST["text01"];

$file = fopen(”C:\\inetpub\\wwwroot\\php\\test.txt”,”w”);

fwrite($file,$text01);

fclose($file);

print(”書き込み終了しました。”);
?>

———————————————————


というものを、ご紹介いたしました。

で、その詳細ですが。。。


$text01 = $_POST["text01"]

で、下記フォーム

112-1

の複数行テキストボックスの内容を、受け取り、「$text01」という名前の変数に収めます。


元となる、フォームのHTML文は以下の通りとなり、

———————————————————————————

<?php
$hensuu02 = $_GET["hensuu01"];

$filePath = “C:\\inetpub\\wwwroot\\php\\” . $hensuu02;
$text01 = file_get_contents($filePath);

?>

<html>
<head>
<title>入力フォーム</title>
</head>
<body>

<form action=”112-1.php” method=”post”>

テキスト入力<br>
<TEXTAREA name=”text01″ rows=”10″ cols=”20″><?php print($text01) ?></TEXTAREA><br>

<input type=”submit” name=”bottun1″ value=”入 力”>

</form>

</body>
</html>

———————————————————————————


「TEXTAREA name=”text01″ rows=”10″ cols=”20″」のところの、「name=”text01″」という部分で、PHPプログラムに渡す名称を指定しています。


次の

$file = fopen(”C:\\inetpub\\wwwroot\\php\\test.txt”,”w”)

では、「fopen」関数を用いて、サーバーのハードディスク上にある、「C:\\inetpub\\wwwroot\\php\\test.txt」というファイルを開き、「$file」という名前の変数に読み込みます。

丁度、エクセルやワードの「ファイルを開く」という動作と同じような感覚です。

ここで、「”w”」は、fopen関数の添字の一つで、開いたファイルを書き込み専用で開くことを指定しています。


話はやや脱線しますが、今回のプログラムには直接関係ありませんが、この「”w”」を指定することにより、サーバーのハードディスク上に、指定したファイルが存在しない場合、自動的に指定したファイルを作成してくれます。


そして、

fwrite($file,$text01)

では、「fwrite関数」を用いて、「$text01」の内容を、「$file」というファイルに上書き保存します。

112-5


最後に

fclose($file)

では、「fclose関数」を用いて、一度開いたファイルを閉じる動作をしています。

この「fclose($file)」の一行は、多分(?)なくてもエラーにはなりませんが、余計なトラブルを避けるための、一種の作法みたいなものだと考えていただければ、と思います。


最後の行の

print(”書き込み終了しました。”)

は、なくても問題は全くないのですが、一応、ファイルの書き込みが終了したことを、ブラウザで確認できるように、「print関数」を用いて、ブラウザに「書き込み終了しました。」というメッセージを表示させています。

112-4


。。。という訳で、たった5行のPHPプログラムの詳細についてのお話でしたが、如何でしょうか?


最初にも申し上げましたが、これが唯一の正解ではなく、他のPHPに様々に用意されている関数を利用して、全く違うプログラムも書ける、ということを念頭に置いていただけれれば幸いです。


さてさて、これで一応、ず~と長々と続けていた一連のお話は終わりにしたいと思います。

ずっと読み続けてくださり、有り難うございます。


で、次回のネタなんですが、おまけで、今回のPHPプログラムを応用して、エクセルやワードのように、「名前を付けて保存」といったことが出来れば便利かな~、とボヤ~と考えています。

まだ、プログラム自体は全く考えていないのですが。。。(汗)

PHP超入門 (56)

0
Filed under PHP超入門, PHP超入門:中級編

■ 前回までのおさらい ■

まず最初に、今号の内容が、一連の流れのどの位置にあるのか、確認いたいと思います。

今までの経過をを細かく説明すると長くなりますので、ザックリ流れをまとめてみますと、

あるPHPを実行する(ブラウザでアクセスする)と、サーバーのフォルダにあるファイルの一覧が表示される

      ↓

表示されたファイルにはリンクが張られていて、それをクリックすると、ブラウザ上にフォーム(テキストエリア)が表示され、同時に、その中にファイル(テキストファイル)の中身(文章)が表示される

      ↓

ユーザーは、フォーム(テキストエリア)内で、自由に文章が編集できる

      ↓

「保存」のボタンを押すと、編集された文章がテキストファイルとしてサーバー上のハードディスクに再び保存される


ということになります。

で、前回のメルマガでは、上記の

  「ユーザーは、フォーム(テキストエリア)内で、自由に文章が編集できる」

というところまででした。


111-8


で、少々細かくなりますが、PHPプログラムの中身は

———————————————————————————

<?php
$hensuu02 = $_GET["hensuu01"];

$filePath = “C:\\inetpub\\wwwroot\\php\\” . $hensuu02;
$text01 = file_get_contents($filePath);

?>

<html>
<head>
<title>入力フォーム</title>
</head>
<body>

<form action=”096-3.php” method=”post”>

テキスト入力<br>
<FORM><TEXTAREA rows=”10″ cols=”20″><?php print($text01) ?></TEXTAREA></FORM><br>

<input type=”submit” name=”bottun1″ value=”入 力”>

</form>

</body>
</html>

———————————————————————————


ということになります。


■ そして最後の処理 ■

ここからが今号の本題になります。

上記のようにブラウザに表示され、イロイロ修正した中身を再び、サーバーのハードディスクに保存しなければなりません。

では、実際にそれを実行するにはどうしたらいいでしょうか?

答えは。。。

そう、上のPHPプログラムの中にあります!!。

上記PHPプログラムの中ほどにある、

  「form action=”096-3.php” method=”post”」

という箇所です。


具体的には、ブラウザに示されたフォーム上で、いろいろ文章(テキスト)の内容を修正した後、

112-1


に表示された「入力」のボタンを押すと、「096-3.php」のプログラムが動作することになります。

改めて「096-3.php」の中身を細かく見るのもカッタルイと思いますので、詳細は、ここでは省きます。


さて、ここで、申し訳ありませんが、上記

———————————————————————————

<?php
$hensuu02 = $_GET["hensuu01"];

$filePath = “C:\\inetpub\\wwwroot\\php\\” . $hensuu02;
$text01 = file_get_contents($filePath);

?>

<html>
<head>
<title>入力フォーム</title>
</head>
<body>

<form action=”096-3.php” method=”post”>

テキスト入力<br>
<FORM><TEXTAREA rows=”10″ cols=”20″><?php print($text01) ?></TEXTAREA></FORM><br>

<input type=”submit” name=”bottun1″ value=”入 力”>

</form>

</body>
</html>

———————————————————————————

のPHPプログラムというかHTML文に間違いがありました。

いわゆる「バグ」というヤツです。

この前回、私が考えてメルマガの内容として書いたプログラムというか、HTML文は実を言うと、タグを手打ちで書くのがメンドクサかったので、ホームページビルダーで作ったものをコピペしたのですが、今号のメルマガを書いていて、実際に「入力」ボタンを押したら。。。

「アレッッ?動かない」「エラーメッセージも返ってこない」ということが判明しました(汗)。


大変申し訳ありませんが、以下のように訂正したいと思います。

112-2


———————————————————————————

<?php
$hensuu02 = $_GET["hensuu01"];

$filePath = “C:\\inetpub\\wwwroot\\php\\” . $hensuu02;
$text01 = file_get_contents($filePath);

?>

<html>
<head>
<title>入力フォーム</title>
</head>
<body>

<form action=”112-1.php” method=”post”>

テキスト入力<br>
<TEXTAREA name=”text01″ rows=”10″ cols=”20″><?php print($text01) ?></TEXTAREA><br>

<input type=”submit” name=”bottun1″ value=”入 力”>

</form>

</body>
</html>

———————————————————————————


で、話を元に戻しまして、ブラウザ上に表示・修正した内容をサーバーのハードディスクに保存する作業です。


繰り返しになってしまいますが、ブラウザに表示されている「入力」ボタンを押すことにより動作するPHPプログラムを私としては、以下のものを考えてみました。
(あくまでも一例であって、これが正解という訳ではありません)

———————————————————

<?php
$text01 = $_POST["text01"];

$file = fopen(”C:\\inetpub\\wwwroot\\php\\test.txt”,”w”);

fwrite($file,$text01);

fclose($file);

print(”書き込み終了しました。”);
?>

———————————————————


細かい話は後にしまして、上記のPHPプログラムを「112-1.php」というファイル名で「C:\Inetpub\wwwroot\php」に保存します。

112-3


そして、改めて、ブラウザのアドレス欄に「http://localhost/php/109-1.php」と入力し、フォームに表示された内容を、自分が好きなように編集し、

112-1


「入力」ボタンを押すと、「書き込み終了しました。」というメッセージが表示されます。

112-4

この画面を確認した後、エクスプローラを立ち上げて、「C:\Inetpub\wwwroot\php」フォルダにある「test.txt」の中身を見てみると。。。

112-5


見事、ブラウザで修正した内容が反映されていました!!
(私の場合ですが。。。)

112-6


本当は、今号のメルマガは、上記たった数行のPHPプログラムの紹介の予定で、最初にも申し上げましたように、短い内容で済むだろう、と考えていたのですが、前回のメルマガで紹介したHTML文の予想もしない「バグ」(間違い)で、マタマタ長くなってしまいました。


大変申し訳ありませんが、上記PHPプログラム(←たった数行)の細かい話は、次回にて、ということで御勘弁ください。


続く。。。

PHP超入門 (55)

0
Filed under PHP超入門, PHP超入門:中級編

■ 前置き ■

最初にも書いたように、前回から、かなり間が空いてしまいましたので、今までのおさらいを兼ねて、今号がどの位置にいるのか確認をしたいと思います。


かなり前から続けている、このメルマガの内容ですが、流れとすれば、以下のようになります。


あるPHPを実行する(ブラウザでアクセスする)と、サーバーのフォルダにあるファイルの一覧が表示される

      ↓

表示されたファイルにはリンクが張られていて、それをクリックすると、ブラウザ上にフォーム(テキストエリア)が表示され、同時に、その中にファイル(テキストファイル)の中身(文章)が表示される

      ↓

ユーザーは、フォーム(テキストエリア)内で、自由に文章が編集できる

      ↓

「保存」のボタンを押すと、編集された文章がテキストファイルとしてサーバー上のハードディスクに再び保存される



ということを目的に、一連のお話をしています。


ここで、前回の内容をチラッとしますと、

とあるフォルダに保存されているファイルの一覧をブラウザに表示させる。

111-1

      ↓

そして、表示されたファイル名にはリンクが張ってあり、その各リンクには、「109-2.php」という、PHPプログラムに、表示されたファイル名を渡すような形になっている。

      ↓

そのファイル名のリンクをクリックすると、PHPプログラムの「109-2.php」が実行され、ブラウザには入力フォーム(複数行テキストボックス)が表示され、フォームの中身には、サーバーのハードディスク上に保存されているテキストファイル(「test.txt」)の中身が表示される。

ただし、前回のPHPプログラムではテキストファイル(「test.txt」)の一行しか表示されず、二行目以降は表示できなかった

111-2


さて、どうしよう?


という話まででした。


あ、そうそう、この際、表示しようと考えてるテキストファイル(「test.txt」)の中身は、意味のない、単純な3行の文字となります。

111-3


■ 問題点 ■

ここで、問題となったのは、PHPプログラム(「109-2.php」)で使用されている「fgets()関数」でした。


「109-2.php」の中身

———————————————————————————
<?php
$hensuu02 = $_GET["hensuu01"];

$filePath = “C:\\inetpub\\wwwroot\\php\\” . $hensuu02;
$file = fopen($filePath,”r”);
$text01 = fgets($file);
fclose($file);
?>

<html>
<head>
<title>入力フォーム</title>
</head>
<body>

<form action=”096-3.php” method=”post”>

テキスト入力<br>
<FORM><TEXTAREA rows=”10″ cols=”20″><?php print($text01) ?></TEXTAREA></FORM><br>


<input type=”submit” name=”bottun1″ value=”入 力”>

</form>

</body>
</html>
———————————————————————————


fgets()関数の機能を小難しく紹介すると、

「fgets()関数」

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


そう、この「fgets関数」の場合、テキストファイルが複数行あったとしても、最初の一行しか取り出してくれず、2行目以降は無視されていまうのです。

これでは、チョット使い物にはなりません。


■ 解決策 ■

ここでは、人それぞれ考え方があり、今まで、このメルマガで紹介した技を組み合わせて、無理矢理(?)複数行表示させる手がない訳でもありませんが、ここでは、もっとお手軽な方法をとってみたいと思います。


PHPという言語には、それをパソコンにインストールすると同時に、エクセルと同じように、様々な「関数」が利用できるようになります。

その関数の数と言うと。。。

それはそれは沢山あり、ここでは、というより、それだけで分厚い一冊の本ができてしまう程です。
(確か、書店でも売っていたと思います)


そんな沢山ある関数の中に、今までお話に使っていた「fgets()関数」ではなく、複数行のテキストを表示させる関数があるんじゃないかと思いませんか?

そう、探したらありました!!

それは、「file_get_contents()」関数が見つかりました。


で、この「file_get_contents()」関数の機能を詳細に、というか小難しく紹介すると、


「file_get_contents」

file_get_contents ― ファイルの内容を全て文字列に読み込む

説明

string file_get_contents ( string $filename [, bool $use_include_path [,resource $context [,int $offset [,int $maxlen]]]] )

file_get_contents() は、offsetで指定した場所から開始し maxlen バイト分だけ ファイルの内容を文字列に読み込むこと以外は file() と等価です。
失敗した場合、file_get_contents() は FALSE を返します。

file_get_contents()はファイルの内容を文字列に読み込む 方法として好ましいものです。

もしOSがサポートしていれば パフォーマンス向上のためにメモリマッピング技術が使用されます。


何のことやらサッパリ分かりませんネ~。

私も鋭く突っ込まれると、寝たフリをしてしまいそうです(爆)。


「file_get_contents()」関数は、いろいろ便利な使い方があり、もし興味があれば、時間がある時にでもググッてみてください。

いろいろな使い道を紹介しているページがヒットします。


さて、話を元に戻して、では、今回の目的を達成するにはどうすればよいかと言うと。。。


私としては、以下のような記述を考えてみました。

———————————————————————————

<?php
$hensuu02 = $_GET["hensuu01"];

$filePath = “C:\\inetpub\\wwwroot\\php\\” . $hensuu02;
$text01 = file_get_contents($filePath);

?>

<html>
<head>
<title>入力フォーム</title>
</head>
<body>

<form action=”096-3.php” method=”post”>

テキスト入力<br>
<FORM><TEXTAREA rows=”10″ cols=”20″><?php print($text01) ?></TEXTAREA></FORM><br>

<input type=”submit” name=”bottun1″ value=”入 力”>

</form>

</body>
</html>

———————————————————————————


この場合、

  $text01 = file_get_contents($filePath)

という記述を使って、「file_get_contents(ファイルへのパス名)」という具合に用い、テキストファイルの中身を全部、「$text01」という変数の中に代入しています。


なお、一行目の

  $hensuu02 = $_GET["hensuu01"]

という記述は前号までお話したように、ファイル名一覧表示の画面で、リンクをクリックした時に、リンクに埋め込まれた変数(ここではファイル名)を受け取り、「$hensuu02」という名前の変数に、いったん代入する処理です。


二行目は、file_get_contents()関数で、file_get_contents(ファイルへのパス名)のところで、パス名を直接記述してもOKですが、これは、私個人の趣味で、パス名を、一旦バラバラにして、文字列を結合する記号「.」を用いて、再び結合させて、改めて変数「$text01」に代入しています。

これは、完全に私個人の嗜好です。


■ それでは早速実行 ■

では、上記のPHPプログラムを「109-3.php」という名前で、「C:\Inetpub\wwwroot\php」に保存します。

111-4


次に、「C:\Inetpub\wwwroot\php」に保存されている「109-1.php」

111-5


の中身をメモ帳で開いて、「109-2.php」の部分を「109-3.php」と書き直して

111-6

上書き保存します。


そして、ブラウザを立ち上げ、そのアドレス欄に「http://localhost/php/109-1.php」と入力すると、フォルダに保存されているファイル名の一覧がリンク付きで表示されます。

111-7


で、そのファイル名(「test.txt」)のリンクをクリックすると。。。


ブラウザに一行テキストボックスと複数行テキストボックスが表示され、それぞれに、ファイル名とファイルの中身が表示されていることが確認できると思います。

111-8


これで、万事解決といったところではないでしょうか?


最後は、フォームに呼び出された内容をブラウザ上で、いろいろ修正したりして、最終的にサーバーのハードディスクに保存する作業です。


これについては、またまた今号の内容が長くなってしまいそうなので、次号にて、ということでご勘弁ください。


それでは、また。。。

PHP超入門 (54)

0
Filed under PHP超入門, PHP超入門:中級編

■ 前置き ■

最初にも書いたように、前回から、かなり間が空いてしまいましたので、今までのおさらいを兼ねて、今号がどの位置にいるのか確認をしたいと思います。


かなり前から続けている、このメルマガの内容ですが、流れとすれば、以下のようになります。


あるPHPを実行する(ブラウザでアクセスする)と、サーバーのフォルダにあるファイルの一覧が表示される

      ↓

表示されたファイルにはリンクが張られていて、それをクリックすると、ブラウザ上にフォーム(テキストエリア)が表示され、同時に、その中にファイル(テキストファイル)の中身(文章)が表示される

      ↓

ユーザーは、フォーム(テキストエリア)内で、自由に文章が編集できる

      ↓

「保存」のボタンを押すと、編集された文章がテキストファイルとしてサーバー上のハードディスクに再び保存される



ということを目的に、一連のお話をしています。


ここで、前回の内容をチラッとしますと、

とあるフォルダに保存されているファイルの一覧をブラウザに表示させる。

そして、表示されたファイル名にはリンクが張ってあり、その各リンクには、「109-2.php」という、PHPプログラムに、表示されたファイル名を渡すような形になっている。

という話まででした。


例をいうと、ブラウザに表示されている「test.txt」というファイル名があったとすると、それにはハイパーリンクが張ってあり、

  <a href=’./109-2.php?hensuu01=test.txt’>test.txt</a>

これにより、「test.txt」というファイル名が、「hensuu01」という名前の変数に取り込まれ、受けて側である「109-2.php」というPHPプログラムは、受け取った「hensuu01」という変数から、「test01.txt」というファイル名を取り出し、イロイロと処理することになます。


ここで、もしかしたら、眩暈を起こしてしまうかもしれませんが、実際のPHPプログラムを再掲します。


フォルダにあるファイル名の一覧をハイパーリンクと共にブラウザに表示する
PHPプログラム「109-1.php」

———————————————————————————————-
<?php

$dir_file = opendir( ‘./’ );

while( $file_name = readdir( $dir_file ) ){
print “<a href=’./109-2.php?hensuu01=”.”{$file_name}”.”‘>”.”{$file_name}”.”</a>”.”<br>”;
}

closedir( $dir_file );

?>
———————————————————————————————-

という例を書いてみました。


■ 受け取ったファイル名の内容をブラウザのフォーム内に表示する ■

それでは、ファイル名を受け取った「109-2.php」というPHPプログラムには、どうさせたらいいでしょうか?

ここで、最終目的である、ブラウザのフォーム内に、「test.txt」の中身というか文章(テキスト)を表示させ、ブラウザ上で、いろいろと修正をしたいところです。


先ずは、受け取った変数「hensuu01」からファイル名「test.txt」を取り出す操作ですが、これについては、前回、超簡単なプログラム

——————————
<?php

$hensuu02 = $_GET["$hensuu01"];

print ($hensuu02);

?>
——————————

で解決済みです。


では、ここからが本番で、取り出したファイル名から、そのサーバーのハードディスクにあるファイルにアクセスして、そのファイルを開かなくてはいけません。


ネタから先に言ってしまいますと、これは、このメルマガで、ず~と以前に紹介したPHPプログラムの一部を書き換えるだけで済みます。


その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>
——————————————————————————-


です。


上記のプログラムの

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

の部分で、「096-2.txt」というファイルを読み込み専用で開く、という動作を指定していますが、この中の「096-2.txt」をファイル名そのものではなく、変数に変えてしまえばよいかもしれません。


そうすると、

こんな具合でいかがでしょうか?


——————————————————————————-
<?php
$hensuu02 = $_GET["hensuu01"];

$filePath = “C:\\inetpub\\wwwroot\\php\\” . $hensuu02;
$file = fopen($filePath,”r”);
$text01 = fgets($file);
fclose($file);
?>

<html>
<head>
<title>入力フォーム</title>
</head>
<body>

<form action=”096-3.php” method=”post”>

テキスト入力<br>
<FORM><TEXTAREA rows=”10″ cols=”20″><?php print($text01) ?></TEXTAREA></FORM><br>


<input type=”submit” name=”bottun1″ value=”入 力”>

</form>

</body>
</html>
——————————————————————————-


というものを考えてみました。


上記、PHPプログラムの

  ”C:\\inetpub\\wwwroot\\php\\096-2.txt”

で、変数の部分と、その他の部分に一度分解し、文字列を結合させる機能を持つ「.」で、文字列を再構成しているところがミソです。


「$file = fopen(”C:\\inetpub\\wwwroot\\php\\096-2.txt”,”r”);」の行で、一行に書いても良いのですが、そうすると、プログラムが見づらくなるので、再構成する操作を別の一行に記述し、その再構成した内容を、一度「$filePath」という名前の変数に格納しているところが、チョット違うところです。


また、フォームの部分も、一行テキストエリアではなく、複数行テキスト領域に変更してあります。


さて、以上のPHPプログラムを「109-2.php」という名前で、「C:\Inetpub\wwwroot\php」に保存します。

110-1


そして、テスト用に

あいうえお
カキクケコ
さしすせそ

と簡単な複数行の文章をメモ帳等で作成し、

110-2


「test.txt」という名前で「C:\Inetpub\wwwroot\php」に保存します。

110-3


それでは、早速、実験したいと思います。

まず、ブラウザを立ち上げ、そのアドレス欄に「http://localhost/php/109-1.php」と入力すると、フォルダに保存されているファイル名の一覧がリンク付きで表示されます。

110-4

その中で、先程、メモ帳で作った、テスト用テキストファイル「test.txt」のリンクをクリックすると。。。


確かに、複数行テキスト領域に「あいうえお」と表示されるのですが、の残りの「カキクケコ」「さしすせそ」が表示されません。

110-5


HTMLのソースを見ても、「あいうえお」しか見当たりません。

どういうことでしょうか???


実は、ファイルから文字列を取り出す関数である「fgets関数」に問題があります。

以前、一行テキストボックスの時に出てきた、この関数ですが、その時の「fgets関数」の機能を見てみると、


「fgets()関数」

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


そう、この「fgets関数」の場合、複数行あっても、最初の一行しか取り出してくれず、2行目以降は無視されていまうのです。

これでは、全く使い物になりません。


ここは、どうしても、複数行テキスト領域に、テキストファイル「test.txt」の中身全部を表示させなければなりません。


そこで、次回はこの問題について対処したいと思います。

。。。続く

PHP超入門 (53)

0
Filed under PHP超入門, PHP超入門:中級編

■ フォームではなくリンクで値(数値を含む)をPHPプログラムら渡す ■

暫く前から、このメルマガでは、


あるPHPを実行する(ブラウザでアクセスする)と、サーバーのフォルダにあるファイルの一覧が表示される

      ↓

表示されたファイルにはリンクが張られていて、それをクリックすると、ブラウザ上にフォーム(テキストエリア)が表示され、同時に、その中にファイル(テキストファイル)の中身(文章)が表示される

      ↓

ユーザーは、フォーム(テキストエリア)内で、自由に文章が編集できる

      ↓

「保存」のボタンを押すと、編集された文章がテキストファイルとしてサーバー上のハードディスクに再び保存される


ということを目的に、一連のお話をしています。


ここで、前回のおさらいをチラッとしますと、

  <a href=”./108-2.php?hensuu01=あいうえお”<ここをクリックしてみてください</a>

という形式で、HTML文を書くと、「ここをクリックしてみてください」という箇所にハイパーリンクが張られ、ユーザーがそのリンクをクリックすると、「hensuu01」という名前の変数に「あいうえお」という値(文字)が代入され、「108-2.php」というPHPプログラムに変数の内容を渡すことができることをお話しました。


一方の、データ(文字・数値)を受け取る側である「108-2.php」では

——————————
<?php

$hensuu02 = $_GET["hensuu01"];

print ($hensuu02);

?>
——————————

となり、「 $_GET[”hensuu01″」という形式で、上記の「hensuu01」の中身(「あいうえお」)を取り出し、「$hensuu02」という名前の変数に代入しています。


最後は「print ($hensuu02);」という関数を用いて、「$hensuu02」の中身にある「あいうえお」という文字をブラウザ上に表示することになります。

109-1

以上が、前回のおさらいの内容となります。


■ ファイル名一覧に、ファイル名を含んだリンクを生成する ■

そこで、いよいよ本題です。

以前の話ですが、とあるフォルダにあるファイル名一覧を表示するPHPプログラムをご紹介しました。

——————————————————————–
<?php

$dir_file = opendir( ‘./’ );

while( $file_name = readdir( $dir_file ) ){
print “<a href=’./107-3.php’>”.”{$file_name}”.”</a>”.”<br>”;
}

closedir( $dir_file );

?>
——————————————————————–

このPHPプログラムを実行すると(ブラウザからアクセスすると)、ブラウザの画面には、ファイル名の一覧がハイパーリンクと共に表示され、それをクリックすると、「107-3.php」というPHPプログラムが起動ることをお話しました。


その時には、「107-3.php」というPHPプログラムというかファイルが存在しないので、ブラウザの画面にはエラー表示しかされません。


ここで、上でお話した内容を合体させるのです。


結論としては、

———————————————————————————————-
<?php

$dir_file = opendir( ‘./’ );

while( $file_name = readdir( $dir_file ) ){
print “<a href=’./109-2.php?hensuu01=”.”{$file_name}”.”‘>”.”{$file_name}”.”</a>”.”<br>”;
}

closedir( $dir_file );

?>
———————————————————————————————-

というPHPプログラムを一例として考えてみました。

上記のPHPプログラムのキモは、ハイパーリンクの部分を、一度、バラバラに分解して、文字列を結合させる機能を持つ、「.」という記号で再構成している点です。

ここの部分で、上記のPHPプログラムが、一見、複雑に見える原因かと思います。

では、ここで、実際、このPHPプログラムを実行(ブラウザからアクセス)すると、これが、どのようにブラウザに表示されるか見てみましょう。


上記のPHPプログラムを「109-1.php」という名前で、「C:\Inetpub\wwwroot\php」フォルダに保存します。

109-2


そして、ブラウザのアドレス欄に「http://localhost/php/109-1.php」と入力すると、ハイパーリンクが張られたファイルの一覧が表示され、

109-3


それぞれのリンクの上にマウスを重ねると(クリックはしないで下さい!!)、ブラウザの左下に「http://localhost/php/109-1.php?hensuu01=(該当する)ファイル名」と表示されることが分かると思います。

109-4


これで、「109-2.php」というPHPプログラムに、該当するファイル名を渡すことができます。


これで、今回の一連のお話の山場は越えました。

次に、ファイル名を渡された「109-2.php」では、どのような処理をするかというと。。。。

実を言うと、ず~~~~~と以前にこのメルマガで登場したPHPプログラムを流用することになります。


なのですが。。。このままお話を続けると、また非常に長くなってしまうので、この続きは次回、ということでご了承願います。

。。。続く


PHP超入門 (52)

0
Filed under PHP超入門, PHP超入門:中級編

■ 前回までのまとめ ■

さて、初めにもお話しましたように、メルマガの発行が、しばらく間が空いてしまったので、恐らく、今までの話の内容は、(多分?)スッカリ頭の中にないんじゃないかと思います。
(本当にすみません。。。)

で、ここで今までの話の流れを振り返ってみたいと思います。

いままでの、PHPプログラムの目的は、

「サーバーのハードディスクにある、文章(テキスト)ファイルをブラウザ上のフォームに呼び出して、文章(テキスト)を自由に編集した後、再び、サーバーのハードディスクに保存する」


ということを、ひたすら求めてきました。

今年の前半での話では、その一応の決着をみたのですが、チョットそれでは使い勝手も悪く、実用的ではありませんでした。
(詳しい内容は省略します)


そこで、もっと実用的にするために、

  1. PHPのプログラムで、サーバー上の、あるフォルダに保存してあるファイルの一覧を、ブラウザ上に表示させる

  2.       ↓

  3. その表示されたファイルにはひとつひとつにリンクが張られており、そのリンクをクリックすると、文章(テキスト)の内容がフォームに呼び出される。

  4.       ↓


  5. ユーザーはそのフォーム上で、自由に文章(テキスト)の内容を変更することができる

  6.       ↓


  7. その編集した文章(テキスト)を再びサーバー上のハードディスクに保存する

という流れを追及している最中でした。

そして、前回の最後では、サーバーの「C:\Inetpub\wwwroot\php」フォルダの中身が次のようになっている場合、

108-1


次のPHPプログラム「107-2.php」

——————————————————————–
<?php

$dir_file = opendir( ‘./’ );

while( $file_name = readdir( $dir_file ) ){
 print “<a href=’./107-3.php’>”.”{$file_name}”.”</a>”.”<br>”;
}

closedir( $dir_file );

?>
——————————————————————–


を実行する(ブラウザのアドレス欄に「http://localhost/php/107-2.php」と入力する)と、フォルダにあるファイルの一覧が表示され、それぞれのファイル名の下にはリンクが張られています。

108-2


ただし、ここまでの状況ですと、実際にクリックしてみると分かると思いますが、リンク先は「107-3.php」となっており、ブラウザ上では「ページが見つかりません」というエラーメッセージが表示されてしまいます。

108-3


理由は、当然のこととなりますが、「107-3.php」というファイルは、まだ作っていないのですから。。。


以上が、前回までのお話になりますが、私個人としては、未だ作っていない「107-3.php」の内容を、なんとか工夫して、うまくやりたいナ~、というのが本音なのです。


■ ちょっと横道にそれます ■

ここで、今までの話は、キレイサッパリ忘れて、ちょっと横道に逸れたPHPプログラムを紹介します。
(ただし、これは後々、上の話と絡まってきます←予告)


まず、以下のような簡単なHTML文をメモ帳等でサクッと作ってみます。

—————————————————————————-
<html>
<head>
<title>PHPのテスト</title>
</head>
<a href=”./108-2.php?hensuu01=あいうえお”>ここをクリックしてみてください</a>
</body>
</html>
—————————————————————————-


これを、「C:\Inetpub\wwwroot\php」フォルダに、例えば「108-1.htm」という名前で保存します。

108-4


次に、以下のような、チョー簡単なPHPプログラムを書きます


——————————
<?php

$hensuu02 = $_GET["hensuu01"];

print ($hensuu02);

?>
——————————


このPHPプログラムを、同じく「C:\Inetpub\wwwroot\php」フォルダに、「108-2.php」という名前で保存します。

108-5


さて、ここで実験です。

ブラウザを立ち上げて、アドレス欄に「http://localhost/php/108-1.htm」と入力してください。


そうすると、「ここをクリックしてみてください」という一行のみの、非常にシンプルな画面が表示されると思います。

108-6


で、ここは素直に、クリックすると、画面が切り替わり、ブラウザには「あいうえお」と表示されます。

108-7


勘の良い方は気が付いたかと思いますが、上記HTML文の中に埋め込まれている、「108-2.php?hensuu01=あいうえお」の「?」のあとに指定されている文字列が、「108-2.php」に渡されて、「108-2.php」はその渡された文字列を表示しているのです。


この場合、一種の変数である「hensuu01」はユーザーの方で自由に指定できますし、「あいうえお」の部分もユーザーで自由に指定できます。


ここで、私が何を言いたいのかというと、このメルマガの前号までは、いろいろな値(数値・文字列)をPHPプログラムに渡す場合、HTML文のフォームに入力して、入力ボタンを押さなければ、それらの値は、PHPプログラムに渡し、いろいろな処理ができませんでしたが、ここでは、新たに、PHPプログラムに、いろいろな値(数値・文字列)を渡す方法として、「リンクに埋め込む」という方法もある、ということを言いたかったのです。


ここで、話は、さらに横道に逸れますが、何かのファイル名のあとに「?」があり、その後ろに、何か意味不明の文字列があるのを、多分、あなたは(意識はしていないけれども)しょっちゅう、目にしているはずです。


それは、「Yahoo!」や「Google」の検索エンジンです。


「Yahoo!」

108-8


「Google」

108-9


いずれも、ブラウザのアドレス欄には、「?」の後に、意味不明の文字列が並んでいますが、これは、ユーザーが入力した検索語が、Yahooの場合は「serch」という名前のプログラム、Googleの場合も「search」というプログラムに渡されて、いろいろな複雑な処理を行っているのです。


あと、もう1つ横道に逸れたついでに。。。

よく、迷惑メールの中に、アドレスが書いてあって、そのアドレスの中に、上で説明したように、「?」で続く意味不明の文字列がある場合には、それは絶対にクリックしてはいけません!!。

その「?」を含むURLが、悪意を持っている場合(大概の場合そうですが)、あなたの個人情報(例えば携帯の番号)が抜かれてしまう可能性がありますので、注意が必要です。


。。。という訳で、なんか、いつものように話は長くなってしまいましたが、この続きは、次回へ、ということで、ご容赦ください。

PHP超入門 (51)

0
Filed under PHP超入門, PHP超入門:中級編

■ 前置き ■

さて、前回、サーバーのフォルダに保存してあるファイルの一覧を表示するPHPプログラム「105-1.php」を紹介しました。


「105-1.php」
——————————————-
<?php

$dir_file = opendir( ‘./’ );

while( $file_name = readdir( $dir_file ) ){
print “{$file_name}<br>”;
}

closedir( $dir_file );

?>
——————————————-


でも、このままでは、単にブラウザの画面にはファイル名が一覧表示されるだけで、何の役にも立たないのは前々回、お話した通りです。

105-2


できれば、このメルマガで以前、紹介したように、ファイルの内容をブラウザのフォーム上に呼び出し、自由に修正した後、再びサーバーのハードディスクに保存する、ときたいところです。


さて、その時用いたのは、以下のような、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>
—————————————————————–


このPHPプログラムの流れを簡単にお話すると。。。

<?php ~ ?>で囲まれたPHPプログラムで、サーバーのハードディスク上に保存された文章(テキスト)ファイル「096-2.txt」の中身を取り出し、それを変数「$text01」に読み込む

  ↓

次に、HTML文に、変数「$text01」を埋め込み、ブラウザのフォーム上に「096-2.txt」の中身を表示する


といった感じになります。

098-2


ここでは、上に紹介したPHPプログラムを何とか応用してみたいと思います。
(あくまでも一例です)


■ チョット遠回りですが、少しイタズラ ■

さて、チョット遠回りになるかもしれませんが、ここで、PHPプログラム

——————————————-
<?php

$dir_file = opendir( ‘./’ );

while( $file_name = readdir( $dir_file ) ){
print “{$file_name}<br>”;
}

closedir( $dir_file );

?>
——————————————-

に、ある細工をします。


次のように

——————————————————————————-
<?php

$dir_file = opendir( ‘./’ );

while( $file_name = readdir( $dir_file ) ){
print “<a href=’http://www.yahoo.co.jp’>”.”{$file_name}”.”</a>”.”<br>”;
}

closedir( $dir_file );

?>
——————————————————————————-

という具合に、「print “{$file_name}
“;」の部分に何かを書き足します。
(大体、想像はつくと思いますが。。。)


で、これを「107-1.php」の名前で「C:\Inetpub\wwwroot\php」フォルダに保存します。
107-1


そうして、ブラウザを立ち上げアドレス欄に「http://localhost/php/107-1.php」と入力すると、初めにお話した例と異なり、各ファイル名の下にはリンクが表示され、

107-2


それらをクリックすると、Yahoo! japanのホームページが表示されるかと思います。


■ 次は本番の前フリ ■

上記の例のようにPHPプログラムを書くと、表示されたファイル名にリンクがはられ、そのリンクをクリックすると指定したファイル(この場合にはURL)が表示されることが分かったかと思います。


そこで、次は、上の例を応用して、次のように書いてみるとします。


——————————————————————–
<?php

$dir_file = opendir( ‘./’ );

while( $file_name = readdir( $dir_file ) ){
print “<a href=’./107-3.php’>”.”{$file_name}”.”</a>”.”<br>”;
}

closedir( $dir_file );

?>
——————————————————————–

これを「107-2.php」の名前で「C:\Inetpub\wwwroot\php」フォルダに保存し、

107-3


ブラウザのアドレス欄に「http://localhost/php/107-2.php」と入力すると、上記の例のように、各ファイル名の下にはリンクが張られていることが分かります。

107-4


ただ、今のままですと、「107-3.php」というファイルは作ってないので、リンクをクリックしても、「ページが見つかりません」というエラーメッセージが出てしまいます。


私が何で、こんなお話をしているかというと、実は、この各ファイル名に張られたリンクをクリックすることにより、今はまだない「107-3.php」、すなわちPHPプログラムでクリックしたファイルの中身を表示させるようにしたい、という目論見があるからです。(マァ、あくまでも一例ですが。。。)


さて、この目論見、果たしてうまくいくのでしょうか?

書いている私自身も自信がないのですが。。。


と、いう訳で、いつものように、非常に長くなってしまったので、一応、今回は区切りのよい、ココマデということでご容赦ください。


続きは、次号にて。。。

PHP超入門 (50)

0
Filed under PHP超入門, PHP超入門:中級編

■ 前置き ■

前回、PHPプログラム「105-1.php」を保存したフォルダにある複数のファイルを一覧表示するプログラム

105-1

「105-1.php」
——————————————-
<?php

$dir_file = opendir( ‘./’ );

while( $file_name = readdir( $dir_file ) ){
print “{$file_name}<br>”;
}

closedir( $dir_file );

?>
——————————————-

を最後に紹介しましたが、今回は、それについてのやや詳しい内容のお話です。

まず初めに、1行目の「$dir_file = opendir( ‘./’ )」の部分です。

ここで、新しい関数「opendir()」関数が登場します。

この、「opendir関数」の機能は「指定したディレクトリ(フォルダ)を開く」というもので、

  open・・・「開く」
  dir→directory・・・ディレクトリ(フォルダ)

という具合に、英語的に説明すると分かり易いんじゃないでしょうか?


今回の場合、「opendir( ‘./’ )」と「()」の中に「./」と書いてありますが、これは、(ホームページなどを作ったことがある人は分かると思いますが)「105-1.php」を基点として、同じフォルダにあるもの、ということを意味しています。

例えば、これが「../」となれば、「105-1.php」を基点として、「105-1.php」がある1つ上のフォルダとなります。

で、結局のところ、「$dir_file = opendir( ‘./’ );」という一文で、「105-1.php」がある同一フォルダのファイルを全て、変数「$dir_file」に代入することになります。

当然のことながら、変数「$dir_file」には、複数の要素が代入されることを憶えておいてください。


■ 「readdir()」関数 ■

次に、4行目のやや複雑な文の中にも新しい関数を使っています。

それが、「readdir()」関数です。

「readdir()」関数の機能は、「()」の中に書かれた変数の中から、ファイル名だけを、実行する度に、順次呼び出します。

ここでは、最初の行で、「$dir_file = opendir( ‘./’ );」と、「105-1.php」がある同一フォルダのファイルを全て代入した変数「$dir_file」を使い、「readdir( $dir_file )」と書くことにより、「105-1.php」がある同一フォルダにあるファイル名を順次呼び出すことになります。


当然、変数「$dir_file」の中に含まれるファイル名は有限個ですから、全て読み出した後は、「エラー」となります。


■ while文 ■

これは、ず~~~~~と以前にこのメルマガでお話した、「while」文を使っています。

ここで、やや模式的に書くと

 while(条件A){
  処理B
 }

となり、この場合、「条件Aが成り立っている場合は、処理Bを繰り返す」ということになります。


今回の場合、

while( $file_name = readdir( $dir_file ) ){
print “{$file_name}<br>”;
}

となっていますが、上記「条件A」にあたる部分が、

  $file_name = readdir( $dir_file );

と、readdir関数により呼び出されたファイル名を変数「$file_name」に代入します。

で、今回の場合は、「変数「$file_name」にreaddir関数により、ファイル名が読み込まれる間は」と解釈することになります。


上でも書きましたように、全てのファイル名を読み出した後は、「エラー」となるので、このエラーとなった時点で、処理Bは自動的に終了となります。


そして、この処理Bは今回の場合、

  print “{$file_name}
;

となり、読み出したファイル名と改行コード(”
“)をブラウザに出力する、という処理になります。


■ closedir()関数 ■

そして、最後の、「closedir( $dir_file );」です。

ここでも新しい関数、「closedir()」関数が使われています。

この関数の機能は、「指定したディレクトリ(フォルダ)を閉じる」というものです。

  close・・・閉じる
  dir→directory・・・ディレクトリ(フォルダ)

という具合に、これも英語的に説明すると分かり易いんじゃないでしょうか?


プログラムの初めに、「$dir_file = opendir( ‘./’ )」と、ディレクトリ(フォルダ)を開きましたので、ここでは、お行儀よく、キチンと「開けたものは閉める」という目的で使用します。


ここで、気を付けるのは、あくまでも「closedir( $dir_file );」と書き、「closedir( ./ );」ではないことに注意してください。


以上、「105-1.php」というphpプログラム

「105-1.php」
——————————————-
<?php

$dir_file = opendir( ‘./’ );

while( $file_name = readdir( $dir_file ) ){
print “{$file_name}<br>”;
}

closedir( $dir_file );

?>
——————————————-

の各所についてお話してきましたが、これを実行することにより、「105-1.php」が保存してあるフォルダにあるファイルの一覧がブラウザに表示されることは、前回、お示しした通りです。

105-2


でも、これでは、ファイル名が一覧表示される「のみ」で、あとは何も操作することは出来ません。

ここは、是非とも、表示された各ファイル名にリンクをはって、そのリンクをクリックすることによりファイルの中身を表示・修正したいものです。

そこで、これについて、これから考えてみたいと思います。


それでは、次回に続く。。。

PHP超入門 (49)

0
Filed under PHP超入門, PHP超入門:中級編

■ 前置き ■

前回の最後に、今までの総まとめ?のPHPプログラムとして、自分の好きなファイル名でサーバーのハードディスク上にテキスト(文章)ファイルを保存するPHPプログラムの1例を示しました。


すなわち、


(HTMLフォーム)
————————————————————–
<html>
<head>
<title>入力用フォーム</title>
</head>
<body>
<form action=”103-2.php” method=”post”>
ファイル名<br>
<INPUT size=”20″ type=”text” name=”title01″>.txt<br>
<br>
内容<br>
<TEXTAREA rows=”10″ cols=”15″ name=”content01″></textarea><br>
<input type=”submit” name=”bottun01″ value=”入 力”>
</form>
</body>
</html>
————————————————————–

103-2


というフォームから受け取ったファイル名と、そのテキスト(文章)の中身を


—————————————————————
<?php

$hensuu01 = $_POST["title01"];

$hensuu02 = $_POST["content01"];

$hensuu03 = “C:\\inetpub\\wwwroot\\php\\” . $hensuu01 . “.txt”;

$file = fopen($hensuu03,”w”);

fwrite($file,$hensuu02);

fclose($file);

print(”書き込み終了しました。”);
?>
—————————————————————


というPHPプログラムで実際にサーバーのハードディスク上に保存する訳です。


上のPHPプログラムはPCのブラウザで実行可能ですが、例えば、下の例のように、単純なHTML文の中に埋め込んでしまえば、携帯からでも実行することができます。


———————————————————-
<html>
<head>
<title>書き込み終了</title>
</head>
<body>

<?php

$hensuu01 = $_POST["title01"];

$hensuu02 = $_POST["content01"];

$hensuu03 = “C:\\inetpub\\wwwroot\\php\\” . $hensuu01 . “.txt”;

$file = fopen($hensuu03,”w”);

fwrite($file,$hensuu02);

fclose($file);

print(”書き込み終了しました。”);
?>

</body>
</html>
———————————————————-


この場合、あなたが持っている携帯の表示幅に合わせて、HTML文のテキストボックスの幅を調整する必要がありますが、このようにすれば、出先から携帯だけで、サーバーとした事務所(自宅)のパソコンにガンガンいろいろな文章を保存していくことができます。


では、その後、保存したデータをどうするか?です。

これは、人によって様々でしょう。

「とりあえずサーバーに保存できればイイヤ。その後の処理は、事務所(自宅 )に戻ってからにするから。。。」

という方はここで話は終わりになってしまいます。


一方、

「イイエ、私の場合は、気が付いた時に、サーバーに保存したデータを再び呼 び出して、修正・保存したい」

という方もいるでしょう。


そんな訳で、これから、話の都合上、後者の方の場合についてお話したいと思
います。


まずは、ファイルをがんがんサーバー上に保存して、ファイルが沢山ある場合、どのようなファイルが保存されているか、そのファイルたちを一覧形式で見たいところでしょう。。。

で、その方法です。


■ サーバー側の設定で一覧表示させる ■

これは、ず~~~~~~~と前にお話した事なのですが、サーバーの設定により、フォルダに保存されているファイルの一覧を取得できるお話をしました。

ズバリ、この方法を使うのです。

そうすれば、フォルダに保存されているファイルが一覧表示され、見たいファイルのリンクをクリックすれば、ファイルの中身を見ることができます。

コレ、一番手っ取り早く単純な方法です。

ただ、この方法の唯一最大の難点は、保存されているファイルの中身を「見るだけ」であり、修正・保存することができません。

というか、そんな事が可能になっていたら、世にある全てのホームページが悪戯されてしまいます。


そんな訳で、何とか別の方法を考えて、ファイルの一覧を表示させ、その中身を再びブラウザのフォーム上に呼び出し、修正・保存したいところです。

で、それをPHPのプログラムを組んで何とか実現したいと思います。


■ 先ずは、ファイルの一覧表示 ■

上にも書いたように、ブラウザ上にファイルの一覧を表示させ、そのリンクをクリックすると、ファイルの中身がフォーム上に自動的に呼び出される、というPHPプログラムを組む訳ですが、今の段階で、イキナリそれを紹介すると、あなたの目には非常に複雑に映り、思わす眩暈を起こしてしまうかもしれませんので、先ずは、最初の段階として、ファイルを一覧表示させるPHPプログラムを考えてみたいと思います。


ここでは、今まで扱っていなかった「関数」というものが、新たにいくつか出てきます。


イロイロ前置きを言っても仕方がないので、まずは、結論となるPHPプログラムの紹介です。
(あくまでも一例です)


これも、ごく短いPHPプログラムですが、こんな感じです。


——————————————-
<?php

$dir_file = opendir( ‘./’ );

while( $file_name = readdir( $dir_file ) ){
print “{$file_name}<br>”;
}

closedir( $dir_file );

?>
——————————————-

これを「105-1.php」というファイル名で、「C:\Inetpub\wwwroot\php」フォルダに保存します。

105-1


そして、ブラウザのアドレス欄に、「http://localhost/php/105-1.php」と入力すると、見事に?そのフォルダに保存してあるファイルの一覧がブラウザに表示されると思います。

105-2


上のPHPプログラムは非常に単純なものですが、ず~~~~~~~と前にお話したことのあるPHP構文と、いくつかの新しい関数があります。


それについて、説明したいと思いますが、それをこれからお話するとなると、また、異常に長くなってしまいますので、これについては、次回に、ということでご勘弁いただきたいと思います。

それでは、次回に続く。。。