注:否定的な反応に誘惑される前に、質問と私の取り組みをよく理解してください。どこかで私のアプローチに間違いがあれば、それを修正する機会を与えてくれます。
wordpressで実行されているサイトに小さなphpスクリプトがあります。基本的に、アップロードされた画像のサイズを変更し、強制的にサイズ変更された画像をダウンロード プロンプトとして提供します。関連ページにはダウンロードリンクがありませんのでご注意ください。スクリプトはうまく機能し、画像とすべてのサイズを変更して作成しますが、ダウンロードした画像を Windows フォト ビューアーなどの一般的な Windows ソフトウェアで開くと、「Windows フォト ビューアーはこの画像をサポートしていないため、この画像を開くことができません」という部分を除きます。ファイル形式」ですが、Photoshop で開くと、とてもきれいに表示されます。ダウンロードした画像を Firefox ブラウザー 24.0 でも開いたところ、「画像ファイル /path/to/file/」はエラーが含まれているため表示できません。
何が起こっているのかを知るために、関連する php スニペットを次に示します。必要に応じて、コード全体を記述します。調べているうちにコードの間違いを指摘していただけると助かります。
// create a new image resource to be utilized by imagejpeg
$new = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($new, $image, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height);
$filename = uniqid();
$file = 'uploads/' .$filename. '.jpeg';
imagejpeg($new, $file, 100);
$size = filesize($file);
header("Content-Type: application/force-download; name=\"" . basename($file). "\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=\"" . basename($file) . "\"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
readfile($file);
努力の更新:
最初の更新:私はこのスレッドを読み、その提案に基づいて、ob_end_clean()
前に追加しようとreadfile($file);
し、$size をコメントアウトしようとしましたが、まだ画像が破損しています。
2 番目の更新:ここのソリューションで提案されているように、以下のコードも試しました。これとは別に、ここで他の多数のスレッドを読んだ後、小さな修正も試みましたが、まだ探していることを覚えておいてください.
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
この最後の努力により、元のコードでイメージ拡張子を割り当てる方法に何か問題があるのではないかと思います。現在、私はそれを$file = 'uploads/' .$filename. '.jpeg';
間違っている可能性があるとして割り当てています。もし私がそれをどのように修正すればよいですか?