Я включаю файл 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
будут работать.