Спорадическая ошибка загрузки данных из приложения PHP - PullRequest
1 голос
/ 12 апреля 2011

Приложение PHP предлагает двоичные данные для загрузки:

header("Content-Type: application/octet-stream");       
header("Pragma: public");
header("Cache-Control: private");   
header("Content-Disposition: attachment; filename=\"$filename\"");
header("expires: 0");      
set_time_limit(0);
ob_clean();
flush();    
@readfile($completefilename); exit;

$ completefilename является потоком типа " ftp: // user: pwd @ ..."

Размер данных может составлять несколько мегабайт. Он работает нормально, но время от времени я получаю следующую ошибку:

Error

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

Скорее всего, удаленный поток иногда отключается или время ожидания истекло.

Также, как говорит @fab, возможно, файл, который вы пытаетесь загрузить, больше памяти вашего скрипта.

Вы должны начать регистрировать ошибки readfile() возвращает, например, используя директиву error_log php.ini .

Если это должно быть абсолютно надежно, я думаю, вам придется использовать что-то более изощренное, чем readfile(), которое позволяет установить время ожидания (например, curl или readfile с параметрами контекста потока ).

После этого вы можете перехватывать любые ошибки, возникающие при загрузке, и вместо этого обслуживать локальный резервный документ. Этот документ может, например, быть текстовым файлом, содержащим сообщение «Ресурс XYZ не может быть загружен».

1 голос
/ 12 апреля 2011

У вас есть что-нибудь в журналах ошибок? Возможно PHP не хватает памяти, потому что readfile () должен вытянуть файл while в память. Убедитесь, что memory_limit больше, чем самый большой файл, над которым вы работаете с readfile (). Другой вариант - вывести файл кусками, используя fread ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...