Preciso verificar se um arquivo está no HDD em um local especificado ($ path. $ File_name).
Qual é a diferença entre is_file()
e file_exists()
funções e que é melhor / mais rápido para uso em PHP?
Preciso verificar se um arquivo está no HDD em um local especificado ($ path. $ File_name).
Qual é a diferença entre is_file()
e file_exists()
funções e que é melhor / mais rápido para uso em PHP?
Respostas:
is_file()
retornará false
se o caminho fornecido apontar para um diretório. file_exists()
retornará true
se o caminho fornecido apontar para um arquivo ou diretório válido . Portanto, dependeria inteiramente de suas necessidades. Se você quiser saber especificamente se é um arquivo ou não, use is_file()
. Caso contrário, use file_exists()
.
is_file()
é o mais rápido, mas o benchmark recente mostra que file_exists()
é um pouco mais rápido para mim. Então eu acho que depende do servidor.
Meu benchmark de teste:
benchmark('is_file');
benchmark('file_exists');
benchmark('is_readable');
function benchmark($funcName) {
$numCycles = 10000;
$time_start = microtime(true);
for ($i = 0; $i < $numCycles; $i++) {
clearstatcache();
$funcName('path/to/file.php'); // or 'path/to/file.php' instead of __FILE__
}
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "$funcName x $numCycles $time seconds <br>\n";
}
Edit: @Tivie obrigado pelo comentário. Número alterado de ciclos de 1000 para 10k. O resultado é:
quando o arquivo existir :
is_file x 10000 1,5651218891144 segundos
file_exists x 10000 1,5016479492188 segundos
is_readable x 10000 3,7882499694824 segundos
quando o arquivo não existe :
is_file x 10000 0,23920488357544 segundos
file_exists x 10000 0,22103786468506 segundos
is_readable x 10000 0,21929788589478 segundos
Editar: moveu o clearstatcache (); dentro do loop. Obrigado CJ Dennis.
is_file()
mais rápido do que file_exists()
. Se você sabe que é um arquivo (e não um diretório), use-o definitivamente.
is_dir()
acabar sendo 20% mais rápido do que file_exists()
(o que não acontece, aliás), isso pode ser uma diferença importante se você estiver apenas procurando dirs de qualquer maneira ...
Nem.
is_file () pode retornar verdadeiro se o arquivo não existir.
file_exists () pode retornar verdadeiro se o arquivo for um diretório.
Portanto, se ele precisa ser um arquivo e precisa existir, você precisa de ambos.
A velocidade não importa aqui porque eles não são iguais. Use apenas um se apenas uma função for importante e será mais rápido.
Sei que esse post é antigo, mas a diferença entre essas funções não está apenas no comportamento. Se você usar is_file () para verificar a existência de um arquivo grande, vá para mais de 2. Você vai se surpreender. Arquivo não existe. :( Mas se você verificar com file_exists (), isso funciona.