Большие текстовые файла запись.

Discussion in 'PHP' started by Adio, 16 Feb 2014.

  1. Adio

    Adio Elder - Старейшина

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    Ну давайте гуру свои мега примеры если таковы имеються обработка - и на выходе файл до 60мб - плюс скорость ? - слушаю предложение - к примеру работа с файлами в 50-60 метров - запись в 30 - 40 мб файл - нужна оптимизированная желательно быстрая работа с текстовыми документами аналоиги есть но может ачатовские мозговитые предложат что по интереснее
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Adio могу предложить научиться оформлять мысли так, чтобы понимали их не только вы.

    Какого рода преобразование вы хотите делать над файлом? 50 метров - вполне себе помещаются в ОЗУ, можно хоть читать файл целиком. Или же как обычно - построчное чтение и тогда использоване памяти будет минимальным.
     
    _________________________
  3. Adio

    Adio Elder - Старейшина

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    Ну давайте так, вообщем к примеру на выходе я имеют 20 - 30 метров текста, пишуться они довольно таки долговато в текстовый файл, если юзать

    foreach
    fopen
    fwrite
    fclose

    вообщем нужен способ как то сделать это побыстрее
    К примеру разбивать на файлы потом собирать до кучи в один файл - ну вообщем мне нужны какие то ачатовские умные наработки еслит таковы имеютсья
    в итоге нужна скорость
     
  4. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    Самый быстрый и менее ресурсоемкий способ чтения в php - это file_get_contents();, пару лет назад проводил сравнение, по поводу записи, думаю file_put_contents() будет на высоте, хотя нужно сравнивать.

    Метод, скорость чтения, потребляемая память. Это при размере файла около 4МБ
    file_get_contents:0.00137305259705;3.35 MB
    fread:0.00163197517395;6.59 MB
    fgets:0.00293898582458;3.34 MB
    fscanf:0.0129270553589;6.59 MB
     
    _________________________
    #4 VY_CMa, 16 Feb 2014
    Last edited: 16 Feb 2014
  5. Adio

    Adio Elder - Старейшина

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    Может быть,
    Вы лучше примеры приводите а не пишите что быстрее
    К примеру берем 30 метровый файл разбиваем на строку и лупим его с один или несколько файлов потом собираем или сразу записываем и сравниваем скорости а не просто писать что быстрее работает из функций записи..
     
  6. Adio

    Adio Elder - Старейшина

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    От леньтяи :) ладно.
     
  7. psychomonkey

    psychomonkey New Member

    Joined:
    3 Jun 2011
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    это вам надо к хрумоводам. была утилита, которая делит файлы
    или
    Total Commander - "разбить файл".
     
  8. Adio

    Adio Elder - Старейшина

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    Каким нафиг хрумоводам причем тут софт к пхп.
    На софте проблем нет да и в пхп тоже нет.

    А вот на ачате есть, одна проблема, что никому нахер ничег не нужно либо нет знаний либо есть но оно нахер никому не нужно.

    Нужно всем присвоить статус бот, бякнут херню какуют то и все :(
     
  9. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    Это как? Считать файл в строку можно сразу, или разбит на строкИ?

    Лупим - это всмысле склеиваем строку с другим файлом?

    Собираем что? Из сорцев собираем или собираем бутылки в парке?

    Не то что бы просто прикалупаться, просто реально ничего не ясно. Пиши по русски что ты хочешь сделать, я предполагаю объединить 2 файла, в таком случае считываем просто в память весь файл, как сказал выше Gifts объемы в 30-100мб сегодня не объемы.

    Ну а если хочется минимальную нагрузку то рекомендую считывать файл кусками:
    http://www.php.net/manual/ru/function.fread.php
    Чем выше значение тем больше скорость ну и нагрузка соответственно, читай по 1мб и все будет в порядке.
    Еще вариант читать построчно: http://php.net/manual/ru/function.fgets.php но он слишком медленный для больших объемов, и ресурсоемкость зависит от длинны строки.
    А вот это уже наглость, и оно нас не интересует, да мы в принципе и так знаем. Так что это уже твоя задача. Скажи спасибо что тебе ответили, никто не нанимался отвечать на вопросы аутистов, все на добровольной основе.
     
  10. Adio

    Adio Elder - Старейшина

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    Примеры в студию - запись в файл 100 метров черезе foreach
     
  11. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Держи, тормозить будет от души.
    PHP:
    <?php

    class Infinity implements Iterator
    {
        private 
    $filler 1234;
        private 
    $total 0;

        public function 
    __construct($size)
        {
            
    $this->total $size 1024 1024 strlen($this->filler);
        }

        public function 
    rewind()    { }
        public function 
    current()   { return $this->filler; }
        public function 
    key()       { return NULL; }
        public function 
    next()      { return $this->filler; }
        public function 
    valid()     { return $this->total-- ? TRUE FALSE; }
    }

    $inf = new Infinity(100);
    $fh fopen('data.bin''w');

    if(
    $fh)
    {
        foreach(
    $inf as $k => $v)
        {
            
    fwrite($fh$v);
        }

        
    fclose($fh);
    }

    ?>
     
    _________________________
  12. Adio

    Adio Elder - Старейшина

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    Ну и к чему слова "тормозить будет от души?" -
    Классы это хорошо. а человечность еще лучше.
     
  13. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Чтобы через foreach было, очевидно же.
     
    _________________________
  14. Иван8

    Иван8 Elder - Старейшина

    Joined:
    21 Aug 2008
    Messages:
    71
    Likes Received:
    11
    Reputations:
    6
    60 метров фигня, тут даже думать особо ненадо про скорость, я на питоне файлы по 1-2 гб обрабатывал за секунд 5-10!