CodeIgniter. Скачать помощник. Вопрос об использовании памяти

#php #codeigniter

#php #codeigniter

Вопрос:

Вопрос об этом помощнике http://codeigniter.com/user_guide/helpers/download_helper.html

Если, например, program.exe весит 4 ГБ, потребуется ли много памяти PHP для чтения и доставки этого файла?

 $data = file_get_contents("/path/to/program.exe"); // Read the file's contents
$name = 'software.exe';

force_download($name, $data);
  

Ответ №1:

force_download функция просто установите правильные HTTP-заголовки, чтобы браузер клиента загрузил файл. Таким образом, файл не будет открыт, просто передайте его URL клиенту.

Проверьте исходный код помощника, если вам нужно: https://bitbucket.org/ellislab/codeigniter-reactor/src/31b5c1dcf2ed/system/helpers/download_helper.php

Редактировать: я бы предложил создать вашу собственную версию помощника, и вместо использования strlen для получения размера файла используйте функцию php filesize , которая принимает только имя файла в качестве аргумента и возвращает размер в байтах.

Больше информации на http://www.php.net/manual/en/function .filesize.php

Ответ №2:

Да … это может стать … плохо…

file_get_contents считывает все содержимое файла в строку. Для больших файлов это может стать, ну, плохо. Я бы заглянул в readfile. Пожалуйста, помните также — поскольку CI автоматически кэширует при загрузке представления, это означает, что readfile не принесет заметной пользы, если он будет использоваться в представлении CI. Было бы почти лучше справиться с этим с помощью внешнего скрипта или путем вывода непосредственно из контроллера и вообще не вызывать представление.

Комментарии:

1. 1 за уточнение размера файла. Я не заметил этой проблемы.