Foros del Web » Programando para Internet » PHP »

Detectar si una url externa existe

Estas en el tema de Detectar si una url externa existe en el foro de PHP en Foros del Web. Hola, estoy intentando detectar si existe una imagen de una url externa, he probado con file_exist, con is_file, con CURL, con file_get_contents, etcétera pero nada, ...
  #1 (permalink)  
Antiguo 05/10/2023, 04:51
 
Fecha de Ingreso: junio-2007
Mensajes: 298
Antigüedad: 16 años, 10 meses
Puntos: 5
Detectar si una url externa existe

Hola, estoy intentando detectar si existe una imagen de una url externa, he probado con file_exist, con is_file, con CURL, con file_get_contents, etcétera pero nada, no lo consigo.

El código básico sería algo así como:

$url = "https://otroservidor.com/imagen/img11.jpg";
if (file_exists($url)) {
echo "SI";
}
else {
echo "No";
}

¿Cómo conseguis vosotros saber si existe esa imagen?

Gracias por adelantado.
  #2 (permalink)  
Antiguo 05/10/2023, 06:42
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: Detectar si una url externa existe

Cita:
Iniciado por schattenburg Ver Mensaje
Hola, estoy intentando detectar si existe una imagen de una url externa, he probado con file_exist, con is_file, con CURL, con file_get_contents, etcétera pero nada, no lo consigo.

El código básico sería algo así como:

$url = "https://otroservidor.com/imagen/img11.jpg";
if (file_exists($url)) {
echo "SI";
}
else {
echo "No";
}

¿Cómo conseguis vosotros saber si existe esa imagen?

Gracias por adelantado.
Hola, entre para ver si podía loguearme hace años que no ingreso, que nostalgia jajaja.
en fin lo que se me ocurre al azar pues vamos a ello,
Si lo que espera es una imagen, deberia saber si la url contine una imagen, pues puede contener cualquier head como respuesta., lo que se me ocurre es algo así:

Código PHP:

<?php

/** opcion 1 */
function imgExists($url) {
    if (
getimagesize($url)) {
        echo 
'es una imagen';
    } else {
        echo 
'no es imagen';
    }
}
imgExists('https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png');

/** opcion 2 */

function imgExists($url) {
    if (
getimagesize($url)) {
        return 
'exite y es una imagen';
    } else {
        return 
'no existe o no es una imagen';
    }
}
echo 
imgExists('https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png');

/** oopcion 3 */

function imgExists($url) {
    return 
getimagesize($url);
}

$file_img imgExists('https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png');

if (
$file_img) {
    echo 
'no es imagen';
} else {
    echo 
'no existe o no es imagen';
}

if (!
$file_img) {
    echo 
'no existe no es imagen';
} else {
    echo 
'es imagen';
}

/**
 * ma guena :D
 * puedes agregar mas funciones y jugar con todos los datos obtenidos
 * @getimagesize retorna un array de info
 * NOTE leeeeeeeeeeeeeeeeeeee!!!
 * @see https://www.php.net/manual/es/function.getimagesize.php
 * ponemos static para evitar estar haciendo new para llamar a la class...
 */

class decimeSiestas
{
    public static function 
estasOnoTas(string $url)
    {
        return 
getimagesize($url);
    }
}

$imgs decimeSiestas::estasOnoTas('https://www.google.com');

if (
$imgs) echo 'hola';

if (!
$imgs) echo 'no exite no es una imgen';

suerte
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -
  #3 (permalink)  
Antiguo 05/10/2023, 07:53
 
Fecha de Ingreso: junio-2007
Mensajes: 298
Antigüedad: 16 años, 10 meses
Puntos: 5
Respuesta: Detectar si una url externa existe

Gracias por tu respuesta pero sigue fallando, da el error de:

Failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden

No me voy a complicar la vida, en el otro servidor me voy a crear un webservice al que le pasaré como parámetro la imagen y que me devuelva si existe o no.

Gracias de todos modos.

Saludos.
  #4 (permalink)  
Antiguo 05/10/2023, 07:57
 
Fecha de Ingreso: junio-2007
Mensajes: 298
Antigüedad: 16 años, 10 meses
Puntos: 5
Respuesta: Detectar si una url externa existe

He creado en el otro servidor un web service que se llama así:

https://www.otroservidor.com/existeImg/pepe.jpg

Y si ejecuto desde el navegador esa URL me dice correctamente si existe o no esa foto. Incluso desde diferentes navegadores o navegando de incógnitos.

Pero cuándo lo llamo desde mi servidor con file_get_contents:

echo file_get_contents("https://www.otroservidor.com/existeImg/pepe.jpg");

Me suelta lo de 403 Forbidden You don't have permission to access this resource.

Lo he probado tb con CURL en vez de file_get_contents pero me da lo mismo.

¿Alguna posible idea?

Gracias.
  #5 (permalink)  
Antiguo 05/10/2023, 12:28
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: Detectar si una url externa existe

file_get_contents puede devolver booleano false pero si recibe otro valor no bool lo tomara como false. debe asegurarse ante de usarlo.

https://www.php.net/manual/es/functi...t-contents.php

Ahora con el error 403 Forbidden

se puede deber a varias asuntos, lo que puede verificar son los permisos de archivos, chmod
observe que tengan los permisos adecuados.

si perciste verifique su archivo .htaccess puede esar corrupto o mal.

en limpio:
las carpetas y archivos del servidor de su sitio tienen sus propios permisos de archivo que controlan quién puede:

Leer / ver los datos del archivo / ver el contenido de una carpeta.
Escribir / modificar el archivo / añadir o eliminar archivos dentro de una carpeta
Ejecutar / ejecutar el archivo y/o ejecutarlo como un script / acceder a una carpeta y realizar
funciones y comandos.

si tiene accesos a estos directorios y archivos verifique que tengan los permisos correctos:
CHMOD para archivos ideal 644 o 640
CHMOD para directorios ideal 755 o 750

para mas informacion lea el manual

https://www.php.net/manual/es/function.chmod.php

saludos
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -
  #6 (permalink)  
Antiguo 06/10/2023, 02:40
 
Fecha de Ingreso: junio-2007
Mensajes: 298
Antigüedad: 16 años, 10 meses
Puntos: 5
Respuesta: Detectar si una url externa existe

Voy a replantear la pregunta para buscar una solución más fácil.

¿Existe en PHP alguna manera para detectar que el src que ha cargado una imagen existe?

Por ejemplo:

<img src="https://otroservidor.com/images/imagenExiste.jpg">

<img src="https://otroservidor.com/images/imagenNoExiste.jpg">

¿Alguna manera para detectar si la imagen no existe? No puedo usar file_exists, ni file_get_contents ni nada que acceda al otro servidor porque me dará 403 Forbidden, solo necesito cuando se muestra la imagen saber si se ha cargado o no se ha cargado una imagen en ese <img>

Gracias por vuestra ayuda.

Última edición por schattenburg; 06/10/2023 a las 02:46
  #7 (permalink)  
Antiguo 06/10/2023, 02:46
 
Fecha de Ingreso: junio-2007
Mensajes: 298
Antigüedad: 16 años, 10 meses
Puntos: 5
Respuesta: Detectar si una url externa existe

Me Respondo a mí mismo, la solución posible es:

<img src="https://www.otroservidor.com/images/pepe.jpg" onload="javascript: alert('OK')" onerror="javascript: alert('KO')" >
  #8 (permalink)  
Antiguo 06/11/2023, 07:04
 
Fecha de Ingreso: noviembre-2007
Mensajes: 191
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Detectar si una url externa existe

Cita:
Iniciado por schattenburg Ver Mensaje
Me Respondo a mí mismo, la solución posible es:

<img src="https://www.otroservidor.com/images/pepe.jpg" onload="javascript: alert('OK')" onerror="javascript: alert('KO')" >
Si necesitas que php se entere, en ves de "alert okey" hacete una funcion que ajax que le envie por parametro el "OK" a php.

Etiquetas: externa, url
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:50.