Я использовал приведенный ниже код, чтобы заставить браузер начать загрузку:
//send file
$fileName = basename($fullPath);
$length = filesize($fullPath);
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header('Content-length: ' . $length);
header("Content-disposition: attachment; filename=$fileName");
readfile($fullPath);
exit;
Все в порядке, за исключением того, что общий размер файла не отображается в браузере (Firefox и Chrome). Я искал в сообществе, а также безуспешно тестировал приведенный ниже код в htaccess:
SetEnv no-gzip не меняется
SetEnvIfNoCase Request_URI ...
Мой веб-сервер — Apache, а PHP — версии 8.3.
Есть ли другой вариант проверки?
Если в вашем имени файла есть специальные символы, вы также можете рассмотреть возможность его цитирования, на случай, если там что-то будет испорчено.
вы проверили, содержит ли $length
правильный размер файла?
@ChrisHaas Спасибо за ваш комментарий. Я не знаю, что конкретно происходит :)
@NasserHajlawi да, это целое число
Недавно у меня была такая же проблема! Предложите добавить этот заголовок, а не решение htaccess.
//to show file-size in browser
header("Content-Encoding: none");
Возможно, это не имеет отношения к вашей проблеме, но я почти уверен, что вы сможете полностью удалить
Content-Transfer-Encoding
. stackoverflow.com/a/7289434/231316