Foros del Web » Programando para Internet » PHP »

Sobre file_exists()

Estas en el tema de Sobre file_exists() en el foro de PHP en Foros del Web. Estoy usando esta funcion para ver si existe un archivo (imagen) en el mismo servidor pero en otro dominio, pero no logro hacerlo andar,... nunca ...
  #1 (permalink)  
Antiguo 13/04/2006, 16:24
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 12 años
Puntos: 0
Sobre file_exists()

Estoy usando esta funcion para ver si existe un archivo (imagen) en el mismo servidor pero en otro dominio, pero no logro hacerlo andar,... nunca encuentra la imagen, siempre FALSE, cuando se fehacientemente que la imagen existe.

Puede ser que no funcione entre diferentes dominios?
Como puedo hacer esto?

Gracias
  #2 (permalink)  
Antiguo 13/04/2006, 17:39
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
qué php estás usando?

vale una mirada al manual....
www.php.net/file_exists

donde dice:
Cita:
Sugerencia: A partir de PHP 5.0.0, esta funcion tambien puede usarse con algunas URL como nombre de fichero. Consultar Apéndice M, para obtener una lista con soporte para la funcionalidad stat().
y si vas al Apéndice M, en la parte de HTTP.....
(http://www.php.net/manual/es/wrappers.http.php)
Cita:
Soporte stat() No
aunque, en la sección de ftp....
(http://www.php.net/manual/es/wrappers.ftp.php)
Cita:
Soporte stat() No A partir de PHP 5.0.0: Sólo los elementos filesize(), filetype(), file_exists(), is_file(), e is_dir(). A partir de PHP 5.1.0: filemtime().
Por lo que tu única opción para usar file_exists() en un servidor remoto es (por ahora) usar PHP 5 y acceder al archivo mediante FTP.


Saludos.
  #3 (permalink)  
Antiguo 13/04/2006, 17:54
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 12 años
Puntos: 0
Uso PHP4,... no entiendo muy bien la diferenciacion entre HTTP y FTP.

Yo al archivo accedo via HTTP, y quiero mostrarlo también por una web.
Según leo en esos links,... "Las conexiones HTTP son de sólo-lectura", lo cual me sirve entiendo.

El tema es el siguiente,... lo que necesito mostrar son imagenes, las cuales se encuentran en otro dominio (quiero aclarar que ambos sitios son mios, no etoy robando imagenes ni transferencia). Y a veces esas imagenes pueden ser JPG, y a veces GIF.

Por eso pensaba hacer un if para buscar la imagen en el otro dominio como JPG primero, si no existía la buscaba como GIF, y si no existía tampoco mostraba una imagen default. Alguna idea de como puedo hacer esto?. Soy muy malo con php, cuanto mas didáctico sabré comprender.
  #4 (permalink)  
Antiguo 13/04/2006, 18:04
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
lo que dice la primera cita de mi primer mensaje, es que tenés que revisar el apéndice M para ver qué protocolos soporta la función stat(), entendiendo que esta función es la base de otras funciones, entre las que está file_exists().

Es decir, que si el protocolo que estás usando (HTTP) no es soportado por stat(), pos tampoco será soportado por file_exists().

Este soporte, según dicen las otras citas y los otros enlaces, fue añadido en php 5 y por ahora no para HTTP sino para FTP.

Espero que ahora me entiendas.

Pero pasando a tu 2º mensaje, como bien decís http tiene soporte de lectura, por lo que perfectamente podés hacer fopen() con el archivo que querés.

Si fopen() no puede abrir el archivo, devuelve FALSE, lo que podés comprobar fácilmente con un if....
Código PHP:
if (fopen("http://www.sitio.com/archivo") !== false) {
# es decir, si NO devolvió FALSE
# ya sabés que el archivo existe, lo procesás como mejor te parezca.
}
else {
# no existe el que buscaste, probá con el otro.


Saludos.
  #5 (permalink)  
Antiguo 13/04/2006, 18:21
 
Fecha de Ingreso: diciembre-2005
Mensajes: 354
Antigüedad: 12 años
Puntos: 0
En principio me tiraba el siguietne Warning:
Warning: fopen() expects at least 2 parameters, 1 given

Mirando en php.net la funcion fopen, le agregé el r para indicarle que era solamente para lectura, quedando: if (fopen($v_img.'.jpg', r) !== false ) {

Si la imagen existen, todo bien.
Ahora, cuando la imagen no existe, no solamente me muestra la imagen default que estipulé, sinó que tira el siguiente error:

Warning: fopen(dominio/archivo): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found

Como puedo hacer para evitar me tire este error?

PD: Puse "dominio/archivo" por que el foro no me permite publicar url's por tener menos de 15 post. pero en realidad lo puse con el http, la triple www y demás.


UPDATE: Ya lo soucioné,... puse el @ delante de la funcion, y esconde el error. No se si esto es recomendable o correcto.
Mil Gracias
  #6 (permalink)  
Antiguo 13/04/2006, 19:40
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
sí, es la forma correcta de ocultar errores, para eso está.
si pudieras, deberías comprobar que el archivo existe antes de usar fopen, pero ese es justamente el problema, no?

igual no hay mayores inconvenientes que ese mensaje de error escondido.


Saludos.
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 01:22.