Preciso ver se existe uma imagem específica no meu cdn.
Tentei o seguinte e não funcionou:
if (file_exists(http://www.example.com/images/$filename)) {
echo "The file exists";
} else {
echo "The file does not exist";
}
Mesmo que a imagem exista ou não exista, sempre diz "O arquivo existe". Não sei por que não está funcionando ...
file_exists
para um local remoto será muito lento.Respostas:
Você precisa do nome do arquivo entre aspas pelo menos (como string):
Além disso, certifique-se de que
$filename
está devidamente validado. E então, ele só funcionará quandoallow_url_fopen
estiver ativado em sua configuração de PHPfonte
Isso não funcionou para mim. A maneira como fiz isso foi usando getimagesize.
Observe que o '@' significa que se a imagem não existir (nesse caso, a função normalmente geraria um erro
getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed
:) ela retornará falso.fonte
@getimagesize('//path/to/image.jpg')
não funcionará).Bem,
file_exists
não diz se existe um arquivo, mas sim se existe um caminho . ⚡⚡⚡⚡⚡⚡⚡Portanto, para verificar se é um arquivo, você deve usar em
is_file
conjunto comfile_exists
para saber se realmente existe um arquivo atrás do caminho, caso contráriofile_exists
retornarátrue
para qualquer caminho existente.fonte
Tente assim:
fonte
Esta é a maneira mais simples de verificar se existe um arquivo:
fonte
Uma coisa que você precisa entender primeiro: você não tem arquivos .
Um arquivo é um assunto de um sistema de arquivos , mas você está fazendo sua solicitação usando o protocolo HTTP, que não suporta arquivos, mas URLs.
Portanto, você deve solicitar um arquivo inexistente usando seu navegador e ver o código de resposta. se não for 404, você não conseguirá usar nenhum wrapper para ver se existe um arquivo e terá que solicitar seu cdn usando algum outro protocolo, FTP por exemplo
fonte
fonte
Se o arquivo estiver em seu domínio local, você não precisa inserir o URL completo. Apenas o caminho para o arquivo. Se o arquivo estiver em um diretório diferente, será necessário inserir "."
Muitas vezes, o "." é deixado de fora, o que fará com que o arquivo seja mostrado como não existente, quando de fato existe.
fonte
Existe uma grande diferença entre
is_file
efile_exists
.is_file
retorna verdadeiro para arquivos (regulares):file_exists
retorna verdadeiro para arquivos e diretórios:Nota: Verifique também esta questão stackoverflow para obter mais informações sobre este tópico.
fonte
Você deve usar o caminho absoluto para ver se o arquivo existe.
Se você está escrevendo para o framework CMS ou PHP, pelo que eu sei, todos eles definiram uma constante para o caminho da raiz do documento.
por exemplo, o WordPress usa ABSPATH, que pode ser usado globalmente para trabalhar com arquivos no servidor usando o seu código, bem como a url do site.
Exemplo de Wordpress:
Estou dando um passo a mais aqui :). Como esse código não precisaria de muita manutenção e seria bastante sólido, eu o escreveria com a instrução if abreviada:
Explicação da instrução IF abreviada:
fonte
você pode usar cURL. Você pode fazer com que o cURL forneça apenas os cabeçalhos, e não o corpo, o que pode torná-lo mais rápido. Um domínio inválido sempre pode demorar um pouco porque você estará aguardando o tempo limite da solicitação expirar; você provavelmente poderia alterar a duração do tempo limite usando cURL.
Aqui está um exemplo:
fonte
Você pode usar a
file_get_contents
função para acessar arquivos remotos. Consulte http://php.net/manual/en/function.file-get-contents.php para obter detalhes.fonte
Se estiver usando curl, você pode tentar o seguinte script:
}
URL de referência: https://hungred.com/how-to/php-check-remote-email-url-image-link-exist/
tente isto:
fonte
Se o caminho para sua imagem for relativo à raiz do aplicativo, é melhor usar algo assim:
Exemplo de uso para esta função:
Eu acho que é uma boa ideia criar algo como uma biblioteca para verificar a existência de imagens aplicáveis a diferentes situações. Acima, muitas respostas excelentes que você pode usar para resolver essa tarefa.
fonte
Leia os primeiros 5 bytes do HTTP usando
fopen()
e, emfread()
seguida, use:para detectar a imagem.
fonte
file_exists
lê não apenas arquivos, mas também caminhos. então, quando$filename
estiver vazio, o comando será executado como se estivesse escrito assim:se o diretório / imagens / existir, a função ainda retornará
true
.Eu normalmente escrevo assim:
fonte
file_exists($filepath)
retornará um resultado verdadeiro para um diretório e caminho de arquivo completo, portanto, nem sempre é uma solução quando um nome de arquivo não é passado.is_file($filepath)
só retornará verdadeiro para caminhos de arquivo completosfonte
você precisa do caminho do servidor com file_exists
por exemplo
fonte
Está trabalhando para mim.
fonte