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

Форум PHP

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

 

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

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

тема: Как удалить первые несколько строк из файла?
 
 автор: nikita2206   (14.06.2010 в 00:41)   письмо автору
 
 

Собственно нужно удалить несколько строк из файла... Известно что эти строки находятся в самом начале, и от остального содержимого (которое удалять не нужно) их отделяет двойной перенос строки (то-есть фактически мне нужно удалить заголовки из файла).
Но соль в том, что этот файл может весить несколько мегабайт и перебирать весь файл будет довольно накладно... Есть ли функции в пхп, позволяющие вот так управлять файлами?

  Ответить  
 
 автор: Tonik992   (14.06.2010 в 02:35)   письмо автору
 
   для: nikita2206   (14.06.2010 в 00:41)
 

Есть такое предложение решения:
1.открыть файл с помощью fopen("somefile.txt","r");
2.искать два подряд символа перевода строки (использовать ф-ю посимвольного чтения файла fgetc($handle)... читая символ, происходит смещение файлового указателя...... "можно и другими путями")..
3.далее использовать функцию fpassthru ($handle), которая читает указанный файловый указатель $handle с текущей позиции до EOF..
тем самым ты урежешь свои лишние строки, и получишь оставшийся результат... его можно либо в переменную, либо записать в отдельный файл.

  Ответить  
 
 автор: Trianon   (14.06.2010 в 03:21)   письмо автору
 
   для: Tonik992   (14.06.2010 в 02:35)
 

его можно записать в тот же самый файл, при чем совсем необязательно читать хвост целиком - достаточно кусками подходящего размера.

  Ответить  
 
 автор: nikita2206   (14.06.2010 в 11:27)   письмо автору
 
   для: Tonik992   (14.06.2010 в 02:35)
 

Все хорошо, но проблема в том, что мне этого как-раз не надо. Мне нужно просто имеющийся файл на жестком диске обрезать...

И кстати я кажется нашел решение, в более низкоуровневых функциях доступа к файловой системе (dio) есть функция с говорящим названием dio_truncate(), но проблема в том, что начиная с версии 5.0.6, кажется, расширение php_dio убрали из PHP, а мне нужно то, что будет еще и работать на рядовом хостинге. Короче проблема нерешаема, придется использовать код вроде этого:
<?php
$fileName 
'...'// Это будет задано заранее

$header '';
$mark   FALSE// Конец заголовков еще не достигнут
$fp     fopen($fileName'r'); // Читаем файл
$fpW    fopen($fileName.'.copy''w'); // В этот файл будем писАть
while(!feof($fp)){
    if(
$markfwrite($fpWfread($fp0x1000)); // Конец заголовка достигнут? - значит пишем файл
    
else{
        
$str fgets($fp);
        if(
trim($str) == ''$mark TRUE;
        else 
$header .= $str// Да-да, заголовки мне тоже нужно собрать
    
}
}
unlink($fileName);
rename($fileName.'.copy'$fileName);

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

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