2011-03-02 64 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