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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как обрезать заданный обьём с конца файла?

Сообщения:  [1-10]   [11-16] 

 
 автор: Atheist_?   (03.04.2008 в 13:09)   письмо автору
 
   для: cheops   (03.04.2008 в 12:49)
 

Ладно. На этот раз меня словили.

   
 
 автор: cheops   (03.04.2008 в 12:49)   письмо автору
 
   для: Atheist   (02.04.2008 в 13:57)
 

>А если файл 100 Mb? 1 Gb?
файл 10 Кб

   
 
 автор: Atheist   (02.04.2008 в 13:57)   письмо автору
 
   для: cheops   (31.03.2008 в 11:34)
 

> <?php
> $contents = file_get_contents("file.txt");
> $part = substr($contents, -3072);
> ?>

А если файл 100 Mb? 1 Gb? ftruncate() для этого существует.

   
 
 автор: Qiao   (02.04.2008 в 09:12)   письмо автору
 
   для: Valick   (31.03.2008 в 14:42)
 

У линукса есть комманда logrotate. Она хорошо логи обрабатывает (архивирует, удаляет и т.п. при наступлении условия).

   
 
 автор: Valick   (31.03.2008 в 14:42)   письмо автору
 
   для: Valick   (31.03.2008 в 13:14)
 

А вот так можно писать.

// Функция записи в файл 
function mass_to_file($file, $mass, $line)
    { 
// Создаём файл если он не существует 
// ни в коем случае не используем w или w+ 
    if(!file_exists($file) 
        { 
        fclose(fopen($file, "a+t"); 
        }
// Сохраняем резервную копию файла
copy ($file,"old.bak");
// Открываем файл для чтения и записи в режиме r+t 
// некоторые версии FreeBSD имеют проблемы с режимом а+ 
// и не могут установить указатель на начало файла при помощи fseek 
    $f=fopen($filename, "r+t") or die("Невозможно открыть файл"); 
// Блокируем файл (блокировка с запретом "подвисания") 
    while(!flock($f, LOCK_EX+LOCK_NB)) 
        {
        sleep(1);    // ждём одну секунду
        }
// Файл заблокирован, можно производить запись 
    ftruncate($f, 0); // очищаем файл
    fseek($f, 0, SEEK_SET); // переходим в начало файла
    if (count($mass)<$line)
    { 
    $line=count($mass); // если кол-во элементов массива меньше заданного параметра
                // пишем сколько есть
    }
    for ($i=0; $i<$line; $i++)
    {
    fwrite ($f, $mass[$i]."\r\n") ; // записываем строку из массива
    }
    fclose($f);        // закрываем файл 
    return; 
    } 


Если где-то допустил ошибку надеюсь меня поправят.

   
 
 автор: Valick   (31.03.2008 в 13:14)   письмо автору
 
   для: Valick   (31.03.2008 в 13:11)
 

Вот так можно считать файл в массив.

// Функция чтения файла 
function file_to_mass($file) 
    { 
// Открываем файл если он существует 
    if(file_exists($file)) 
        { 
        $f=fopen($file, "r+t") or die("Невозможно открыть файл"); 
// Блокируем файл (разделяемая блокировка) 
        flock($f, LOCK_SH);    // ждём завершения процесса записи 
// В файл теперь никто не пишет, можно читать 
        $cont=explode("\n",fread($f,filesize($file)));    // считываем
        fclose($f);        // закрываем файл 
        } 
    else 
        { 
        $cont="Файл не существует"; 
        } 
// Возвращаем значение 
    return $cont; 
    } 


Связка fread+explode работает быстрее чем file. и удаляет лишние символы перевода строки.
Как из массива сохранить нужные строки в файл, напишу познее.

   
 
 автор: Valick   (31.03.2008 в 13:11)   письмо автору
 
   для: Qiao   (31.03.2008 в 12:48)
 

Какую функцию использовать?

Её сначала написать надо, а уже потом использовать. Сейчас попытаюсь это сделать, правда проверить неначем.

   
 
 автор: cheops   (31.03.2008 в 12:55)   письмо автору
 
   для: Qiao   (31.03.2008 в 12:48)
 

Можно разбить содержимое файла построчно при помощи функции file(), которая возвращает массив, каждый элемент которого содержит одну строку. Берите последние 10 элементов массива.

   
 
 автор: Qiao   (31.03.2008 в 12:48)   письмо автору
 
   для: Valick   (31.03.2008 в 12:22)
 

Так вот я и спрашиваю - как это делать? Как удалить всё после n-ой строки? Какую функцию использовать?

   
 
 автор: Valick   (31.03.2008 в 12:22)   письмо автору
 
   для: Qiao   (31.03.2008 в 12:15)
 

Тогда и file_get_contents() зачем использовать? Чем не нравится фОпен? Логи пишуться сторками вот и читать можно строками, зачем к байтам привязываться?

   

Сообщения:  [1-10]   [11-16] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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