PHPの勉強中にファイルを読み書きする際にタイトルのエラー
「read of 8192 bytes failed with errno=9 Bad file descriptor」
が発生しました。
エラーというかNoticeなので無視しても構わないのですが、実害もあったため修正しました。
ソースコードは以下の通りです。
$fp = fopen("sample.txt", "a");
fwrite($fp, "AAAAA\n");
rewind($fp);
while($line = fgets($fp)){
echo $line."<br>";
}
fclose($fp);
ファイルを開き、末尾に追記した後ファイルポインタを先頭に移動させてファイルの中身を1行ずつ表示しています。
原因は1行目のfopenにありました。
fopenの第二引数に「a」を指定していますが、これは書き出しモードでファイルを開きます。
てっきり書き出しモード=読み込み+書き出しモードだとばかり考えていましたが、これは書き出し専用のモードです。
そのため「a」で開いたファイルを読み込もうとしたためにエラーが出るとともに読み込みも失敗していたわけです。
解決策としては引数に「a」ではなく「r+」や「a+」といった読み込み+書き出しの双方に対応したモードを選択することです。
対策したコードは以下の通りです。
$fp = fopen("sample.txt", "a+");
fwrite($fp, "AAAAA\n");
rewind($fp);
while($line = fgets($fp)){
echo $line."<br>";
}
fclose($fp);