私は同様のリクエスト/質問を検索しましたが、何も私の状況に合致していないようです。PHPを使用した散発的な壊れた画像readfile
アップロードされたファイルをブラウザに送信/出力するためにPHPファイルを使用します。私はPHPファイルを "リーダー"ファイルと呼びます。 (単純化のために削除、追加のファイルタイプを持つ)読者の煮詰めバージョンは、次のとおりです。
<?php
if($_GET['upload']){ // for files uploaded via CMS uploader
$file = $site_directory . $uploads_path . $_GET['upload'];
}
if (file_exists($file)) {
header('Content-Description: File Transfer');
// JPG
if(strstr($file,".jpg"))
{
header('Content-type: image/jpeg');
header('Content-Disposition: inline; filename='.basename($file));
// OTHER FILE TYPES
}else
{
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);
exit;
}else{
echo "<p>That file does not exist.</p>";
}
?>
次の例に見るように、それは一般的に動作します。しかし、ブラウザがこのように複数の画像をロードしなければならない場合、一部の画像は読み込まれず、破損しているように見えません。実際の例はhttp://www.technotarek.com/index.php?id=25&view=gridです。最初にフォトグリッドに壊れた画像がない場合は、いくつかのハードリフレッシュを試してみてください。
これは複数のファイルや画像では信頼できない理由は何ですか?
例で画像のサイズを変更する追加のスクリプトがありますが、それは原因ではありません。私はそれを削除し、問題は残った。
その他の背景(私がこの方法を使用している理由について):当初、サーバー管理者がウェブサーバーへのアップロードを許可しなかったサイトでリーダースクリプト/ファイルを使用し始めましたが、すべてのユーザーアップロードを保存する必要がありました別のSandlotサーバー上にインストールします。 "リーダー"ファイルは、私がsandlotファイルへの直接URLが不可能なので、それらのファイルにアクセスして出力することができます。
複数のイメージを並行して読み込んでいる場合は、許可されたプロセスやメモリが不足している可能性があります(共有ホスティングの場合は、いずれにせよ)。しかし、これは間違いなく言うことは難しいです。デバッグするには、コマンドラインから並行カール要求を実行してみてください。 – mario
はい、これは共有ホスティングプラットフォーム上にあります。スクリプト内のプロセスやメモリを管理するために知っておいてもらえますか?そして/または、あなたはカールのデバッグの提案をこれ以上指針を提供できますか?どうもありがとう。 – technoTarek
スクリプトは、サーバー上の任意のファイルをうまく処理できることに注意してください。 http://example.com/script.php?upload = ../../../../../../../../seekrit.passwords'。あなたがプライベートにしたいと思っているものは何も持っていないといいですね。 –