При скачивании файла сохраняется 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

Вот несколько советов, при выполнении которых не обещаю, но скорее всего заработает:

  1. Для начала проверить, действительно ли вы можете потрогать целевой файл, можно так: $path = realpath($pathToFile); if ($path && file_exists($path) && is_readable($path)) { тут можно отправлять, до этого, нельзя быть уверенным, что все идет по плану }
  2. Так же, проверьте, что вы хоть что-то прочитали из файла: if (!$bytes = readfile($path)) { возвращает кол-во прочитанных байт или же false }.
  3. Перед отправкой файла стоит убедится, что буферизация вывода отключена, можно сделать с помощью ob_get_level() или сбросить и отключить ее функцией ob_end_clean().
  4. Заголовок: header('Content-Transfer-Encoding: binary'); - хоть и сказано, что это больше к MIME, нежели чем к HTTP, многие примеры имеют реализацию с ним, советую попробовать.

В остальном, можно посмотреть на рабочие примеры, если и они откажутся у вас работать, то стоит посмотреть на окружение, права и настройку самого веб-сервера.

→ Ссылка