При скачивании файла сохраняется 0 кб
Мне нужно скачать docx (pdf) файл с сайта, но при это когда он сохраняется, его размер равен 0кб. Для скачивания использую следующий код
$file = '../documents/' . $url[1];
header('Content-Description: File Transfer');
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));
readfile($file);
exit();
Файл .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php
UPD: Не работает напрямую по ссылке или через просмот директории, а также на сторонних локальный сайтах. Используется OpenServer
Ответы (1 шт):
Автор решения: Borislav
→ Ссылка
Вот несколько советов, при выполнении которых не обещаю, но скорее всего заработает:
- Для начала проверить, действительно ли вы можете потрогать целевой файл, можно так:
$path = realpath($pathToFile); if ($path && file_exists($path) && is_readable($path)) { тут можно отправлять, до этого, нельзя быть уверенным, что все идет по плану } - Так же, проверьте, что вы хоть что-то прочитали из файла:
if (!$bytes = readfile($path)) { возвращает кол-во прочитанных байт или же false }. - Перед отправкой файла стоит убедится, что буферизация вывода отключена, можно сделать с помощью
ob_get_level()или сбросить и отключить ее функциейob_end_clean(). - Заголовок:
header('Content-Transfer-Encoding: binary');- хоть и сказано, что это больше к MIME, нежели чем к HTTP, многие примеры имеют реализацию с ним, советую попробовать.
В остальном, можно посмотреть на рабочие примеры, если и они откажутся у вас работать, то стоит посмотреть на окружение, права и настройку самого веб-сервера.