2017-02-21 64 views
0

Я собрал базовый PHP-скрипт, который при запуске должен запускать загрузку файла, хранящегося на сервере. Я принял к сведению с http://php.net/manual/en/function.readfile.php для использования функции readfile и использовал идентичный код.Загрузите скрипт в результате 404 страницы

Это было раньше, но теперь, внезапно, я начал получать 404 страницы вместо этого. Ниже фрагмент кода, что у меня есть:

header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.basename($file)); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($serverPath)); 
readfile($serverPath); 
exit(0); 

Когда я вставляю отладки сценариев между ними, я могу видеть их, наряду с фантастическими данными, которые readfile функция получает из файла, как файлы PDF. Но сами по себе это дает мне 404 страницы без каких-либо ошибок/предупреждений.

Может ли кто-нибудь указать мне любую проблему, которую я имею в коде, или любую вещь, на которую я могу смотреть? Любые указатели были бы очень полезны, так как я провел почти весь день через форумы и отлаживал, и все же нигде не приближался к какому-либо решению.

Edit:

Ниже приведены заголовки ответа, полученные от сервера:

Date: Tue, 21 Feb 2017 23:01:50 GMT 
Server: Apache/2.2.31 (Unix) mod_ssl/2.2.31 OpenSSL/1.0.1e-fips mod_bwlimited/1.4 
X-Powered-By: PHP/5.4.45 
Expires: Wed, 11 Jan 1984 05:00:00 GMT 
Cache-Control: no-cache, must-revalidate, max-age=0 
Pragma: no-cache 
Content-Disposition: attachment; filename="QM-1.pdf" 
Keep-Alive: timeout=2, max=150 
Connection: Keep-Alive 
Transfer-Encoding: chunked 
Content-Type: application/octet-stream 

Edit 2:

Итак, я попробовал LOCALHOST подход, а код действительно работает отлично в моей местной среде. Версии PHP одинаковы в обоих местах. Кроме того, любые указатели, где я должен смотреть на уровень сервера, чтобы найти причину такого поведения?

+0

попытайтесь изменить свой Content-Type в приложении/pdf. Может быть, проблема здесь. Также я думаю, что эти ссылки похожи на вашу ситуацию: http://stackoverflow.com/a/10088979/6066986 http://stackoverflow.com/a/13570935/6066986 – Grynets

+0

@ Grynets Пробовал PDF-вариант, а также проверял параметры файлов, никакого успеха ни с одним из них. – Prateek

+0

Что-нибудь изменилось на вашем сервере? Может быть, некоторые разрешения? – Grynets

ответ

0

Вы проверили, существует ли файл и его можно прочитать? Рассмотрите возможность использования таких функций, как file_exists и is_readable, чтобы убедиться, что ваш код работает так, как планировалось.

Не забудьте также проверить заголовки, которые вы получаете, когда сервер возвращает ошибку HTTP 404, возможно, вы даже не достигнете своего кода, а ошибка может быть в другом месте.

+0

Уже пробовал с этими функциями и без успеха. Кроме того, я вручную проверил, и файлы присутствуют. Если я посещаю этот файл по прямому URL-адресу, он работает нормально. Я добавил заголовки, полученные от сервера. – Prateek