私はサーバーからファイルをダウンロードするスクリプトを持っています。しかし、ファイルがダウンロードされると、それはjpgまたはpngファイルです。私はそれを見るためにどのプログラムでも開くことができないようです。 (Windowsフォトギャラリーまたは花火)fopen()、fread()、feof()を使用してファイルをダウンロードしています...ダウンロードしたファイルが壊れています
私はビデオファイル(avi)をダウンロードするとき。私はWindows Media Playerでそれを開くことはできませんが、私はvlcメディアプレーヤーで開くことができます。
私はいつもエラーメッセージを受け取り、ファイルまたはファイルを読み込めません。
ここにコードがあります。それは信頼できるものか、おそらくfsocketopenやcurlの使用を検討すべきですか?
私は、ウェブ上でより多くの答えを探しているヘッダーを変更しようとしましたが、運が悪いです。
誰かが間違ったことを考えていますか?
chmod("extensions_img/test.jpg",0755);
$fullPath = "http://www.website_url.com/extensions_img/test.jpg";
if ($fd = fopen ($fullPath, "r")) {
$fsize = filesize("extensions_img/test.jpg");
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
switch($ext) {
case "pdf":
$ctype = "application/pdf";
break;
case "exe":
$ctype = "application/octet-stream";
break;
case "zip":
$ctype = "application/zip";
break;
case "doc":
$ctype = "application/msword";
break;
case "xls":
$ctype = "application/vnd.ms-excel";
break;
case "ppt":
$ctype = "application/vnd.ms-powerpoint";
break;
case "gif":
$ctype = "image/gif";
break;
case "png":
$ctype = "image/png";
break;
case "jpeg":
$ctype = "image/jpg";
break;
case "jpg":
$ctype = "image/jpg";
break;
case "mp3":
$ctype = "audio/mp3";
break;
case "wav":
$ctype = "audio/x-wav";
break;
case "wma":
$ctype = "audio/x-wav";
break;
case "mpeg":
$ctype = "video/mpeg";
break;
case "mpg":
$ctype = "video/mpeg";
break;
case "mpe":
$ctype = "video/mpeg";
break;
case "mov":
$ctype = "video/quicktime";
break;
case "avi":
$ctype = "video/x-msvideo";
break;
case "src":
$ctype = "plain/text";
break;
default:
$ctype = "application/force-download";
}
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-type: " . $ctype);
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
header("Content-Transfer-Encoding: binary");
header("Content-length: $fsize");
header("Cache-control: public"); //use this to open files directly
while(!feof($fd)) {
$buffer = fread($fd, 4096);
flush();
}
}
fclose ($fd);
テキストファイルでそれを実行してから、ファイルの内容を調べてください。 PHPエラーメッセージがバッファに出力されている可能性がありますので、ファイルを破棄している可能性があります。 – prodigitalson
ファイルが存在しないため、 '$ fsize'は常に' 0'です。 – KingCrunch