【PHP】file_put_contents関数で保存した画像が壊れる原因
file_get_contents関数で任意の画像のファイルデータを取得し、そのデータをfile_put_contents関数に渡してサーバー内に画像を保存するプログラムを実行したのですが、保存した画像をブラウザで確認したところ
画像ファイル"http://~~~"は壊れているため、表示できませんでした
というエラーが出て困ってしまいました。
ここでは「なぜ画像が壊れるのか?」に対処した流れを書いておきたいと思います。
エラーの対処
最初「file_get_contents関数で画像のデータが全部取れてないから?」と疑ったのですが、データ量を確認したところ間違いなく取得できていたのでfile_put_contents関数が原因だと思い、あれこれ調べていました。
リファレンスを見てもそれっぽい情報はないのでさらに調べていたのですが、「別のサーバーでもやってみよう!」と思い立ち、やってみたら問題なく画像が保存できました。
試行錯誤
この段階でPHPのバージョンを調べるべきだったのですが、なぜか「php.iniの設定とかが違うからダメなんじゃね?」と考え、php.iniに記述してた設定を一つずつしらみつぶしに原因を探りました。
あっちのサーバーには「output_buffering」が「On」になってるけどこっちは「Off」だ。これが原因か!?
などわけのわからないことをやってかなりのストレスに・・・
原因
原因は凡ミスすぎて恥ずかしいレベルですが、単純にPHPのバージョンが原因でした。
上記プログラムはずっと放置してたサーバーで実行したのですが、放置していただけあってPHPのバージョンが「5.2」でした。
そのためPHPのバージョンを「5.4」にバージョンアップしたらfile_put_contents関数で画像が壊れることなく保存できました。
まずはPHPのバージョンを確認!
前回もエラーで困ったときにphp.iniをみてあくせくしたことがあるのですが、そのときもPHPのバージョンが原因でした。
今回もPHPのバージョンが原因だったので、今後何らかのエラーが発生した場合はまずはPHPのバージョンを確認することから始めてみたいと思います。
あわせて読んでほしい!
コメント
まだコメントはありません。