неправильный заголовок из сценария. Плохой заголовок = 1: index.php

У меня есть веб-сайт, которому сейчас несколько лет, он в основном предлагает загрузки.

Во всяком случае, поскольку перемещение серверов не позволяет загружать файлы, потому что теперь он дает ошибку ошибки 500, а в файлах журнала она приносит эту ошибку:

неправильный заголовок из сценария. Плохой заголовок = 1: index.php

В любом случае единственный код, который связан с этим, я вижу:

// Echo $productOptionDetails->file; $file = DOWNLOAD_FOLDER. '/'. $productOptionDetailEntity->file; 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, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file) + 1); ob_clean(); flush(); readfile($file); exit; } 

Теперь, если я просто выводю:

 // Echo $productOptionDetails->file; $file = DOWNLOAD_FOLDER. '/'. $productOptionDetailEntity->file; if (file_exists($file)) { readfile($file); exit; } 

Он выводит много зашифрованного текста, поэтому он явно что-то читает.

Я прочитал, что заголовки неверны, но после чтения загрузок контента на php.net, а также других веб-сайтов это выглядит хорошо.

Может кто-нибудь крикнуть, почему я получаю эти ошибки?

благодаря

Проблема в

 header('Content-Length: ' . filesize($file) + 1); 

Dot оценивается до плюс, поэтому ваш код является строкой + 1, результат равен 1, и это приводит к тому, что 1 отправляется как заголовок. Правильный код должен быть

 header('Content-Length: ' . filesize($file)); 

потому что согласно этой странице используется http://www.php.net/manual/en/function.readfile.php no +1. Другое решение

 header('Content-Length: ' . (filesize($file) + 1)); 

который будет работать так, как вы хотите.

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

Это может быть не всегда echo , это могут быть некоторые HTML tags вместо него.

Загрузка должна быть первой, которая будет запущена на любой странице, если вы хотите загрузить что-то с этой страницы в систему клиентов.

Эта проблема связана с некоторым результатом, который появляется перед отправкой заголовков.

Общей проблемой является то, что перед запуском php-тега помещаются некоторые символы, такие как пробелы, новые строки или даже некорректная спецификация UTF-8 (знак порядка байтов).

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

Кроме того, ob_clean (); и флеш (); функции в коде вам не нужны.

Насколько я понимаю из кода flush() не требуется. Также вместо использования

 ob_clean(); flush(); 

просто используйте ob_end_clean() чтобы очистить любой буферный код.

И вы сказали, что вы перемещаете серверы, и теперь он не работает, значит, вы также изменили настройки PHP или версию?

Если да, чем опубликовать конфигурацию PHP для output_buffering .