2011-03-02 45 views
4

我使用PHP調用Java命令,然後將其結果轉發到名爲result.txt的文件中。例如,該文件包含: 「結果是:5.0」 但函數filesize()返回0,當我通過'ls -l'命令檢查時它也是0.因爲我決定將結果打印到屏幕上文件大小!= 0因此沒有打印。我怎樣才能獲得大小?或另一種解決方案?PHP問題:filesize()返回包含少量數據的文件0?

+0

不是使用'filesize()',你可以打開文件並使用'strlen()'來查看文件中是否有一個或多個字符。 – 2011-03-02 12:18:10

回答

10

docs,當您調用filesize時,PHP會將此結果緩存到stat緩存中。

您是否嘗試清除統計緩存?

clearstatcache(); 

如果它不工作,可能的解決方法是打開文件,尋找到結束,然後用ftell

$fp = fopen($filename, "rb"); 
fseek($fp, 0, SEEK_END); 
$size = ftell($fp); 
fclose($fp); 

如果你實際上是計劃顯示輸出給用戶,你可以閱讀,而不是整個文件,然後strlen

$data = file_get_contents($filename); 
$size = strlen($data); 
+0

在結束我取消鏈接結果文件,所以我認爲它的緩存也被清除。我更喜歡你所建議的file_get_contents()函數。非常感謝 – Silentbang 2011-03-02 12:51:23

0

你使用哪個函數?
因爲exec()可以直接將結果賦值給一個變量,所以也許不需要將輸出保存到文件中,如果你只是想用PHP加載。

+0

是的,我使用exec()。我試着按照你的建議:exec(「java st $ str」,$ result)with $ str是參數和結果是array()然後var_dump它但它沒有輸出任何信息 – Silentbang 2011-03-02 12:38:15

+0

@silentbang,也許這就是你最初的問題。如果$結果沒有長度,爲什麼將它放入一個文件然後讀取文件有什麼不同? – gnur 2011-03-02 12:43:18

+0

哦不。現在它神奇地工作。謝謝 – Silentbang 2011-03-02 12:50:00

0

你說:

我使用PHP來調用Java命令,然後向前 到一個名爲 的Result.txt文件的結果。

誰寫的結果?

1.The JAVA programm?

2.您是否在PHP中捕獲輸出並將其寫入文件。

3.你只是重定向命令行輸出?

如果1和3之間的結果寫入文件時可能會有延遲,實際上,當您使用PHP讀取文件時,如果您不等待執行結束,則可以讀取它它甚至被寫入結果。

+0

我通過exec()函數使用'>'符號重定向結果。在幾小時之後,它的大小仍然保持不變(0) – Silentbang 2011-03-02 12:42:03

+0

您應該嘗試捕獲PHP中的輸出,請參閱http://php.net/manual /en/function.exec.php關於如何做到這一點 – Catalin 2011-03-02 15:37:33