2011-05-22 32 views
5

在PHP中,我將使用file_put_contents($filename, $data);
來編寫(創建)該文件。沒關係,但我想要檢測進程的結束事件。

當前,頁面顯示加載狀態。
這是目前我可以知道它完成與否的方式。

我想用代碼檢測。如何用php中的file_put_contents()檢測結束?

+0

可能複製..也許這個環節是非常有用的http://stackoverflow.com/a/21842519/4519636 – Zakynthos 2016-02-18 19:09:15

回答

9

這是一個阻塞I/O調用,因此它在函數調用返回時結束。返回值是寫入的字節數(成功後)。

+2

+1明確的答案,參考這裏:http://php.net/file- put-contents – Jonah 2011-05-22 00:52:07

+0

好吧,現在我看到'file_put_contents()'返回文件大小,完成。 此外,我可以檢測'之前'的大小? 我用過:'file_get_contents()'。如果是這樣,我可以檢測到進程是否成功寫入全部字節(或)。 – Alvin 2011-05-22 01:07:58

+1

文件大小(之前或之後)可以通過調用'filesize()' – 2011-05-22 01:17:01

5

它把一切都擱置,直到它結束了

所以,你可以使用這樣的事情來確定何時完成寫入文件。

echo "The file's contents are now being written, please wait."; 
file_put_contents($filename, $data); 
echo "The file's contents have been written."; 
3

首先從遠程位置檢索標頭Content-Length。您可以使用get_headers來做到這一點。像這樣:

$headers = get_headers($url, 1); 
echo "To download: " . $headers['Content-Length'] . " bytes.<br />"; 
+0

這會一直工作嗎?或者,有沒有情況下,Web應用程序或服務器拒絕給你只是頭? get_headers方法也發送HEAD或GET? – rzetterberg 2011-05-22 01:47:22

+0

Woooooooooooow!是!!非常感謝小技巧! ;) – Alvin 2011-05-22 01:49:59

+0

我不認爲服務器可以拒絕發送標頭的東西。並從頁面:「如果任何人都好奇,像我一樣,這個函數不會發送HEAD動詞,而是發送一個GET。在我的情況下,這不是一個理想的選擇,因爲我需要一種快速獲取HTTP狀態的方法(200 ,404等)GET的問題在於,對於像我這樣的情況,我不希望所有的數據返回開銷。「 – Ryan 2011-05-22 01:50:02