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

Sco*_*t B 38 php

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

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

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

// OR:

if ( '' == file_get_contents( $file_path ) )
{
    // file is empty
} 
Run Code Online (Sandbox Code Playgroud)

Spl*_*ter 54

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

  • ......并且消耗更少的内存 (9认同)
  • 只是想指出,如果文件在调用filesize()之前更改调用clearstatcache(),或者您将获得缓存结果.这发生在我身上. (4认同)

use*_*ond 14

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

<?
clearstatcache();
if(filesize($path_to_your_file)) {
    // your file is not empty
}
Run Code Online (Sandbox Code Playgroud)

更多信息在这里

  • 这是行不通的,因为手册明确指出`filesize`参数必须为字符串。`fopen`返回一个资源。 (2认同)

Thi*_*ter 9

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

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

  • 想象一下你的网站加载10GB CSS文件需要多长时间:P (5认同)

Cra*_*ent 5

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