PHPエラー「PHP Warning: fwrite(): supplied argument is not a valid stream resource」の原因と解決方法

PHPでファイルに書き込もうとすると、

PHP Warning: fwrite(): supplied argument is not a valid stream resource

といったエラーになり、書き込みに失敗する時がある。

この場合、書き込み対象のファイルを「開く」(fopen)ことにも失敗していることがほとんどだと思う。

《プログラム例》「/home/nobuneko/test.php」ファイルの中身(一部)

27行目:$file_path = "/home/nobuneko/cat/test.txt";
28行目:$file_contents = fopen($file_path,"w+");
29行目:fwrite($file_contents,$new_contents);
30行目:fclose($file_contents);

《実行例》
PHP Warning: fopen(/home/nobuneko/cat/test.txt): failed to open stream: No such file or directory in /home/nobuneko/test.php on line 28
PHP Warning: fwrite(): supplied argument is not a valid stream resource in /home/nobuneko/test.php on line 29
PHP Warning: fclose(): supplied argument is not a valid stream resource in /home/nobuneko/test.php on line 30

上記の例の場合、「/home/nobuneko/cat/test.txt」という存在しないファイルをfopenで開こうとしているが、存在しないため、エラーとなっている。

fopen(ファルオープン)に成功していたら、続くfwrite(ファイル書き込み)ではエラーにならないが、fopenに失敗しているため、無効な「ストリームリソース」を指定したことになり、fwrite、そして、fcloseにも失敗している。

したがって、PHPエラー「PHP Warning: fwrite(): supplied argument is not a valid stream resource」の原因は、fwrite実行前のfopenに失敗していることにあるので、fopenを成功させれば、問題は解決する。

fopenを成功させるには、

fopenの引数に指定するファイルへのパスが正しく、アクセス可能であること

といったことに気を付けていればよいので、このエラーの解消は、そんなには難しくない、と思う。

前へ

メール送信時のエラー「Undelivered Mail Returned to Sender〜the volume of recipient's mailbox exceeded the local limit」の原因の1つと解決方法

次へ

PHPエラー「PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING」の原因の1つと解決方法