PHP: como verificar se o arquivo de imagem existe?

Preciso ver se existe uma imagem específica no meu CDn.

Eu tentei o seguinte e não funciona:

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 …

Você precisa do nome do arquivo com aspas pelo menos (como string):

 if (file_exists('http://www.mydomain.com/images/'.$filename)) { … } 

Além disso, certifique-se de que $filename esteja devidamente validado. E então, só funcionará quando allow_url_fopen for ativado na sua configuração PHP

 if (file_exists('http://www.mydomain.com/images/'.$filename)) {} 

Isso não funcionou para mim. O jeito que eu fiz foi usando getimagesize.

 $src = 'http://www.mydomain.com/images/'.$filename; if (@getimagesize($src)) { 

Observe que o ‘@’ significará que, se a imagem não existir (nesse caso, a function geralmente lança um erro: getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed ) ele retornará falso.

Bem, file_exists faz algo estranho, não diz se existe um arquivo, ele diz se o caminho existe .

Então, para verificar se é um arquivo, você deve usar o is_file junto com file_exists para saber se existe realmente um arquivo por trás do caminho, caso contrário, file_exists retornará true para qualquer caminho existente.

Aqui está a function que eu uso:

 function fileExists($filePath) { return is_file($filePath) && file_exists($filePath); } 

Tente assim:

 $file = '/path/to/foo.txt'; // 'images/'.$file (physical path) if (file_exists($file)) { echo "The file $file exists"; } else { echo "The file $file does not exist"; } 

Uma coisa que você precisa entender primeiro: você não possui arquivos .
Um arquivo é um assunto de um sistema de arquivos , mas você está fazendo sua solicitação usando um protocolo HTTP que não suporta arquivos, mas URLs.

Então, você precisa solicitar um arquivo inexistente usando seu navegador e ver o código de resposta. se não for 404, você não pode usar nenhum wrapper para ver se existe um arquivo e você precisa solicitar seu cdn usando algum outro protocolo, FTP, por exemplo

Se o arquivo estiver no seu domínio local, não é necessário colocar o URL completo. Somente o caminho para o arquivo. Se o arquivo estiver em um diretório diferente, então você precisará prefaciar o caminho com “.”

 $file = './images/image.jpg'; if (file_exists($file)) {} 

Muitas vezes o “.” é deixado o que fará com que o arquivo seja mostrado como não existente, quando de fato o faz.

Aqui está a maneira mais simples de verificar se existe um arquivo:

 if(is_file($filename)){ return true; //the file exist }else{ return false; //the file does not exist } 
 public static function is_file_url_exists($url) { if (@file_get_contents($url, 0, NULL, 0, 1)) { return 1; } return 0; } 

Existe uma grande diferença entre is_file e file_exists .

is_file retorna true para arquivos (regulares):

Retorna TRUE se o nome do arquivo existir e é um arquivo normal, FALSO caso contrário.

file_exists retorna true para arquivos e diretórios:

Retorna TRUE se o arquivo ou diretório especificado pelo nome do arquivo existir; FALSO caso contrário.


Nota: Verifique também esta pergunta stackoverflow para obter mais informações sobre este tópico.

Você precisa usar o caminho absoluto para ver se o arquivo existe.

 $abs_path = '/var/www/example.com/public_html/images/'; $file_url = 'http://www.example.com/images/' . $filename; if (file_exists($abs_path . $filename)) { echo "The file exists. URL:" . $file_url; } else { echo "The file does not exist"; } 

Se você está escrevendo para CMS ou framework PHP, então eu sei que todos eles definiram constantes para o caminho de raiz do documento.

Por exemplo, o WordPress usa o ABSPATH, que pode ser usado globalmente para trabalhar com arquivos no servidor usando seu código, bem como o URL do site.

Exemplo de WordPress:

 $image_path = ABSPATH . '/images/' . $filename; $file_url = get_site_url() . '/images/' . $filename; if (file_exists($image_path)) { echo "The file exists. URL:" . $file_url; } else { echo "The file does not exist"; } 

Eu vou uma milha extra aqui :). Como este código não precisaria de muita manutenção e bastante sólido, eu escrevê-lo-ia com uma declaração taquigráfica se:

 $image_path = ABSPATH . '/images/' . $filename; $file_url = get_site_url() . '/images/' . $filename; echo (file_exists($image_path))?'The file exists. URL:' . $file_url:'The file does not exist'; 

Declaração da estenografia IF explicada:

 $stringVariable = ($trueOrFalseComaprison > 0)?'String if true':'String if false'; 

Você pode usar a function file_get_contents para acessar arquivos remotos. Consulte http://php.net/manual/en/function.file-get-contents.php para obter detalhes.

tente isso:

 if(file_exists(FCPATH . 'uploads/pages/' . $image)){ unlink(FCPATH . 'uploads/pages/' . $image); } 

Leia primeiro 5 bytes de HTTP usando fopen() e fread() e use isso:

 DEFINE("GIF_START","GIF"); DEFINE("PNG_START",pack("C",0x89)."PNG"); DEFINE("JPG_START",pack("CCCCCC",0xFF,0xD8,0xFF,0xE0,0x00,0x10)); 

para detectar a imagem.

você pode usar o CURL. Você pode obter o CURL apenas para lhe dar os headers, e não o corpo, o que pode torná-lo mais rápido. Um domínio ruim sempre pode demorar um pouco porque você estará aguardando o pedido de tempo limite; você provavelmente poderia alterar o tempo limite usando CURL.

Aqui está o exemplo:

 function remoteFileExists($url) { $curl = curl_init($url); //don't fetch the actual page, you only want to check the connection is ok curl_setopt($curl, CURLOPT_NOBODY, true); //do request $result = curl_exec($curl); $ret = false; //if request did not fail if ($result !== false) { //if request was ok, check response code $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($statusCode == 200) { $ret = true; } } curl_close($curl); return $ret; } $exists = remoteFileExists('http://stackoverflow.com/favicon.ico'); if ($exists) { echo 'file exists'; } else { echo 'file does not exist'; } 

file_exists lê não apenas arquivos, mas também caminhos. então, quando o $filename está vazio, o comando funcionaria como se estivesse escrito assim:

 file_exists("http://www.example.com/images/") 

se o diretório / imagens / existir, a function ainda retornará true .

Normalmente escrevo assim:

 // !empty($filename) is to prevent an error when the variable is not defined if (!empty($filename) && file_exists("http://www.example.com/images/$filename")) { // do something } else { // do other things } 

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á true para is_file($filepath)

Se você estiver usando curl, você pode tentar o seguinte script:

 function checkRemoteFile($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); // don't download content curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if(curl_exec($ch)!==FALSE) { return true; } else { return false; } 

}

URL de referência: https://hungred.com/how-to/php-check-remote-email-url-image-link-exist/