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

Форум PHP

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

 

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

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

тема: Удаление последних строк из файла
 
 автор: maxtet   (01.02.2009 в 22:03)   письмо автору
 
 

Здравствуйте ещё раз, у меня снова к вам вопрос. Мне нужно удалить две последние строки из файла.Число строк в файле может быть разным. В поиске нашел тему, попробовал воспользоваться подсказкой под свой код, но ничего не получилось.

$content = file ("files/$filename");
  
  for ($i = count ($content); $i > count ($content) - 2; $i--) 
  unset ($content[$i]);
  
  $fd = fopen ("files/$filename", w);
  fwrite ($fd, implode("", $content));
  fclose ($fd);


В чем я допустил ошибку и как её исправить?

  Ответить  
 
 автор: Valick   (01.02.2009 в 22:24)   письмо автору
 
   для: maxtet   (01.02.2009 в 22:03)
 


<?php
// Открываем файл если он существует
    
if(file_exists($file))
        {
        
$f=fopen($file"r+t") or die("Невозможно открыть файл");
// Блокируем файл (разделяемая блокировка)
        
flock($fLOCK_SH);    // ждём завершения процесса записи
// В файл теперь никто не пишет, можно читать
    
if(filesize($file)>0)
      {
        
$cont=explode("\n",fread($f,filesize($file)));    // считываем файл
        
fclose($f);        // закрываем файл
      
}
    
$f=fopen($file"r+t") or die("Невозможно открыть файл");
// Блокируем файл (блокировка с запретом "подвисания")
    
while(!flock($fLOCK_EX+LOCK_NB))
        {
        
sleep(1);    // ждём одну секунду
        
}
// Файл заблокирован, можно производить запись
    
ftruncate($f,0);
for (
$i 0$i count ($cont) - 2$i++)
       {
      
fwrite($f$cont[$i]."\n");
       }
        }
    else
        {
        
$cont="Файл не существует";
        }


Примерно, вот так для маленьких по объёму файлов, для больших файлов подход совсем иной.
Но раз уж Вам не нужны мои коментарии, то чао...

  Ответить  
 
 автор: maxtet   (01.02.2009 в 23:11)   письмо автору
 
   для: Valick   (01.02.2009 в 22:24)
 

Ошибка обнаружилась в этой строке:

for ($i = count ($content); $i > count ($content) - 2; $i--)


Правильное условие для цикла выгладит следующим образом:

for ($i = count ($content) - 2; $i < count ($content); $i++)


А ваши комментарии, уважаемый, излишни.

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

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