Necesito ver si existe una imagen específica en mi cdn.
He intentado lo siguiente y no funciona:
if (file_exists(http://www.example.com/images/$filename)) {
echo "The file exists";
} else {
echo "The file does not exist";
}
Incluso si la imagen existe o no, siempre dice "El archivo existe". No estoy seguro de por qué no funciona ...
file_exists
a una ubicación remota será muy lento.Respuestas:
Necesita el nombre del archivo entre comillas al menos (como cadena):
Además, asegúrese de que
$filename
esté debidamente validado. Y luego, solo funcionará cuandoallow_url_fopen
esté activado en su configuración de PHPfuente
Esto no funcionó para mí. La forma en que lo hice fue usando getimagesize.
Tenga en cuenta que '@' significará que si la imagen no existe (en cuyo caso la función normalmente arrojaría un error
getimagesize(http://www.mydomain.com/images/filename.png) [function.getimagesize]: failed
:) devolverá falso.fuente
@getimagesize('//path/to/image.jpg')
no funcionará).Bueno,
file_exists
no dice si existe un archivo, dice si existe una ruta . ⚡⚡⚡⚡⚡⚡⚡Por lo tanto, para verificar si es un archivo, debe usarlo
is_file
junto confile_exists
para saber si realmente hay un archivo detrás de la ruta; de lo contrariofile_exists
, volverátrue
para cualquier ruta existente.fuente
Intente así:
fuente
Esta es la forma más sencilla de comprobar si existe un archivo:
fuente
Una cosa que tienes que entender primero: no tienes archivos .
Un archivo es un tema de un sistema de archivos , pero está realizando su solicitud utilizando el protocolo HTTP que no admite archivos, excepto URL.
Por lo tanto, debe solicitar un archivo inexistente usando su navegador y ver el código de respuesta. si no es 404, no puede usar ningún contenedor para ver si existe un archivo y debe solicitar su cdn usando algún otro protocolo, FTP por ejemplo
fuente
fuente
Si el archivo está en su dominio local, no es necesario que ingrese la URL completa. Solo la ruta al archivo. Si el archivo está en un directorio diferente, entonces debe anteponer la ruta con "."
A menudo, el "." se deja fuera, lo que hará que el archivo se muestre como no existente, cuando de hecho lo hace.
fuente
Existe una gran diferencia entre
is_file
yfile_exists
.is_file
devuelve verdadero para archivos (normales):file_exists
devuelve verdadero tanto para archivos como para directorios:Nota: Consulte también esta pregunta de stackoverflow para obtener más información sobre este tema.
fuente
Tienes que usar la ruta absoluta para ver si el archivo existe.
Si está escribiendo para el marco CMS o PHP, hasta donde yo sé, todos ellos han definido una constante para la ruta raíz del documento.
por ejemplo, WordPress usa ABSPATH que se puede usar globalmente para trabajar con archivos en el servidor usando su código así como la URL del sitio.
Ejemplo de Wordpress:
Estoy haciendo un esfuerzo adicional aquí :). Debido a que este código no necesitaría mucho mantenimiento y es bastante sólido, lo escribiría con una declaración abreviada if:
Declaración abreviada IF explicada:
fuente
puedes usar cURL. Puede hacer que cURL solo le proporcione los encabezados, y no el cuerpo, lo que podría hacerlo más rápido. Un dominio incorrecto siempre puede tardar un tiempo porque estará esperando que se agote el tiempo de espera de la solicitud; probablemente podría cambiar la duración del tiempo de espera usando cURL.
He aquí un ejemplo:
fuente
Puede utilizar la
file_get_contents
función para acceder a archivos remotos. Consulte http://php.net/manual/en/function.file-get-contents.php para obtener más detalles.fuente
Si está utilizando curl, puede probar el siguiente script:
}
URL de referencia: https://hungred.com/how-to/php-check-remote-email-url-image-link-exist/
prueba esto :
fuente
Si la ruta a su imagen es relativa a la raíz de la aplicación, es mejor usar algo como esto:
Ejemplo de uso de esta función:
Creo que es una buena idea crear algo como una biblioteca para verificar la existencia de la imagen aplicable a diferentes situaciones. Hay muchas respuestas excelentes que puede utilizar para resolver esta tarea.
fuente
Lea los primeros 5 bytes de HTTP usando
fopen()
yfread()
luego use esto:para detectar imagen.
fuente
file_exists
lee no solo archivos, sino también rutas. así que cuando$filename
está vacío, el comando se ejecutará como si estuviera escrito así:si el directorio / imágenes / existe, la función seguirá regresando
true
.Normalmente lo escribo así:
fuente
file_exists($filepath)
devolverá un resultado verdadero para un directorio y una ruta de archivo completa, por lo que no siempre es una solución cuando no se pasa un nombre de archivo.is_file($filepath)
solo devolverá verdadero para rutas de archivo completasfuente
necesitas la ruta del servidor con file_exists
por ejemplo
fuente
Funciona para mi.
fuente