проблема с загрузкой файла - PullRequest
1 голос
/ 23 февраля 2009

Я пишу скрипт для принудительного скачивания mp3 файлов с сайта. Код работает очень хорошо, но проблема в том, что он не может загружать большие файлы. Я попробовал его с файлом 9,21 МБ, и он загрузился правильно, но всякий раз, когда я пытаюсь использовать код для загрузки файла размером 25 МБ, он просто дает мне страницу сервера не удается найти или веб-сайт не может отобразить страницу. Так что теперь я знаю, что есть проблемы с загрузкой больших файлов. Ниже приведен фрагмент кода, который выполняет загрузку файлов.

header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);             
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=\"".$dname.".mp3\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($secretfile));
$downloaded=readfile($secretfile);  

Отображаемая ошибка: HTTP 500 Internal Server Error

Большое спасибо за ваше время, ребята.

Ответы [ 4 ]

2 голосов
/ 23 февраля 2009

Это могут быть ограничения памяти, но обычно PHP выдает ошибку, сообщающую, что предел памяти достигнут.

Кроме того, перед всем этим вы должны отключить сжатие вывода, если оно включено:

if(ini_get('zlib.output_compression')) {
    ini_set('zlib.output_compression', 'Off');
}

Иногда IE может испортить, если выходное сжатие включено.

0 голосов
/ 23 февраля 2009

Попробуйте это:

// empty output buffer
while (ob_get_level()) {
    ob_end_clean();
}
if (ini_get('output_buffering')) {
    ini_get('output_buffering', false);
}

// function to encode quoted-string tokens
function rfc2822_quoteString($string) {
    return '"'.preg_replace('/[^\x00-\x0C\x0E-\x21\x23-\x5B\x5D-\x7F]/', '\\\$0', $string).'"';
}

// HTTP headers
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.rfc2822_quoteString($dname.'.mp3'));
header('Content-Length: '.filesize($secretfile));

// send file
readfile($secretfile);
exit;
0 голосов
/ 23 февраля 2009

я просто выдаю мне страницу не найденного сервера или веб-сайт не может отобразить страницу

Это ошибка, отображаемая Internet Explorer? Вы получаете какие-либо ошибки на стороне сервера? Вы проверяли журналы вашего сервера?

0 голосов
/ 23 февраля 2009

Следите за конфигурацией PHP на предмет ограничений по времени и времени ожидания

В php.ini:

memory_limit = 32M
max_execution_time = 300

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

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