Привет, у меня есть HTTP-заголовок в файле с именем download.php, который вызывает загрузку.
Код PHP:
$file = 'https://www.website.com/downloads/'.$download->stitle.'.zip';
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
Загрузка начинается без проблем, но всегда повреждена и имеет неправильный размер?
Я использую сжатие gzip, которое, как я полагаю, приводит к неправильной длине содержимого для загрузки, так как размер файла составляет 603 КБ, но в окне загрузки отображается 2,2 КБ.
.Htaccess:
# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain \
text/html \
text/xml \
text/css \
text/x-component \
application/atom+xml \
application/xml \
application/xhtml+xml \
application/rss+xml \
application/javascript \
application/x-javascript \
application/json \
application/vnd.ms-fontobject \
application/x-font-ttf \
application/x-font-woff \
application/font-woff2 \
application/x-web-app-manifest+json \
image/svg+xml \
image/x-icon# Or, compress certain file types by extension:
<files *.html>
SetOutputFilter DEFLATE
</files>
Я добавил следующее, чтобы исключить zip-файлы и скрипт загрузки:
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.zip$ no-gzip dont-vary
SetEnvIfNoCase Request_URI download\.php$ no-gzip dont-vary
Но загруженный файл все еще поврежден и имеет неправильный размер (7,7 КБ).
В окне загрузки теперь не отображается размер файла.
Что я делаю неправильно?
Изменить: я получаю предупреждение: filesize (): сбой статистики для https://www.website.com/downloads/free-font-family-poppins.zip
Если я перехожу к тому месту, где файл начинает загружаться с правильным размером, поэтому файл существует, я также изменил права доступа к файлу и папке на 777, чтобы убедиться, что это не проблема с разрешениями, но все равно появляется та же ошибка.
Нашел решение.
Функция filesize () не принимает HTTP или HTTPS.
Изменил расположение файла на путь к файлу сервера и теперь работает правильно.
Других решений пока нет …