2017-03-19 12 views
3

イメージファイルを読み込もうとする古いコードがあります。 (JPEGをPHPで、なぜimagecreatefromjpegが "jpegファイルではない"という致命的なエラーに変わったのですか?

$res = @imagecreatefromjpeg($sourceName); 
if ($res === false) 
    $res = @imagecreatefromgif($sourceName); 
if ($res === false) 
    $res = @imagecreatefrompng($sourceName); 
if ($res === false) { 
    $err[] = 'Cannot load file as JPEG, GIF or PNG!'; 

これは長い時間のために完璧に動作するために使用されるが、最近のサーバ移行後には、PNGファイルを使用するときに動作を停止:それはそれが何であるかの種類を知っていないので、コードはすべて、それらをしようとしますファイルは正常に動作します)。ラインがエラー抑制演算子を有する

Fatal error: imagecreatefromjpeg(): gd-jpeg: JPEG library reports unrecoverable error: Not a JPEG file: starts with 0x89 0x50

ので、スクリプトは単に実行を停止し、空の応答とHTTP 200を返した:調査は、非常に最初の行は、致命的なエラーが発生していることが明らかになりました。

私が理解できないことは...いや...どうして...なぜ...いつから...?

でも、official documentationでも、ファイルをロードできないときにはFALSEが返され、@演算子の構造体もそこに表示されます。ウェブ上で「JPEGファイルではない」という致命的なエラーは何もないと私は気づくことができません。どこでもそれが言及されている、それはいつものように警告です。なぜ私は今や致命的なエラーに遭うのですか?

私のPHPは5.6.30です.GDにはすべてがあります。

+0

あなたは[this](http://stackoverflow.com/a/10668155/2518525)と[this](http://stackoverflow.com/a/3901885/2518525)を見てみる価値があるかもしれません(*バグのJPEG画像を扱う*)。 – Darren

+0

@ダーレン - これらのリンクの両方は、失敗した場合に表示される**警告**について述べています。抑制され無視される警告。私は**致命的なエラー**を代わりに得る。また、私はすでにそれがバギーjpegではないことを述べた - それはPNGであり、私はこの機能が失敗すると予想しています - ちょうど致命的ではありません。 –

答えて

3

私は自分の質問に答えることができると思います。それは既知のバグです。見る。 PHPのバグ#73514#73479。実際にはlibgdにあり、reported there tooとなっています。 A fix was made last Novemberしかし、まだそれをリリースにしていません。そう、ええええええ、運がありません。代わりにgetimagesize()を使用して最初にタイプを判別し、代わりに適切な関数を使用しようとします。真に破損したファイルの場合でもそれはまだ助けにならないが、それは何かだ。

関連する問題