Скачать файл PHP - PullRequest
       27

Скачать файл PHP

0 голосов
/ 08 сентября 2010

В настоящее время я создаю сценарий, который позволит пользователю загружать файл через URL, фактически не видя имя файла или место хранения файла. Пока что у меня все построено, но мне нужно знать, как мне вызвать файл, чтобы открыть и загрузить его. В настоящее время у меня есть рабочая версия (код ниже), но по какой-то причине PHP портит загрузку. Каждый раз, когда я пытаюсь открыть файл, который загружается на мой рабочий стол, я получаю сообщение об ошибке. Когда я открываю тот же файл на самом сервере, файл работает просто отлично.

Структура URL :
http://www.example.com/download/file/cjVQv0ng0zr2

Код, который инициирует загрузку

    $fullpath = BASE_PATH . '../uploads/brochures/' . $vendors['0']['filename'];

    header("Content-type: application/pdf");
    header('Content-disposition: attachment; filename="' . $fullpath . '"');

Я делаю что-то неправильно, что может привести к повреждению файла? Мне не хватает заголовка или двух?

Заранее спасибо, Джейк

Ответы [ 4 ]

2 голосов
/ 08 сентября 2010

Вам необходимо вызвать следующую строку после отправки заголовка.

readfile($fullpath); 

, а также настройте в шапке, как это:

header('Content-disposition: attachment; filename="' . basename($fullpath) . '"');

Одна вещь, в которой я не уверен, это $ fullpath .. попробуйте проверить, верен ли ваш $ fullpath и вы действительно можете получить доступ к файлу, это должен быть полный физический путь файла.

Я думаю, что было бы также неплохо добавить следующий заголовок:

header("Content-Transfer-Encoding: binary"); 
0 голосов
/ 25 марта 2011

Убедитесь, что вы выходите ...

(я использую BLOB-объект)

header("Content-Type: " . $response['content_type'] );
header("Cache-Control:  maxage=1");
header("Pragma: public"); //fixes ie bug
echo trim($_data);
exit();     
0 голосов
/ 08 сентября 2010

Я столкнулся с той же проблемой некоторое время назад, у меня сработало следующее; положить

while( @ob_end_clean() );

непосредственно перед функциями заголовка:

header("Content-Type: ". $row['p_mime']);
header("Content-Length: ". $row['p_size']);
header("Content-Disposition: inline; filename=".$row["p_name"]);

Расположение содержимого: вложение / встроенное должно быть установлено в соответствии с делами (1. запрос на загрузку / 2. открытие в браузере)

ПРИМЕЧАНИЕ: позаботьтесь о том, чтобы вы не повторяли и не ценили перед функцией заголовка, а чрезмерная осторожность не принесла никакого вреда, отключите все функции перед функцией заголовка, которые, по вашему мнению, потерпят неудачу, или вызовете префикс с предупреждением "@ "символ этих строк кода php.

всего наилучшего:)

0 голосов
/ 08 сентября 2010

У меня была похожая проблема некоторое время назад.Убедитесь, что в вашем файле сценария нет лишних пробелов ни до тега "<?php", ни после тега "?>".В моем случае последний символ моего сценария был "\n" вместо ожидаемого ">".

...