Вопрос по работе файлами PHP

Discussion in 'PHP' started by OnlyOn, 9 Jan 2011.

  1. OnlyOn

    OnlyOn Banned

    Joined:
    18 Oct 2010
    Messages:
    252
    Likes Received:
    89
    Reputations:
    36
    Как сделать запись в тектосвый файл чтобы запись начиналась с 1 строки и при этом содержимое не удалялось?

    И как сделать такое:
    если в файле есть 10 строчек текста, нужно сделать так чтобы при записи в начале еще одной строки удалялась последняя.
    Тоесть был файл:

    Записываем еще одну строку и надо чтобы стало:
     
  2. necroleptick

    necroleptick Member

    Joined:
    3 Jan 2011
    Messages:
    105
    Likes Received:
    11
    Reputations:
    0
    чтобы получить ответ объясни что ты собрался делать?(открыть файл в режиме дозаписи "a" второй аргумент у функции fopen)
     
  3. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    http://php.net/manual/en/function.fseek.php
     
  4. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    моя реализация...
    PHP:
    <?php
    function MyAddString($filename,$stringOrArrayOfString)
    {
        
    $fileArray file($filename);
        
    $countOld count($fileArray);
        if(
    is_array($stringOrArrayOfString))
            foreach(
    $stringOrArrayOfString as $string)
                
    $countNew array_unshift($fileArray,$string "\n");
        else
            
    $countNew array_unshift($fileArray,$stringOrArrayOfString.  "\n");
        for(
    $i=0;$i<$countNew-$countOld;$i++)
            
    array_pop($fileArray);
        
    file_put_contents($filename,implode("",$fileArray));    
    }

    MyAddString('test1.txt','новая первая строка');
    PS: осторожно, переносы строк в стиле linux...
     
  5. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    это ему никак не поможет,
    если поставить каретку в начало файла, то будешь писать поверх старых данных, а они нужны
     
    1 person likes this.
  6. OnlyOn

    OnlyOn Banned

    Joined:
    18 Oct 2010
    Messages:
    252
    Likes Received:
    89
    Reputations:
    36
    Если я правильно понял код, то тут количество строк берется из уже готового файла? Т.е. если при чтении у файла было 10 строк, то запись будет на 10 строк. Если 15, то 15...?

    $countOld = 10;

    Чтобы нужное количество строк независимо от файла. Надеюсь правильно разобрал...
     
    #6 OnlyOn, 9 Jan 2011
    Last edited: 9 Jan 2011
  7. necroleptick

    necroleptick Member

    Joined:
    3 Jan 2011
    Messages:
    105
    Likes Received:
    11
    Reputations:
    0
    Ему по ходу стек нужен

    PHP:
    <?php

    $stack 
    = array("""""""""""""""""" ,""); // Стек на 10 эл-ов

    //теперь добавим новый элемент
    $new "test"// то что будем добавлять
    //для начала удалим последний
    $x array_pop($stack); // $x - удалённый элемент из массива
    // теперь запишем в файл
    $f fopen("fifo.txt""w+b"); // перезаписываем файл, если нет - создаём
    flock($fLOCK_EX);
    fwrite($f$new."\r\n".implode("\r\n"$stack));
    flock($fLOCK_UN);
    fclose($f);

    // посмотрим что у нас лежит
    $stack file("fifo.txt"FILE_IGNORE_NEW_LINES);
    echo 
    "<pre>";
    print_r($stack);

    Я думаю что автор пытается сделать наверное что-то вроде чата. Целесообразно будет реализовать это в виде функции:

    PHP:
    <?php

    function fifoAdd($filename$val)
    {
    $fifo file($filenameFILE_IGNORE_NEW_LINES);
    array_pop($fifo);
    $f fopen($filename"w+b"); 
    flock($fLOCK_EX);
    fwrite($f$val."\r\n".implode("\r\n"$fifo));
    flock($fLOCK_UN);
    fclose($f);
    }

     
    #7 necroleptick, 9 Jan 2011
    Last edited: 9 Jan 2011
  8. OnlyOn

    OnlyOn Banned

    Joined:
    18 Oct 2010
    Messages:
    252
    Likes Received:
    89
    Reputations:
    36
    necroleptick нет не чата)
    phpdreamer - большое спасибо) именно то что мне нужно было!

    Смотрите: /thread248991.html