Table of Contents
前回はチャットページの骨組みとなるHTMLを作りました。今回からPHPでファイルを扱う方法について解説します。
ユーザーの書き込みを保持するためにログファイル(テキストファイル)を使いますので、まずそれを扱うための準備をします。
ファイルの有無をチェックする
読み込もうとしているファイルが存在しない場合、プログラムがエラーを出力してしまいます。
したがって、そのファイルが存在しているかどうかを読み込む前にチェックします。PHPでこれを行うには file_exists を使います。実際の使うには、以下のように確認したいファイルのパスを引数として渡します。
file_exists(ファイルのパス);
関数 file_exists は、ファイルが存在した場合は true を、そうでない場合は false を返します。したがって、ファイルが存在した場合に処理を行わせたいときは、以下のように if を使います。
if (file_exists(ファイルのパス)) { // ファイルが存在した時の処理 }
ファイルがない場合に処理を行わせたいときは以下のようにします。
if (!file_exists(ファイルのパス)) { // ファイルが存在しない時の処理 }
それではこの関数を、前回作った chat.php とは別にPHPスクリプトを作って、その中で使ってみましょう。
新しいPHPスクリプトを script.php という名前で新規作成して、中身を以下のようにしてください。
<!-- script.php --> <?php $LOG_FILE_NAME = "log.txt"; if (!file_exists($LOG_FILE_NAME)) { // ファイルが存在しなかったらメッセージを表示して終了 exit("ログファイルが見つかりません。"); } echo "ログファイルが見つかりました。"; ?>
ログファイル(log.txt)が見つからなかったらメッセージを表示して処理を中断します。
PHPが動作する環境(サーバーなど)でこれを実行すると、「ログファイルが見つかりません。」と出力されると思います。
それでは、ログファイルを作った場合はどうなるでしょうか。script.php と同じディレクトリに log.txt を作ってから再度このPHPを開いてみてください。今度は画面に「ログファイルが見つかりました。」と表示されるはずです。
ファイルを自動的に作成する
先ほど log.txt を手動で追加してもらいましたが、もしファイルが存在しない場合はPHPスクリプト側で自動的に作成するようにできれば便利です。
PHPスクリプトでファイルを作成するには tocuh という関数を使います。
touch(作成するファイル名);
touch も file_exists と同様に、成功した場合は true を返します。したがって以下のように条件分岐が可能です。
if (touch(作成するファイル名)) { // 成功 } else { // 失敗 }
それではこれを、script.php に導入しましょう。PHP部分を以下のように書き換えてください。
<!-- script.php --> <?php $LOG_FILE_NAME = "log.txt"; if (!file_exists($LOG_FILE_NAME)) { if (touch($LOG_FILE_NAME)) { // ファイルの作成に成功 echo "ログファイルを新しく作成しました。"; } else { // ファイルの作成に失敗したらメッセージを表示して終了 exit("ログファイルの作成に失敗しました。"); } } ?>
先ほど作った log.txt を削除して、実際にPHPスクリプトがファイルを作成してくれるか見てみましょう。
もし以下のようなエラーが出てしまう場合は、ディレクトリの権限を見直す必要があります。
Unable to create file ファイル名 because Permission denied in エラー発生場所
このエラーは、PHPスクリプトが含まれるディレクトリにファイル書き込み権限がない場合に起こります。
このPHPスクリプトを保存しているディレクトリに 707 のパーミッションを与えてあげるとエラーが解消されると思います。ファイルの読み書きを行うPHPスクリプトを含むディレクトリは707(drwx—rwx)と覚えておきましょう。
これで、テキストファイルを読み込む準備が整いました。
次回は、このログファイルへの書き込みや読み込みを行う方法を解説したいと思います。
ピンバック: PHPで作るチャット(3) ログファイルへの書き込み | JoyPlotドキュメント
ピンバック: PHPで作るチャット(6) データ送信に関する問題の修正 | JoyPlotドキュメント