どうもサーバーログをチェックしていると、かなり頻繁に
imagecreatefromstringがエラーを吐いていることに気づきました。
デコレーションした画像を最終的にサムネ化するため、文字列化している画像を画像ストリームに変換するところなので、本質的にはそんなに問題ある箇所ではないのですが、エラーログが鬱陶しい感じなので何とかしてみることにしました。
PHP Warning: imagecreatefromstring(): gd-png: fatal libpng error: Read Error: truncated data in [file-pass] on line ** PHP Warning: imagecreatefromstring(): gd-png error: setjmp returns error condition in [file-pass] on line ** PHP Warning: imagecreatefromstring(): Passed data is not in 'PNG' format in [file-pass] on line ** PHP Warning: imagecreatefromstring(): Couldn't create GD Image Stream out of Data in [file-pass] on line **
エラー文はこんな感じでした。
そのまま検索したところ、まさに同じ状態で困った人の投稿がありました。
php – What’s wrong with imagecreatefromstring function? – Stack Overflow
エラーが起きている時のBase64データまで保存はしていなかったので、
同じ状態なのかはわかりませんでしたが、とりあえず画像文字列のBase64エンコード・デコードで
不備があると上手くいかないことがあるらしいことはわかりました。
iconDecotterはcanvasの画像データがBase64エンコードされたものを受け取っているので、その流れで何かデータの異常が起きているとエラーが発生してしまうのでは、と推測。
そこで、サムネ作成時に上記記事のように元が正常なBase64文字列かどうかのチェックをかけるように変更しました。
とりあえず、現時点で変更以降にぱたりと同様のエラーが出なくなっているので、
上記修正でOKだったようです。
元々のデータに異常が起きている件については、ちょっと原因がわかりませんが、エラー時刻と履歴からユーザーを特定していくつか見てみたところ、結果としては問題なく利用できていたようなので、あまり気にしないことにしました。
余裕があれば、データエラーが起きているユーザーの状態を特定して改良してみたいですが、それはまた次の機会に。
コメント