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

php

40373 просмотра

5 ответа

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

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

Мишель

Автор: Michel Источник Размещён: 12.11.2019 09:29

Ответы (5)


31 плюса

Решение

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

Автор: Pekka supports GoFundMonica Размещён: 08.01.2010 04:14

11 плюса

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

  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;

    } 
Автор: Knase Размещён: 06.04.2014 11:44

3 плюса

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

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

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

Автор: berty Размещён: 08.01.2010 06:22

2 плюса

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

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

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

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

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

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

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

Автор: KiNgMaR Размещён: 08.01.2010 04:13

1 плюс

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

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

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

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

Автор: David Размещён: 08.01.2010 04:18
Вопросы из категории :
32x32