Выходной файл PHP на диске в браузере
Я хочу использовать существующий файл для браузера в PHP.
Я видел примеры с изображением /jpeg, но эта функция, похоже, сохраняет файл на диск, и сначала вы должны создать нужный объект изображения (или я просто не понимаю его:))
В asp.net я делаю это, читая файл в массиве байтов, а затем вызываю context.Response.BinaryWrite(bytearray), поэтому я ищу что-то подобное в PHP.
Мишель
Ответы
Ответ 1
Существует fpassthru(), который должен делать именно то, что вам нужно. См. Руководство пользователя, чтобы прочитать следующий пример:
<?php
// open the file in a binary mode
$name = './img/ok.png';
$fp = fopen($name, 'rb');
// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
// dump the picture and stop the script
fpassthru($fp);
exit;
?>
См. здесь для всех функций файловой системы PHP.
Если это бинарный файл, который вы хотите предложить для загрузки, вы, вероятно, также захотите отправить правильные заголовки, чтобы появилось диалоговое окно "Сохранить как...". См. 1-й ответ на этот вопрос для хорошего примера о том, какие заголовки отправлять.
Ответ 2
Я использую этот
if (file_exists($file)) {
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);
exit;
}
Ответ 3
Это должно помочь вам начать:
http://de.php.net/manual/en/function.readfile.php
Изменить: если ваш веб-сервер поддерживает его, используя
header('X-Sendfile: ' . $filename);
где имя файла содержит локальный путь, например
/var/www/www.example.org/downloads/example.zip
быстрее, чем readfile().
(применяются обычные соображения безопасности при использовании header())
Ответ 4
Я использую readfile() (http://www.php.net/readfile)...
Но вы должны убедиться, что вы установили правильный "Content-Type" с заголовком(), чтобы браузер знал, что делать с файлом.
Вы также можете заставить браузер загружать файл, а не пытаться использовать его для его отображения (например, для PDF файлов). Я всегда считал, что это выглядит немного "взломанным", но это объясняется выше ссылка.
Ответ 5
Для моего веб-сайта и веб-сайтов, созданных для клиентов, я использую PHP script, который я нашел давно.
Его можно найти здесь: http://www.zubrag.com/scripts/download.php
Я использую слегка измененную версию, чтобы позволить мне обфускать структуру файловой системы (по умолчанию она) в дополнение к не разрешению горячей ссылки (по умолчанию), и я добавил некоторые дополнительные функции отслеживания, такие как referrer, IP (по умолчанию) и другие такие данные, которые мне могут понадобиться, если что-то придумает.
Надеюсь, это поможет.