Принудительная загрузка в php [закрыто]
Я пытаюсь создать страницу принудительной загрузки, чтобы браузеры не открывали файлы, которые следует загрузить. Проблема в том, что загруженный файл имеет 0 байт и, следовательно, непригоден для использования. Что не так с моим кодом?
$file = "http://gh0stsec.zxq.net/background1.jpg";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".basename($file));
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
header("Content-Description: File Transfer");
@readfile($file);
exit();
2
Author: Franz Payer, 2012-02-19
2 answers
Проверка:
header("Content-Length: ".filesize($filename));
Я думаю, что это должно быть:
header("Content-Length: ".filesize($file));
3
Author: Gabriel Sosa, 2012-02-19 15:04:13
Я думаю, что у вас возникнет проблема с filesize
, так как это не локальный файл (если это так, используйте относительный путь). Content-Type
заголовки всегда немного странные для меня, но во всех примерах, которые я читал, force-download
всегда был запасным вариантом. В любом случае, я сделал это, и, похоже, это сработало:
<?php
$file = file_get_contents('http://gh0stsec.zxq.net/background1.jpg');
if ($file)
{
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=background1.jpg');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . strlen($file));
ob_clean();
flush();
echo $file;
}
else
{
echo 'error';
}
?>
1
Author: Steve, 2012-02-19 15:22:13