|
|
|
| Здравствуйте ещё раз, у меня снова к вам вопрос. Мне нужно удалить две последние строки из файла.Число строк в файле может быть разным. В поиске нашел тему, попробовал воспользоваться подсказкой под свой код, но ничего не получилось.
$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);
|
В чем я допустил ошибку и как её исправить? | |
|
|
|
|
|
|
|
для: maxtet
(01.02.2009 в 22:03)
| |
<?php
// Открываем файл если он существует
if(file_exists($file))
{
$f=fopen($file, "r+t") or die("Невозможно открыть файл");
// Блокируем файл (разделяемая блокировка)
flock($f, LOCK_SH); // ждём завершения процесса записи
// В файл теперь никто не пишет, можно читать
if(filesize($file)>0)
{
$cont=explode("\n",fread($f,filesize($file))); // считываем файл
fclose($f); // закрываем файл
}
$f=fopen($file, "r+t") or die("Невозможно открыть файл");
// Блокируем файл (блокировка с запретом "подвисания")
while(!flock($f, LOCK_EX+LOCK_NB))
{
sleep(1); // ждём одну секунду
}
// Файл заблокирован, можно производить запись
ftruncate($f,0);
for ($i = 0; $i > count ($cont) - 2; $i++)
{
fwrite($f, $cont[$i]."\n");
}
}
else
{
$cont="Файл не существует";
}
|
Примерно, вот так для маленьких по объёму файлов, для больших файлов подход совсем иной.
Но раз уж Вам не нужны мои коментарии, то чао... | |
|
|
|
|
|
|
|
для: Valick
(01.02.2009 в 22:24)
| | Ошибка обнаружилась в этой строке:
for ($i = count ($content); $i > count ($content) - 2; $i--)
|
Правильное условие для цикла выгладит следующим образом:
for ($i = count ($content) - 2; $i < count ($content); $i++)
|
А ваши комментарии, уважаемый, излишни. | |
|
|
|