ファイルの書き込み - PHPでファイルの読み書き・掲示板
目次
- PHPでファイルの読み書き・掲示板
- ファイルの読み込み
- ファイルの書き込み
- ファイルの読み書き(ゲストブック)
- 設定ファイルの読み書き
- CSVファイルの読み込み
- テキストエディタの作成
- アンケートシステムの作成
- 掲示板1(シンプル)
ファイルに文字列を書き込む
ファイルに対する書き込みは、読み込みのような多彩なバリエーションはありません。fopen でファイルをオープンし、fputs または fwrite でファイルに書き込み、fclose でファイルをクローズする、という流れが主なものとなるでしょう。プログラムの作成
以下のソースを入力してください。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>ファイルに文字列を書き込む</title>
</head>
<body>
<?php
// ファイルを書き込み専用でオープンする
$fp = fopen('write.txt', 'w');
// ファイルに文字列を書き込む
fputs($fp, "1行目\n");
fputs($fp, "2行目\n");
fputs($fp, "3行目\n");
// ファイルをクローズする
fclose($fp);
?>
</body>
</html>
入力が終わったら「write1.php」というファイル名で保存し、サーバにアップして実行してみてください。属性の設定
上記のプログラムを実行すると、「Permission denied」というエラーが出ると思います。これは書き込むファイルの作成が許可されていないためです。これを防ぐには以下のどちらかの解決策を取ってください。-ファイルのあるディレクトリを属性変更して「その他」に書込許可属性を与える
-空のテキストファイル「write.txt」を作成、アップし、属性変更から「その他」に書込許可属性を与える
下の方法がセキュリティ的に安全なのでお勧めです。
その後、ふたたび「write1.php」を実行し、write.txtファイルを開いて文字列が書き込まれていることを確認します。
ソースの解説
$fp = fopen('write.txt', 'w');
fopenの第2引数に「w」を指定すると、書き込み専用でオープンします。
fputs($fp, "1行目\n");
ファイルに文字列を書き込む関数です。フォームの内容を書き込む
今度は、固定の文字列ではなく、フォームから送信された文字列を書き込むようにプログラムを拡張してみましょう。プログラムの作成
以下のソースを入力してください。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>ファイルにフォームの文字列を書き込む</title>
</head>
<body>
<form method="post" action="write2.php">
<textarea name="contents" cols="40" rows="20"></textarea>
<input type="submit" value="送信">
</form>
<?php
$contents = $_POST['contents'];
if ($contents) {
$fp = fopen('write.txt', 'w');
fputs($fp, $contents);
fclose($fp);
print "書き込み完了しました。";
}
?>
</body>
</html>
入力が終わったら「write2.php」というファイル名で保存し、サーバにアップして実行してみてください。write.txtファイルを開いてフォームに書かれた文字列が書き込まれていれば成功です。ソースの解説
<textarea name="contents" cols="40" rows="20"></textarea>
フォーム部分では、contentsという名前の複数行入力テキストフィールドを作成しています。
$contents = $_POST['contents'];
if ($contents) {
まず変数 $contents にPOST変数を代入し、それが存在するときだけ書き込み処理を行ないます。つまり、テキストフィールドに何か書いてあれば書き込み処理が行なわれます。
fputs($fp, $contents);
テキストフィールドの内容を全てファイルに書き込んでいます。
print "書き込み完了しました。";
書き込み処理があったときだけ、このメッセージが表示されます。