file_get_contents()
загрузит весь файл в память - используя его журнал.
И, в PHP, объем памяти, который может использовать скрипт, ограничен (см. memory_limit
) - что может объяснить, что ваша загрузка скрипт не работает для больших файлов.
Вместо этого лучше использовать readfile()
: он будет читать файл и напрямую отправлять его содержимое в выходной буфер.
Это означает:
- Не загружается весь файл в память
- Нет необходимости отображать контент, загруженный в память.
Просто используйте что-то вроде этого, все будет в порядке:
$path = $_SERVER['DOCUMENT_ROOT'] . '../path/to/file/';
$filename = 'filename.zip';
$filesize = filesize($path . $filename);
@header("Content-type: application/zip");
@header("Content-Disposition: attachment; filename=$filename");
@header("Content-Length: $filesize")
readfile($path . $filename);
(Кстати: вы действительно хотите отключить ошибки таким способом с помощью оператора @
? Другим решением может быть не отображать их, а записать их в файл - см. display_errors
, log_errors
и error_log
)