Я застрял на этой проблеме в течение нескольких дней, и до сих пор не нашел решения, которое решает проблему, с которой я столкнулся.
Что я пытаюсь сделать:
Я пытаюсь использовать PHP для загрузки PDF-файлов, и код очень хорошо работает для файлов, которые можно загрузить в течение примернополторы минутыНа моем домашнем Wi-Fi я могу загрузить файл размером 159 МБ в течение 10 секунд, и он работает каждый раз. Но когда я ограничиваю скорость интернета до «Fast 3G» (около 170 КБ / с, чтобы имитировать более медленные офисные скорости), загрузка завершается неудачно. И почти каждый раз, когда процесс загрузки занимает ровно 3 минуты и 24 секунды, время от времени - 1 минута и 57 секунд.
Что я попробовал:
Я настроил файл php.ini (настройка max_execution_time = 0 и memory_limit с более высокими интервалами, чем изначально настроенные 128M)
Я пробовал другие методы загрузки, которые, кажется, "разбивают" на большие PDF-файлы. Это было в основном неудачно. В одном случае загрузка будет завершена, но при попытке открыть PDF-файл возникнет ошибка. По словам автора этого решения, это было только верное решение для файлов в кодировке UTF-8, и я обнаружил, что я имею дело с UTF-16. (Я полагаю, что это была какая-то несовместимость с функцией print ().
Я убедился, что файл можно загрузить, если использовать прямую ссылку в URL. У него нет проблем с этим, но это былосделано только для тестирования и не может быть постоянным решением, потому что PDF-файлы, с которыми я имею дело, содержат конфиденциальную информацию. Таким образом, основываясь на этом результате, я, по крайней мере, смог сузить проблему, связанную с PHP, а не с IIS.
Вот текущий код, который я использую
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/download");
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header("Content-Transfer-Encoding: binary ");
header('Content-Length: ' . filesize($file));
//$file is a full path to the PDF
while(ob_get_level()) {
ob_end_clean();
}
readfile($file);
flush();
exit;
/*I realize it may be off, but it is at least working for quicker load
times as it currently is, so I'm leaving it alone for now*/
Я пытался включить любую информацию, которая показалась мне актуальной, но если какая-либо дополнительная информация будет полезна, пожалуйста, дайте мне знать! Я также буду уверен, чтовключите текущий код, который обрабатывает процесс загрузки, о котором я упоминал в верхней части поста.