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

确定文件是否为空的最佳方法(php)?,php,Php,我在模板中包含一个custom.css文件,允许网站所有者添加他们自己的css规则。但是,当我发送文件时,它是空的,如果他们没有添加任何规则,那么加载它就没有意义 确定其是否为空的最佳方法是什么 if ( 0 == filesize( $file_path ) ) { // file is empty } // OR: if ( '' == file_get_contents( $file_path ) ) { // file is empty } file\u get\

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

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

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

// OR:

if ( '' == file_get_contents( $file_path ) )
{
    // file is empty
} 
file\u get\u contents()
将读取整个文件,而
filesize()
使用
stat()
确定文件大小。使用
filesize()
,它应该消耗更少的磁盘I/O和更少的内存。

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


file\u get\u contents()
读取整个文件。。想象一下,如果您有一个10GB的文件,会发生什么情况。

filesize()
会更有效,但可能会产生误导。如果有人只是在那里有评论,甚至只是空白…这将使文件的大小更大。在我看来,您应该在文件中查找特定的内容,如第一行的
/*enabled=true*/
,然后使用fopen/fread读取第一行。如果它不在那里,不要加载它

如其他答案中所述,
filesize
是处理本地文件的方法。另一方面,许多流包装器,包括HTTP,没有
stat()
支持,因此
filesize
将失败,而
file\u get\u内容
将工作。

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

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

想象一下你的网站加载10GB CSS文件需要多长时间:PI想象一下,经过进一步思考,仅仅加载一个空CSS可能比麻烦地测试它是否为空以避免加载危害更小。对于小文件(没有阅读CSS部分),这并不重要。filesize()仍然更快、更好——如果inode(甚至是文件系统的缓存或PHP的内部stat缓存)不可用,为什么要从硬盘上读取文件的内容包含您需要的所有信息。@ThieMaster我能想到的唯一原因是确定CSS文件是否确实包含值得加载的信息。例如,如果它只包含空格,那么包含它就没有多大意义。我想这是一种速度/准确性的权衡+1无论如何都要获取有用的信息。保存时只需执行以下操作:删除注释并修剪()。如果它是空的,根本不保存它。不过,没有什么不好的,结果是错误的。这个检查没有那么重要…但是如果文件是空的,只加载它也不是什么大问题。只是说,“…如果你想像加载一个空文件那样赚大钱,你也可以把它算作“重要的”…并且消耗更少的内存只是想指出,如果文件正在更改,在调用filesize()之前调用clearstatcache(),或者你会得到缓存结果。这发生在我身上。这不起作用,因为手册明确规定
filesize
参数必须是字符串
fopen
返回一个资源。@Nicero,谢谢,你说得对。我已经编辑了代码。