确定文件是否为空(php)的最佳方法是什么?

时间:2011-01-31 23:09:20

标签: php

我在我的模板中包含了custom.css文件,以允许网站所有者添加自己的css规则。但是,当我发送文件时,它是空的,如果他们没有添加任何规则,就没有意义加载它。

确定它是否为空的最佳方法是什么?

if ( 0 == filesize( $file_path ) )
{
    // file is empty
}

// OR:

if ( '' == file_get_contents( $file_path ) )
{
    // file is empty
} 

5 个答案:

答案 0 :(得分:49)

file_get_contents()将在filesize()使用stat()时读取整个文件以确定文件大小。使用filesize(),它应该消耗更少的磁盘I / O和更少的内存。

答案 1 :(得分:9)

使用filesize()显然更好。它使用stat(),根本不需要打开文件。

file_get_contents()读取整个文件。想象一下如果你有一个10GB的文件会发生什么。

答案 2 :(得分:8)

每个人在使用filesize时都要小心,因为它的结果会被缓存以获得更好的性能。因此,如果您需要更高的精度,建议使用以下内容:

<?
clearstatcache();
if(filesize($path_to_your_file)) {
    // your file is not empty
}

More info here

答案 3 :(得分:5)

filesize()会更有效率,但可能会产生误导。如果有人只是在那里有评论,甚至只是空格......这会使文件大一些。 IMO你应该在文件中寻找特定的东西,比如第一行的/* enabled=true */,然后使用fopen / fread来读取第一行。如果它不存在,请不要加载它。

答案 4 :(得分:1)

正如其他答案所述,filesize用于本地文件的方式。另一方面,许多流包装器(包括HTTP)支持stat(),因此filesize将失败,而file_get_contents将起作用。