2010-07-01 53 views
9

Đây là mã của tôi:PHP - Sẽ fwrite() lưu tệp ngay lập tức?

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

Khi nào tệp sẽ được lưu? Có ngay lập tức sau khi viết cho nó hay sau khi đóng nó?

Tôi yêu cầu điều này vì tôi có Printfil đang nghe các tệp trong một thư mục và in bất kỳ tệp nào vừa được tạo. Nếu PHP cam kết lưu ngay lập tức sau fwrite, tôi có thể gặp sự cố Printfil không ghi lại các lần ghi tiếp theo.

Cảm ơn sự giúp đỡ của bạn.

Trả lời

3

Tôi đã tạo một đoạn mã nhỏ để kiểm tra và có vẻ như sau fwrite nội dung mới sẽ được phát hiện ngay lập tức, không phải sau fclose.

Đây là bài kiểm tra của tôi trên 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"; 
?> 

Sau khi chạy kịch bản PHP, tôi sử dụng tail -f file.txt để phát hiện các content.And mới Nó cho thấy nội dung mới đồng thời là thẻ đầu ra của php.

+0

OK. Ít nhất điều đó cũng đưa ra một số ý tưởng về khả năng tuôn ra trước thời gian dự kiến. Tôi sẽ làm việc dựa trên kết quả kiểm tra của bạn. Cảm ơn Spawn! – Nirmal

2

tệp sẽ được lưu trên fclose. nếu bạn muốn đưa nội dung vào tệp trước, hãy sử dụng fflush().

9

PHP có thể hoặc không thể ghi nội dung ngay lập tức. Có một lớp bộ nhớ đệm ở giữa. Bạn có thể buộc nó viết bằng cách sử dụng fflush(), nhưng bạn không thể bắt buộc phải đợi trừ khi bạn chỉ sử dụng một hàm fwrite().

+0

Đúng; OTOH, nó chắc chắn sẽ viết nội dung (và phát hành khóa tập tin) khi bạn gọi fclose(). – Piskvor

+0

@Piskvor: Khi nào phần mềm theo dõi thư mục sẽ nhận ra tệp mới được tạo? Nó sẽ được sau khi lưu hoặc sau khi phát hành khóa? Điều này là rất quan trọng bởi vì có khoảng 8000 khối nội dung văn bản được ghi vào tệp và chương trình giám sát sẽ không được kích hoạt ở bất kỳ đâu. Cảm ơn bạn đã đầu vào. – Nirmal

+0

Tôi không biết, hãy hỏi những người của PrintFil. – Sjoerd

Các vấn đề liên quan