Вы можете сделать это напрямую, используя несколько функций php, fseek()
, ftell()
, fgetc()
и fgets()
(первая часть скрипта просто установит указатель файла на последнюю строку):
$fp = fopen( 'file.txt', 'a+') or die('Failed to open file: file.txt');
// Way 1
fseek( $fp, SEEK_END, 0); // Go to the end of file
$max = ftell( $fp); // Get max/end position
for( $i = $max-1; $i >= 0; $i--){
fseek( $fp, $i, SEEK_SET);
if( fgetc( $fp) == "\n")){
break;
}
}
// Way 2
$length = 0;
while( ($row = fgets( $fp)) !== false){
$length = strlen( $row);
}
fseek( $fp, -$length, SEEK_CUR);
Теперь у вас есть указатель файла в начале последней строки, теперь вам нужно прочитать последнюю строку и переместить файл назад, чтобы иметь возможность перезаписать его.
$pos = ftell( $fp);
$line = trim( fgets( $fp));
fseek( $fp, $pos, SEEK_SET);
А теперь увеличить, переписать и сохранить:
fwrite( $fp, $line+1);
fclose($fp);
Я строго рекомендую , используя flock()
вот так:
$fp = fopen( 'file.txt', 'a+') or die('Failed to open file: file.txt');
if( !flock($fp, LOCK_EX)){
fclose( $fp);
die( 'Cannot get exclusive lock: file.txt');
}
// The code mentioned above
flock($fp, LOCK_UN);
fclose( $fp);
Примечание: приведенный выше пример (с fwrite( $fp, $line+1)
) работает только в том случае, если вы пишете «строки» одинаковой или большей длины, если вам нужно написать более короткую строку, вам нужно использовать ftruncate()
.