перечитать файл, который меняется - PullRequest
2 голосов
/ 06 сентября 2011

Предоставлен следующий пример кода:

<?php
$handle = fopen("/tmp/test_file/sometestfile", "r");
$contents = '';
while (!feof($handle)) {
    $contents = fread($handle, 10);
    print $contents;
    sleep(1);
}
fclose($handle);
?> 

Если sometestfile, который является txt-файлом в моем случае, изменяется во время цикла чтения, почему программа php продолжает чтение из старого файла? Скажем, он полон 1, и я перебираю sometestfile_new поверх него, который полон 2. Я запускаю это на Linux, этот инод связан? Если rewind () добавляется после каждого цикла, новый файл будет прочитан вместо этого после момента перезаписи.

1 Ответ

2 голосов
/ 06 сентября 2011

из php.net

resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )

fopen() привязывает именованный ресурс, определенный filename, к потоку.

fopen(), как только он будет назван, он "кеширует" файл и выведет в указанном вами методе, например, ваш $contents = fread($handle, 10);

Вы можете удалить файл, и он все равно будет читать этот ресурс, пока не завершит файл !feof($handle)

Вы ничего не можете сделать с fopen(), вы просто не можете перечитать источник и продолжить его печать.

...