Выходной файл PHP на диске в браузере

Я хочу использовать существующий файл для браузера в PHP. Я видел примеры с изображением / jpeg, но эта функция, похоже, сохраняет файл на диск, и вам сначала нужно создать объект изображения с правильным размером (или я просто не понимаю его :))

В asp.net я делаю это, читая файл в массиве байтов, а затем вызываю context.Response.BinaryWrite (bytearray), поэтому я ищу что-то подобное в PHP.

Мишель

Solutions Collecting From Web of "Выходной файл PHP на диске в браузере"

Существует 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-й ответ на этот вопрос для хорошего примера о том, какие заголовки отправлять.

Я использую это

  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; } 

Это должно помочь вам начать работу: http://de.php.net/manual/en/function.readfile.php

Изменить: если ваш веб-сервер поддерживает его, используя

 header('X-Sendfile: ' . $filename); 

где имя файла содержит локальный путь, например

 /var/www/www.example.org/downloads/example.zip 

быстрее, чем readfile ().

(применяются обычные соображения безопасности при использовании header ())

Я использую readfile () ( http://www.php.net/readfile ) …

Но вы должны убедиться, что вы правильно задали «Content-Type» с заголовком (), чтобы браузер знал, что делать с файлом.

Вы также можете заставить браузер загружать файл вместо того, чтобы пытаться использовать плагин для его отображения (например, для PDF-файлов), я всегда считал, что это выглядит немного «взломанным», но это объясняется приведенной выше ссылкой.

Для моего веб-сайта и веб-сайтов, созданных для клиентов, я использую PHP-скрипт, который я нашел давно.

Его можно найти здесь: http://www.zubrag.com/scripts/download.php

Я использую слегка измененную версию, чтобы позволить мне обфускать структуру файловой системы (по умолчанию она), а также не разрешать горячую ссылку (по умолчанию), и я добавил некоторые дополнительные функции отслеживания, такие как referrer, IP (по умолчанию) , и другие такие данные, которые мне могут понадобиться, если что-то придумает.

Надеюсь это поможет.