0

画像のサイズを動的に変更してブラウザに送信するコードがあります。

しかし、それは正しく動作しません...ブラウザの代わりにファイルに画像を出力するように依頼した場合のみ。

この問題は実サーバーでのみ発生するため、問題は私のコードではないと思います。私のコンピューターでは、完全に機能しています。

コード:

$img = $_GET['img'];

ini_set('allow_url_fopen', 'on');

$info = getimagesize($img);
header('Content-type: '.image_type_to_mime_type($info[2]));
Fotos::redimensiona($img, null, Fotos::MINIGAL_WIDTH, Fotos::MINIGAL_HEIGHT, false);

Fotos::redimensiona():

//[...] a whole bunch of code calculating dimensions, they just works
// $funcImage is like 'imagejpeg'/'imagepng'/'imagegif', depends on file
if ($arquivo) {
    $funcImage($thumb, "$final.$ext");
    return "$final.$ext";
}
else {
    $funcImage($thumb);
}

注意:ローカル開発では機能しますが、リモート Web サーバーでは機能しません。

[編集]
行 にコメントを付けるheaderと、バイナリ コードが出力されます。予想どおり、元の画像を変更すると、このコードが変更されます。
しかし、headerFirefox では、ページの URL ( などhttp://www.sabianoar.com.br/novosabia/inc/phpImg.php?img=awful_escaped_long_path.jpeg)が表示CTRL+Iされ、そうすると、サイズが 0x0 の JPEG であり、10kb のように表示されます。
Opera は空の画像を表示し<img>ますsrc

[EDIT2] 出力を保存してから開こうとすると、EyeOfGnome は「JPEG ファイルではありません: 0xef 0xbb で始まります」と表示します (通常は .jpeg ファイルに保存されます)。

4

4 に答える 4

3

コードは最初にBOMを出力します。リモート Web サーバーからコードを開き、(xxd などの 16 進エディターを使用して) の前に BOM が含まれているかどうかを確認します<?php。表示しているファイルに BOM が含まれていない場合は、インクルードに含まれている可能性があります。

一部のエディターは BOM を追加し、apache はそれを出力します。それがおそらくあなたのイメージを壊すものです。

于 2009-08-28T12:36:29.993 に答える
0

ローカル マシンとサーバーを比較してみましたか? phpinfo(); の出力を比較してください。それらは異なるプラットフォームですか?

于 2009-08-28T13:54:21.800 に答える
0

これはおそらく原因ではありませんが、なぜ の結果をエコーし​​ているのFotos::redimensional()ですか? などの関数はimagejpeg()すべて、画像を出力した後に bool (画像データではなく) を返すため、画像の最後に「1」を出力することになります。これをテストしたところ、jpeg画像が壊れないようです。

于 2009-08-28T07:58:58.543 に答える
0

イメージが配置されているイメージ/ディレクトリの権限を確認してください。

于 2009-08-28T05:01:39.430 に答える