PHP - Будет fwrite () сразу сохранили файл?

Это - мой код:

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

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

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

Спасибо за справку.

9
задан Nirmal 1 July 2010 в 09:19
поделиться

4 ответа

Я сделал небольшой фрагмент кода, чтобы проверить это, и кажется, что после 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.

5
ответ дан 4 December 2019 в 11:03
поделиться

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

2
ответ дан 4 December 2019 в 11:03
поделиться

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

1
ответ дан 4 December 2019 в 11:03
поделиться

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

11
ответ дан 4 December 2019 в 11:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: