PHP - fwrite () сохранит файл немедленно? - PullRequest
9 голосов
/ 01 июля 2010

Это мой код:

$zplHandle = fopen($target_file,'w');
fwrite($zplHandle, $zplBlock01);
fwrite($zplHandle, $zplBlock02);
fwrite($zplHandle, $zplBlock03);
fclose($zplHandle);

Когда файл будет сохранен?Это сразу после записи или после закрытия?

Я спрашиваю об этом, потому что у меня есть Printfil , прослушивающий файлы в папке и печатающий любой файл, который только что был создан.Если PHP фиксирует сохранение сразу после fwrite, я могу столкнуться с проблемами Printfil, не фиксирующими последующие записи.

Спасибо за помощь.

Ответы [ 4 ]

11 голосов
/ 01 июля 2010

PHP может или не может писать контент сразу.Между ними есть слой кэширования.Вы можете заставить его писать, используя fflush () , но вы не можете заставить его ждать, пока вы не используете только один fwrite ().

5 голосов
/ 01 июля 2010

Я сделал небольшой кусочек кода, чтобы проверить его, и кажется, что после fwrite новый контент будет обнаружен немедленно, а не после fclose.

Вот мой тест на Linux.

#!/usr/bin/env php
<?php
$f = fopen("file.txt","a+");
for($i=0;$i<10;$i++)
{
    sleep(1);
    fwrite($f,"something\n");
    echo $i," write ...\n";
}
fclose($f);
echo "stop write";
?>

После запуска сценария PHP я использую tail -f file.txt для обнаружения нового контента. И он показывает новое содержимое одновременно с тегом вывода php.

2 голосов
/ 01 июля 2010

файл будет сохранен на fclose.если вы хотите поместить содержимое в файл раньше, используйте fflush () .

1 голос
/ 01 июля 2010

Предполагая, что вы работаете в PHP 5.x, попробуйте вместо этого file_put_contents (), поскольку он объединяет open / write / close в один вызов. http://us3.php.net/manual/en/function.file-put-contents.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...