ModX Evo: PHP readfile() во фрагменте?
У меня есть скрипт, который загружает большой файл (1,3 ГБ) с помощью readfile().
Если я создаю страницу.php только с сценарием, он работает нормально, но если я помещаю тот же сценарий в фрагмент и помещаю его на страницу, ничего не происходит.
ModX блокирует загрузку как-то? Любой совет был бы отличным спасибо!
РЕДАКТИРОВАТЬ код:
$file = $_SERVER['DOCUMENT_ROOT']."/movie.mov";
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
};
1 ответ
В Modx есть максимальный размер файла [Максимальный размер загрузки upload_maxsize], но это для файлового менеджера. Я сомневаюсь, что это твоя проблема.
давайте посмотрим скрипт и журналы ошибок.
ОБНОВИТЬ
только что проверил ваш маленький фрагмент [с несколькими незначительными изменениями] ~ он отлично работает.
$base_path = $modx->config['base_path'];
$movie = 'frankenweenie-mrwhiskers_r640s.mov';
$file = $base_path.$movie;
if (file_exists($file)) {
echo 'file exists '.filesize($file);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
return true;
}else{
echo 'file does not exist';
return false;
}
использование $modx->config['base_path'] - это не ваша проблема, это также работает с использованием серверных переменных, это просто хорошая привычка. как и возвращаемые значения true/false, modx ожидает, что его фрагменты возвращают что-либо, будь то true, false или $ output... также, без вашей проблемы, без которой он работал.
Начните смотреть на ваши настройки PHP, я думаю, возможно, проблема с ограничением памяти. Проверьте документацию php и посмотрите, достаточно ли у нее памяти для чтения файла такого размера. [даже если это означает, что "размер не имеет значения"]
включите регистрацию ошибок в самом скрипте и проверьте журналы ошибок сервера.
Работает с небольшими файлами? Тогда посмотрите здесь: PHP readfile () и большие загрузки
Удачи!