Подтвердить что ты не робот

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

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

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

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

// OR:

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

Ответ 1

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

Ответ 2

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

file_get_contents() читает весь файл.. представьте, что произойдет, если у вас есть файл размером 10 ГБ.

Ответ 3

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

Ответ 4

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

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

Дополнительная информация здесь

Ответ 5

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