ドリリウム

趣味をとことん突き詰めるブログ。高知 / 釣り / DIY / バイク / 車 / 家具制作 / アクアリウム / BMW / 地方移住 / ルノー・ルーテシア

【PHP】ファイル読み書きで「read of 8192 bytes failed with errno=9 Bad file descriptor」エラー

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);

▼IT系の転職なら

▼誰かにプログラミングを教えてみませんか?

にほんブログ村 釣りブログへ
にほんブログ村

▼釣り具の宅配買取なら