Ответ 1
file_get_contents()
будет читать весь файл, а filesize()
использует stat()
, чтобы определить размер файла. Используйте filesize()
, он должен потреблять меньше дискового ввода-вывода.
Я включаю файл 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()
читает весь файл.. представьте, что произойдет, если у вас есть файл размером 10 ГБ.
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
будет работать.