2010-12-29 4 views
3

У меня есть файл большой и вам нужно удалить последние 512 байт. Я не хочу дублировать файл.PHP: Как удалить последние N байтов из большого файла?

Спасибо.

+0

Насколько велика? 1 МБ? 1 ГБ? – BoltClock

+0

Можете ли вы прочитать файл в памяти? – alexn

+1

@alexn: Наверное, это не очень хорошая идея. – BoltClock

ответ

10

Вы должны использовать ftruncate(handle, file_size - 512) (получить размер файла с filesize или fstat функция)

+0

Спасибо. Это то, что я хотел. – SaltLake

+2

Как это работает в большом файле? Обращайтесь с ним нормально? – profitphp

+0

@profitphp Havenot тестировал его с реальными большими файлами, но с файлами 200-300 Mb работает отлично. – SaltLake

2

Пример использования с fstat, ftruncate, fopen и fclose:

<?php  

$bytesToTruncate = 5; // how many bytes we are going to delete from the end of the file 

$handle = fopen('/home/francesco/mytest', 'r+'); // Open for reading and writing; place the file pointer at the beginning of the file. 

$stat = fstat($handle); 
$size = $stat['size'] - $bytesToTruncate; 
$size = $size < 0 ? 0 : $size; 

ftruncate($handle, $size); 
fclose($handle);