今回は、textファイルを読み書きすることについて書きます。
なので、テキストファイルを扱います。
テキストファイルはh、テキストエディタで読み書きでできる
ファイルの事です。フォームを設置して、ユーザーにファイル名を
入力させ、ファイル名が送信されたら指定されたファイルを読み込みます。
サンプルコードの実行結果はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<!doctype html> <html> <head> <meta charset="utf-8"> <title>テキストファイルを読み込んでみる。</title> <link rel="stylesheet" href="../style.css"> </head> <body> <form action="" method="post"> ファイル名:<input type="text" name="title"><br> <textarea rows="10" cols="50" name="content"> <?php if( isset($_POST["title"] ) && file_exists($_POST["title"])){ //指定されたファイルを読出しモードで開く $fp = fopen($_POST["title"] ,"r"); while( !feof($fp) ){ /* ファイルの終端に達するまで 1行ずつ読み込んで出力する */ echo fgets($fp); } //ファイルをクローズする fclose($fp); } ?> </textarea><br> <input type="submit" value="読込" > </form> </body> </html> |
ファイルは次の順序で処理します。
1.ファイルをオープンする
2.ファイルを読み込む又は書き込む
3.ファイルをクローズする
ファイル名のオープンはfopen()関数を使います。
この関数にはファイル名・オープンモードの2つの引数を渡します。
今回は読出しを行うモードで"r"を設定しています。
$fp = fopen($_POST["title"] ,"r");
fopen()関数に指定できるオープンモードには、
以下のようなものがあります。
オープンモード | 意味 |
---|---|
"w" | 書き込み用にテキストファイルをオープン |
"r" | 読み込み用にテキストファイルをオープン |
"a" | 追記用にテキストファイルをオープン |
"w+" | 更新のため、書き込み用にテキストファイルをオープン |
"r+" | 更新のため、読み込み用にテキストファイルをオープン |
"a+" | 更新のため、追記用にテキストファイルをオープン |
feof()関数を使うと、ファイルの終端を判別することができます。
そこにwhile文文を使い、fgets()関数で1行ずつ読み込みます。
サンプルコードだと、textareaタグ内に出力されるので、テキストエリア内に
ファイルの内容が表示されます。
while( !feof($fp) ){
echo fgets($fp);
}
最後に、fclose()関数でファイルをクローズします。
この処理を忘れると、不具合が起きることがあります。
fclose($fp);
ファイルをオープンするときに、file_exists()関数を
使ってファイルが存在するかを判定しています。
関数名 | 戻り値 | 内容 |
---|---|---|
file_exists(string $filename) | boolean | ファイルの存在を調べる |
fopen(string $filename,string $mode) | resource | ファイルをオープンする |
feof(resource $file) | boolean | ファイルが終端か調べる |
fgets(resource $file) | string | ファイルから1行読み込む |
fclose(resource $file) | なし | ファイルをクローズ |
テキストファイルから1行読み込むにはfgets()関数を使う。
テキストファイルに書き込む
今回は、テキストファイルに文字列を書き込んでみましょう。
サンプルコードの実行結果はこちら
ファイルを書き込む場合には、fopen()関数の2番目の
引数を"w"(書込み)とします。テキストボックスから送信された内容を、
fputs()関数で1行ずつ書き出しています。
関数名 | 戻り値 | 内容 |
---|---|---|
fputs(resource $file) | string | ファイルに1行書き込む |
テキストファイルに1行書き込むには、fputs()関数を使う。
ファイル名入力時の注意点
ファイル名をユーザーに入力させる場合には、
注意しなければならないことがあります。
重要なファイルを読み出したり、書き込まれたりしないように
注意しなければいけません。実際にこうしたファイルを名を
入力させるには、ファイル名を限定する必要があります。