Foros del Web » Programando para Internet » PHP »

Leer imagen de URL externa php

Estas en el tema de Leer imagen de URL externa php en el foro de PHP en Foros del Web. Buenas He buscado y rebuscado, pero no encuentro el modo de hacerlo. Busco mostrar una imagen simplemente pasando a una página elnombre de la imagen ...
  #1 (permalink)  
Antiguo 27/11/2007, 05:58
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Leer imagen de URL externa php

Buenas

He buscado y rebuscado, pero no encuentro el modo de hacerlo.
Busco mostrar una imagen simplemente pasando a una página elnombre de la imagen por URL. Quiero que nadie pueda saber a que URL pertenece la imagen.

El problema está en que quiero que luego la página .php que tiene como origen la imagen llame a la imagen por su nombre PERO a otro hosting externo.

Lo intenté con readfile(), pero readfile pide el nombre de la ruta o imagen, por lo visto no deja que le den una ruta externa al servidor...

Hice esto por ahora:
Código PHP:
error_reporting(E_ALL);
$image $_GET['i'];
$carpeta $_GET['c'];
$image"imgs/" .$carpeta "/" $image ".jpg";   
$ext substr($image, -3); 
header("Content-Type: image/jpeg"); 
readfile($image); 
Pero readfile nome permite poner algo así:
Código PHP:
readfile('http://www.URLEXTERNA.com/img/1.jpg'); 
Me da el siguiente error:
Código PHP:
Warningreadfile(): URL file-access is disabled in the server configuration in /var/www/vhost/miweb.com/home/html/imagen.php on line 9

Warning
readfile(http://www.web-externa.es/imgs/1/1.jpg): failed to open stream: no suitable wrapper could be found in /var/www/vhost/miweb.com/home/html/imagen.php on line 9 
Esta es la linea 9 suponiendo que $image tiene como valor una ruta externa a mi hosting.
Código PHP:
readfile($image); 
  #2 (permalink)  
Antiguo 27/11/2007, 06:22
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Re: Leer imagen de URL externa php

readfile() si acepta URLs, pero lo que pasa es que tu servidor esta configurado para no permitirlo.

Esto se controla solo desde el php.ini con la opcion allow_url_fopen (http://es2.php.net/manual/en/ref.fil...llow-url-fopen). Asi que para hacerlo de esta forma debes cambiar esa configuracion. Si estas alojado con una empresa, habla con ellos.
  #3 (permalink)  
Antiguo 27/11/2007, 06:57
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Leer imagen de URL externa php

Muchas gracias por la respuesta.
Efectivamente tengo un hosting en una empresa y no tengo acceso al php.ini.

¿De todos modos, se te ocurre algún otro modo de hacer que no se pueda ver desde donde carga la imagen?

Gracias
  #4 (permalink)  
Antiguo 27/11/2007, 09:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Leer imagen de URL externa php

Puedes utilizar fsockopen para abrir un apuntador a la imagen, leerla y almacenarla en un string y posteriormente mostrarla con imagejpg.

Saludos.
  #5 (permalink)  
Antiguo 27/11/2007, 12:13
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Leer imagen de URL externa php

Cita:
Iniciado por GatorV Ver Mensaje
Puedes utilizar fsockopen para abrir un apuntador a la imagen, leerla y almacenarla en un string y posteriormente mostrarla con imagejpg.

Saludos.
¿Y eso come transferencia de datos además de la de la imagen?
¿Y como se podría hacer?

Muchas gracias.
  #6 (permalink)  
Antiguo 27/11/2007, 12:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Leer imagen de URL externa php

Readfile, y fopen ambos trabajan cuando tu le das un URL con fsockopen, o sea que hacen una transmision de datos.

Si tu usas fsockopen es como si trabajaras directo con las funciones de fondo.

Saludos.
  #7 (permalink)  
Antiguo 27/11/2007, 14:57
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Leer imagen de URL externa php

Gracias, pero no acabo de enterderlo muy bien...
Por ahora intento conectarme así:

Código PHP:
$errno="Error1";
$errstr="Error2";
$da=fsockopen("www.webexterna.es"80$errno$errstr30);

$image $_GET['i'];
$carpeta $_GET['c'];
$image"imgs/" .$carpeta "/" $image ".jpg";   
header("Content-Type: image/jpeg"); 
readfile($image); 
Pero no me muestra nada, solamente la ruta de la URL de entrada...

No acabo de pillarlo, si me puedes ayudar te lo agradecería mucho.
Gracias.
  #8 (permalink)  
Antiguo 27/11/2007, 15:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Leer imagen de URL externa php

Cuando te conectas con sockets tienes que entablar una conversacion con el servidor usando el protocolo HTTP.

Tienes que pedirle al servidor la imagen para que la puedas enviar al cliente:
Código PHP:
$image $_GET['i'];
$carpeta $_GET['c'];
$image"imgs/" .$carpeta "/" $image ".jpg";    

$fs fsockopen"www.webexterna.es"80$errno$errstr30 );
$command "GET /$image HTTP/1.1\r\n";
$command .= "Host: www.webexterna.es\r\n";
$command .= "Connection: Close\r\n\r\n";

fwrite$fs$command );

header("Content-Type: image/jpeg");
while( 
$data fread$fs1024 ) ) {
      echo 
$data;
}

fclose$fs ); 
Saludos.
  #9 (permalink)  
Antiguo 27/11/2007, 15:29
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Leer imagen de URL externa php

Muchas gracias por la rápida respuesta y por molestarte.
Pero... aún no me sale :S no se por qué.
Lo único que sale por pantalla es la ruta de la url en la que estoy.

Imaginemos que la imagen que quiero cargar esta aquí:
http://www.webexterna.es/imgs/1.jpg

Como lo haría, ¿así? :
Código PHP:
$image"imgs/1.jpg";    

$fs fsockopen"www.webexterna.es"80$errno$errstr30 );
$command "GET /$image HTTP/1.1\r\n";
$command .= "Host: www.webexterna.es\r\n";
$command .= "Connection: Close\r\n\r\n";

fwrite$fs$command );

header("Content-Type: image/jpeg");
while( 
$data fread$fs1024 ) ) {
      echo 
$data;
}
fclose$fs ); 
Una pregunta, ¿para qué el while si solo quiero cargar una imagen?

Gracias.
  #10 (permalink)  
Antiguo 27/11/2007, 15:32
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 6 meses
Puntos: 25
Re: Leer imagen de URL externa php

Por que simplemente no pones la url de la imagen ? y listo ejemplo

$imagen = "www.sitioweb.com/imagenes/imagen.jpg";

// Codigo para manipular mi imagen.
  #11 (permalink)  
Antiguo 27/11/2007, 16:02
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Leer imagen de URL externa php

Cita:
Iniciado por eddwinpaz Ver Mensaje
Por que simplemente no pones la url de la imagen ? y listo ejemplo

$imagen = "www.sitioweb.com/imagenes/imagen.jpg";

// Codigo para manipular mi imagen.
Aún así no me sale...
Me sale esto tal cual:
http://miweb.com/imagen.php?i=1&c=1
  #12 (permalink)  
Antiguo 27/11/2007, 16:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Leer imagen de URL externa php

Cual es el mensaje de error que te sale?, recuerda que para cargar la imagen debes de usar una etiqueta IMG, o en dado caso leerla directo desde el navegador.

Saludos.
  #13 (permalink)  
Antiguo 27/11/2007, 16:41
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Leer imagen de URL externa php

La imagen la cargo así desde un archivo "hola.php" por ejemplo, que contiene esto:

Código HTML:
<img src="imagen.php?i=<?=$i?>&c=<?=$c?>"> 
Este archivo hace cargar al código que está en imagen.php

Y no me da mensaje de error, simplemente aparecere la ruta de la url como bien dije.
Algo tal que así:

www.miweb.com/imagen.php?i=1&c=1

Gracias.
  #14 (permalink)  
Antiguo 27/11/2007, 16:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Leer imagen de URL externa php

A mi me aparece esto al abrir la direccion URL que planteas:
Código:
Not Found
The requested URL /imagen.php was not found on this server.

Apache/1.3.9 Ben-SSL/1.37 Server at www.mibank.com Port 80
Que codigo tienes en imagen.php?

Saludos.
  #15 (permalink)  
Antiguo 27/11/2007, 17:06
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Leer imagen de URL externa php

Bueno, es que mi web no se llama www.miweb.com simplemente la puse como ejemplo :)

No me da error alguno. Me muestra la url que está en la barra de direcciones.

este es el código que tengo en imagen.php

Código PHP:
<?php
$image 
$_GET['i'];
$carpeta $_GET['c'];

$image"www.webexterna.es/" .$carpeta "/" $image ".jpg";    

$fs fsockopen"www.webexterna.es"80$errno$errstr30 );
$command "GET /$image HTTP/1.1\r\n";
$command .= "Host: www.webexterna.es\r\n";
$command .= "Connection: Close\r\n\r\n";

fwrite$fs$command );

header("Content-Type: image/jpeg");
while( 
$data fread$fs1024 ) ) {
      echo 
$data;
}

fclose$fs );  
?>

Última edición por IMAC/; 28/11/2007 a las 07:00
  #16 (permalink)  
Antiguo 27/11/2007, 17:13
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 6 meses
Puntos: 25
Re: Leer imagen de URL externa php

<?
$imagen = "http://www.forosdelweb.com/fdwtheme/images/buttons/quote.gif";


?>

<img src="<? echo $imagen; ?>">
  #17 (permalink)  
Antiguo 27/11/2007, 17:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Leer imagen de URL externa php

Tendrias que verificar si $fs es un puntero valido para ver si te pudiste comunicar a la pagina externa, y adicionalmente leer los primeros mensajes que te responde el servidor.

El codigo que yo te puse es para que lo uses de ejemplo, necesitas checar errores y checar la respuesta del servidor.

Saludos.
  #18 (permalink)  
Antiguo 27/11/2007, 17:33
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Leer imagen de URL externa php

I did :
Código PHP:
if($fs){
  echo 
"blblababla"
}else{
  echo 
"nada";

Y si, $fs existía y imprimió "blablabla"
  #19 (permalink)  
Antiguo 27/11/2007, 17:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Leer imagen de URL externa php

Quita el header( "Content-type... para que veas que texto esta retornando el servidor.

Saludos.
  #20 (permalink)  
Antiguo 27/11/2007, 21:08
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 6 meses
Puntos: 25
Re: Leer imagen de URL externa php

usa print_r(); Para ver que esta pasando.
  #21 (permalink)  
Antiguo 28/11/2007, 06:58
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Leer imagen de URL externa php

Cita:
Iniciado por GatorV Ver Mensaje
Quita el header( "Content-type... para que veas que texto esta retornando el servidor.

Saludos.
Ok, me sale esto:
Código PHP:

HTTP
/1.1 404 Not Found DateWed28 Nov 2007 12:57:36 GMT ServerApache Content-Length421 Connectionclose Content-Typetext/htmlcharset=iso-8859-1
Not Found

The requested URL 
/http://www.webexterna.es/1/1.jpg was not found on this server.

Additionallya 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Apache Server at www.webexterna.es Port 80 
  #22 (permalink)  
Antiguo 28/11/2007, 08:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Leer imagen de URL externa php

Pues creo el problema es claro, la imagen que quieres leer no existe.

Saludos.
  #23 (permalink)  
Antiguo 28/11/2007, 11:56
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Re: Leer imagen de URL externa php

GatorV:
Considerando que lo que quiere hacer el amigo IMAC/
es que sus usuarios no sepan de donde viene la imagen.

Hay que recordar que la funcion fsockopen() para poderse utilizar
hay que asegurarse que en el php.ini este activado o mejor dicho en el directorio donde esta php.exe debe estar el archivo php_sockets.dll que se encuentra
en el directorio EXT de php.
Simplemente hay que hacer un copy and paste para los que utilizamos windows como nuestro sistema operativo; asimismo, hay que hacer las modificaciones en el archivo php.ini que esta en el direstorio windows.

Saludos
Y espero ayude
Franco
  #24 (permalink)  
Antiguo 28/11/2007, 12:22
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Re: Leer imagen de URL externa php

Resulta que la imagen si que existe y la ruta es correcta, pero parece que no funciona.

He probado a cambiar la ruta completa en la variabl $imagen por una relativa suponinedo que me conecta bien con el otro server:
$image= "" .$carpeta . "/" . $image . ".jpg";

Y ahora me sale este otro error :

Código PHP:
HTTP/1.1 200 OK DateWed28 Nov 2007 18:18:34 GMT ServerApache Last-ModifiedMon26 Nov 2007 12:34:50 GMT ETag"d8a49-20a0-30baae80" Accept-Rangesbytes Content-Length8352 Connectionclose Content-Typeimage/jpeg ÿØÿà&#65533;JFIF������ÿþ�;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 95 ÿÛ�C�        ÿÛ�C  ÿÀ��q�–"�ÿÄ�����������  ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ��������  ÿÄ�µ��w�!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ� ��?�Ôžf Û~å2>x±ùsߟ֒[t†xÄëO!YòqëMÒâ7¢;–˜EofÉ *8þɦù‰؃½º¯g¾:qï_È°©N)+»Îí»£Ìºû5âÆ\|§ ¶3ÁÛéîjU‹ìú›ˆ"2B[t¤¶[ØñJŽïVŠID1—w È:Ž¼ŸJËÔ¯¼ØŠ–¬Ž~Ð3÷“ÐyÏÖ¶Srz+#êõÜÝÔYÓdé;ÿ�+€Ý=óŸ×*2ËV–èý*š>Ï™€;çŒçÿ�¯Ò¹y¼@ë#h–ñoW·;Ýb¸AÛÿ�¯ZZ*¡³PÁˆ8ëœpzc®:+E¤nÑ¥µ±¹ox,Òày¥–BÃ$ €_ÃŒçó’×[’¶€Lv„)Á9 _SY ,¦¸O´ˆÍÌøÛa20$äœÎ;v®‚-: ™ „5È ~P¹êG»ÓuéA]ÿ�_ÖÅ*rlŠÒÞâöä‹Øc*ç,Â,+Œô9'<ä{V…å¶k§Ës«ý–+h�gyöR0wsß·=x¬*WÅÚ^’ÿ�aS-õÔ*û‹ UŸnlýÕìY°; ž Oëõô:·Š¤ß$8’ÛOG>M³ €@ÜÝ··=p$TK¯4´þºª)»"ÝýΣâBm´ÉfÓì°Ò¹)q8ê6½öÏé·‚]-*†f¶ZˆÕHÛ\qœîcïø“Þ´à²{vxËåØçrñÛ¢ÿ�‰þU^¬ÀZDŠ¦1¹ÝܾôÎycîj~µ¬‘JŠ[™%iÁ]¾éˆg Ð�?µ¡i¤¦“#\\IæJ˸úòM_†ÖÏGS Šƒ#rîzŒž¿Êœ¶ºÝK %ä<çß=(…dÙ5–3ÖÞîkƒ%ÔL¨@~Ÿ—à}¹§.ÒU.ã©$…àg*iËš¾be™ ? 
Bueno es un poco más largo, pero es eso basicamente.

Luego he vuelto a poner el header("Content-Type: image/jpeg");
Y me sale lo mismo que os dije antes, la URL de la barra de direcciones, no más.

Respecto a lo que dice franco190453, pues como el hosting es comprado no tengo acceso al php.ini y no puedo modificarlo.

Gracias.
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 18:55.