Работа с файлами

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 1 янв 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Здравствуйте, уважаемые форумчане.
    Подскажите пожалуйста, как удалить первые 10 строк в тхт файле.
    Есть две идеи:
    1).
    Первые 11 строк кода заменить одиннадцатой строкой

    2).
    Считываем построчно и записываем в другой файл.
    Пропускаем ненужную строку.
    Закрываем оба файла, удаляем старый, переименовываем новый в старый.

    Как реализовать первый вариант?
    Как удалить один, и второй файл переименовать?


    Всех с Новым 2009 Годом :)
     
    Iwashka нравится это.
  2. DIAgen

    DIAgen Постоялец

    Регистр.:
    30 окт 2006
    Сообщения:
    134
    Симпатии:
    72
    Попробуй вот так

    Код:
    $name_file_text = 'secret.txt';
    $count_del_line = 9;
     
    $array_file_text = explode ("\n", file_get_contents($name_file_text));
     
    for($i=0; $i <= $count_del_line; $i++) {
        unset($array_file_text[$i]);
    }
     
    file_put_contents($name_file_text, implode("\n", $array_file_text));
     
  3. FL@SH

    FL@SH Читатель

    Заблокирован
    Регистр.:
    20 июл 2008
    Сообщения:
    193
    Симпатии:
    25
    а не легче сделать это через file() ? Эта же функция сразу возвращает массив строк в файле и не нужно использовать explode()

    Код:
    <?php
    $name_file_text = 'secret.txt';
    $count_del_line = 9;
    
    $array_file_text = file($name_file_text);
    
    for($i=0; $i <= $count_del_line; $i++) {
        unset($array_file_text[$i]);
    }
    
    file_put_contents($name_file_text, implode("\n", $array_file_text));
    ?>
    Добавлено через 4 минуты
    Переименование: rename("oldfile", "newsfile");
    Например
    Код:
    rename("/somdir/doc.txt", "/somdir/newdoc.txt);
    Удаление: unlink(filename);
    Например:
    Код:
    unlink("/somedir/somefile.txt");
     
  4. Yaggi Jah

    Yaggi Jah Постоялец

    Регистр.:
    15 ноя 2006
    Сообщения:
    75
    Симпатии:
    31
    Вариант для больших файлов (предложенные выше могут не сработать из-за нехватки памяти)
    PHP:
    <?php
    $file
    ='file.txt';
    $skip=array(0,1,2,3,4,5,6,7,8,9); //массив с номерами строк для пропуска
    $fp=fopen($file,'r');
    $fp1=fopen('tmp.txt','w');
    $a=0;
    while(!
    feof($fp)) {
      
    $data=trim(fgets($fp,4096));
      if(!
    in_array($a,$skip)) fwrite($fp1,$data."\r\n");
      
    $a++;
    }
    fclose($fp1)
    fclose($fp);
    unlink($file);
    rename('tmp.txt',$file);
    exit;
    ?>
     
  5. Invaderus

    Invaderus Создатель

    Регистр.:
    16 июн 2008
    Сообщения:
    33
    Симпатии:
    0
    а лучше так:
    Код:
    <?php
    $file = "file.txt";
    $skip = 10;
    
    $fp1 = fopen($file,"r");
    $fp2 = fopen("tmp.txt","w");
    $a = 0;
    while(!feof($fp1))
    {
      $line= fgets($fp1,4096);
      if ($a >= $skip) fwrite($fp2,$line);
      $a++;
    }
    fclose($fp1);
    fclose($fp2);
    unlink($file);
    rename("tmp.txt",$file);
    ?>
    
     
  6. Brevis

    Brevis Создатель

    Регистр.:
    6 окт 2007
    Сообщения:
    16
    Симпатии:
    7
    И чем же этот код лучше кода Yaggi Jah?
     
  7. xek

    xek Писатель

    Регистр.:
    20 дек 2008
    Сообщения:
    5
    Симпатии:
    1
    Ни чем, они практически одинаковы, хотя мне кажется через массив строк будет медленнее...
     
  8. Brevis

    Brevis Создатель

    Регистр.:
    6 окт 2007
    Сообщения:
    16
    Симпатии:
    7
    Но за то функциональность улучшается: таким образом мы можем пропустить не только 10 первых строк, а вообще любые строки из файла.
     
  9. acvarif

    acvarif Писатель

    Регистр.:
    12 окт 2008
    Сообщения:
    4
    Симпатии:
    0
    А так

    <?php

    $general_file = "file.txt";
    $messages=@file($general_file);
    $ln = count($messages);
    $fp = @fopen("$general_file","w");

    for($i=0; $i < $ln; $i++)
    {
    if(i < 11)
    @fwrite ($fp,"");
    else
    @fwrite($fp,"$messages[$i]");
    }

    ?>
     
  10. imperec

    imperec Писатель

    Регистр.:
    9 мар 2009
    Сообщения:
    3
    Симпатии:
    0
    файл

    надёжно делаеься так
    переписываешь в др файл (backup)

    и исх Файл пишешь начиная с 11 строки

    Добавлено через 1 минуту
    доп файл надо создавать тк если по какми то причинам перезапись прервётся есть всегда backup
     
Статус темы:
Закрыта.