Você deve 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 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:
$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";
}
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:
$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';
Explicação da instrução IF abreviada:
$stringVariable = ($trueOrFalseComaprison > 0)?'String if true':'String if false';