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の引数に指定するファイルへのパスが正しく、アクセス可能であること
といったことに気を付けていればよいので、このエラーの解消は、そんなには難しくない、と思う。