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 () и большие загрузки

Удачи!

Другие вопросы по тегам