Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как записывать данные, не загружая память?

☘️ Green ☘️ Гуру (2755), на голосовании 4 года назад
К примеру отправляются данные через upload на скрипт методом пост, большие данные, как постепенно эти передаваемые данные передавать в файл при этом не заполняя память?
К примеру к file_get_contents(), можно применить readfile()
В этом случая я в тупике
Голосование за лучший ответ
Varana Snavina Мудрец (10586) 4 года назад
Есть файловые функции с указанием руками размером буфера, а есть автоматические. Автоматические сами следят, чтобы вы не перролняли память.
readfile - автомат, вы не забьете память ею, она через диск будет работать.
fread - ручное считывание с указанием в байтах сколько в память за один раз брать.

$fp= fopen("https://site.ru/file.txt", "r");
while(!feof($fp)) {
$content= fread($fp, 1024);
//пишем часть $content куда то
}
☘️ Green ☘️Гуру (2755) 4 года назад
Не подумал о fread, а что насчёт скорости?
Дело в чём, отправляются данные, я их перечитываю, будет наверное так
$fp=fopen("php://input", "r");
while(!feof($fp)) {
$content= fread($fp, 1073741824);//1Гб
file_put_contents("file.ext", $content, FILE_APPEND);
}
В таком случае скрипт будет читать передаваемые данные в 1гб и отправлять?
Если я бы читал по вашему коду, он бы читал посекундно 1кб? После переходил к следующему кб, т. е на файл в 6кб у меня бы ушло 6сек? Или это делается множеством потоком?
После 1гб, он очистит память от предыдущего гбайта и примется за новый?
☘️ Green ☘️ Гуру (2755) потоков*
☘️ Green ☘️Гуру (2755) 4 года назад
Варана?
Похожие вопросы