Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Экономная сборка файла
 
 автор: Владимир55   (27.04.2013 в 11:05)   письмо автору
 
 

Имеется несколько файлов, из которых нужно собрать один, просто просуммировав имеющуюся в них информацию. Для этого я поочередно открываю каждый из этих файлов и в переменной $kod суммирую их информацию, а потом единовременно записываю эту инфу в создаваемый файл. Вот так:
<?php
 $n_import 
file_get_contents('n_import.txt');
for (
$i 1$i <= $n_import$i++)
{
    
$name_file "tmp/" $i "_import.xml";
    
$kod_buff  file_get_contents($name_file);
    
$kod      .= $kod_buff;
}
file_put_contents('import.xml'$kod); 

Такой способ имеет тот недостаток, что требует слишком много памяти. А хотелось бы сделать так, чтобы инфа в переменной $kod не суммировалась, а будучи извлеченной из очередного файла сразу дописывалась в создаваемый файл.

Как это можно сделать?

  Ответить  
 
 автор: Valick   (27.04.2013 в 11:40)   письмо автору
 
   для: Владимир55   (27.04.2013 в 11:05)
 

просто брать и сразу записывать :)
вне цикла отрываете файл для записи W
в цикле открываете файлы (имена которых можно брать например из массива и использовать foreach) для чтения R(n)
и во вложенном цикле копируете построчно из R(n) в W

  Ответить  
 
 автор: Владимир55   (27.04.2013 в 13:12)   письмо автору
 
   для: Valick   (27.04.2013 в 11:40)
 

Меня волнует такой нюанс: будет ли замедляться запись по мере увеличения общего размера формируемого файла?

К примеру, добавляем сто раз по одному файлу размером 1 Мб. То есть, при записи последнего файла общий размер создаваемого файла будет почти 100 Мб.

Будет ли последняя запись длиться дольше первой?
И намного ли?

  Ответить  
 
 автор: Valick   (27.04.2013 в 13:56)   письмо автору
 
   для: Владимир55   (27.04.2013 в 13:12)
 

Будет ли последняя запись длиться дольше первой?
теоретически нет

  Ответить  
 
 автор: cheops   (29.04.2013 в 22:52)   письмо автору
 
   для: Владимир55   (27.04.2013 в 13:12)
 

>Будет ли последняя запись длиться дольше первой?
>И намного ли?
Этот эффект практически незаметен в случае файлов. Беспокоится стоит только в случае таблиц баз данных (если на момент добавления не отключаются индексы) - из-за того, что индекс приходится выстраивать после каждой записи бывают довольно длительные задержки.

  Ответить  
 
 автор: psychomc   (27.04.2013 в 11:40)   письмо автору
 
   для: Владимир55   (27.04.2013 в 11:05)
 

как вариант, делаете в цикле запись по кускам, каждый раз дописывая в конец файла

<?php
// ...
file_put_contents('import.xml'$kod_buffFILE_APPEND);
// ...

  Ответить  
 
 автор: Владимир55   (27.04.2013 в 13:09)   письмо автору
 
   для: psychomc   (27.04.2013 в 11:40)
 

Спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования