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

php

40373 просмотра

5 ответа

10950 Репутация автора

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

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

Мишель

Автор: Michel Источник Размещён: 08.01.2010 04:12

Ответы (5)


2 плюса

996 Репутация автора

Это должно помочь вам начать: 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

31 плюса

371336 Репутация автора

Решение

Существует функция 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

1 плюс

646 Репутация автора

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

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

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

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

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

3 плюса

299 Репутация автора

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

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

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

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

11 плюса

1001 Репутация автора

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

  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
Вопросы из категории :
32x32