Лучший способ определить, пустой ли файл (php)?

Я включаю файл custom.css в свой шаблон, чтобы владельцы сайтов могли добавлять свои собственные правила CSS. Однако, когда я отправляю файл, его пустой и нет смысла загружать его, если они не добавили никаких правил к нему.

Каков наилучший способ определить, является ли его пустым?

if ( 0 == filesize( $file_path ) ) { // file is empty } // OR: if ( '' == file_get_contents( $file_path ) ) { // file is empty } 

file_get_contents() прочитает весь файл, а filesize() использует stat() чтобы определить размер файла. Используйте filesize() , он должен потреблять меньше дискового ввода-вывода.

Использование filesize() явно лучше. Он использует stat() который не должен открывать файл вообще.

file_get_contents() читает весь файл. Представьте, что произойдет, если у вас 10GB-файл.

filesize() будет более эффективным, однако это может ввести в заблуждение. Если бы у кого-то были просто комментарии или даже просто пробелы … это сделало бы размер файла больше. ИМО вы должны искать что-то конкретное в файле, например /* enabled=true */ в первой строке, а затем использовать fopen / fread, чтобы просто прочитать первую строку. Если его там нет, не загружайте его.

Все должны быть осторожны при использовании filesize , потому что его результаты кэшируются для повышения производительности. Поэтому, если вам нужна более высокая точность, рекомендуется использовать что-то вроде:

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

Больше информации здесь

Как упоминалось в других ответах, filesize – это путь для локальных файлов . У многих потоковых оболочек, в том числе и на HTTP, нет поддержки stat() , поэтому filesize будет работать, тогда как file_get_contents будут работать.