Foros del Web » Programando para Internet » PHP »

Mostrar imagen usando require !!!! (Tuenti)

Estas en el tema de Mostrar imagen usando require !!!! (Tuenti) en el foro de PHP en Foros del Web. Verán, tengo una web restrictiva que comprueba si la sesión está iniciada y si tu IP no está baneada, y si pasan este filtro te ...
  #1 (permalink)  
Antiguo 21/12/2012, 14:23
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Busqueda Mostrar imagen usando require !!!! (Tuenti)

Verán, tengo una web restrictiva que comprueba si la sesión está iniciada y si tu IP no está baneada, y si pasan este filtro te muestra la imagen que deseas.

Es decir, tengo PonerImagen.php?file=flores.png, y este script en PHP hace lo siguiente:

Código:
      $file = 'Imagenes\\'.$_GET['file'];

        $file = imagecreatefrompng($file);
        header("Content-type: image/png");
        header("Cache-Control: no-cache, must-revalidate");
        header("Expires: Fri, 10 Jan 2000 09:00:00 GMT");
        header("Pragma: no-cache");
        imagepng($file);

Todo perfecto. Solo hay UN PROBLEMA, no puedo enviar cabeceras si antes uso require_once o algún include. La cuestión es, ¿cómo podría lidiar con este problema? Es muy importante, ya que ningún usuario no registrado y con la IP baneada tiene derecho a ver las imágenes (tipo Tuenti, para que os hagáis una idea).

Espero que me puedan ayudar.
Gracias de antemano.
  #2 (permalink)  
Antiguo 21/12/2012, 14:27
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Mostrar imagen usando require !!!! (Tuenti)

El error de las cabeceras es típico, y la solución es común.

Lee lo siguiente: http://www.forosdelweb.com/wiki/PHP:...n_line_4%22%3F
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 21/12/2012, 15:39
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Información Respuesta: Mostrar imagen usando require !!!! (Tuenti)

mmm... NO...
Sé perfectmanente que es un error típico y que no se puede hacer. Pido otra manera de hacer lo que estaba haciendo :).

Última edición por kies89; 21/12/2012 a las 15:51
  #4 (permalink)  
Antiguo 21/12/2012, 16:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Mostrar imagen usando require !!!! (Tuenti)

¿Ya leíste el enlace?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 21/12/2012, 17:00
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: Mostrar imagen usando require !!!! (Tuenti)

si tiene razon @pateketrueke si revisas los archivos a los que haces require quizas encuentres algun espacio e inclusive algun warning que se envie antes...
__________________
>> abimaelmartell.com
  #6 (permalink)  
Antiguo 21/12/2012, 17:37
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Mostrar imagen usando require !!!! (Tuenti)

Error: No se puede mostrar la imagen "http://localhost/PonerImagen.php?file=flores.png" porque contiene errores.

mm.. es que error no me da ninguno, el código está perfecto, solo que no se pueden enviar cabeceras después de hacer un require, y uso varios requires que necesito al principio de PonerImagen.php, ¿entonces no se puede hacer nada? Necesito las funciones de los requires (y no estoy como para copiar y pegarlas a cada archivo que cree para estos usos).

Ayuda plez.
  #7 (permalink)  
Antiguo 21/12/2012, 17:45
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Mostrar imagen usando require !!!! (Tuenti)

Para que puedas ver el error con claridad comenta las lineas de los headers, porque de que hay errores los hay, pero al tratarse de una imagen el mensaje que observas lo muestra el navegador.

Eso o revisar lo que Firebug te muestra, o los logs de error.

Formas de saber que pasa hay muchas.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 21/12/2012, 18:06
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: Mostrar imagen usando require !!!! (Tuenti)

los requires no intervienen en las cabeceras, los archivos que haces require quizas envian algo. Trata de omitir la etiqueta de cierre de PHP ?> y asi no envias espacios en blanco
pon algo de codigo porfa
__________________
>> abimaelmartell.com
  #9 (permalink)  
Antiguo 21/12/2012, 19:01
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Mostrar imagen usando require !!!! (Tuenti)

PonerImagen.php
Código:
<?php
require_once("usuarios.php");
//require_once("IP.php"); // Si descomento esta línea no se muestra la imagen

// [...] Ejecutamos código que comprueba si estamos registrado y no estamos baneado

      $filename = $_GET['file'];
      $file = "Images\\".$filename;

        $file = imagecreatefrompng($file);
        header("Content-type: image/png");
        header("Cache-Control: no-cache, must-revalidate");
        header("Expires: Fri, 10 Jan 2000 09:00:00 GMT");
        header("Pragma: no-cache");
        imagepng($file);
?>




IP.php
Código:
<?php
function getRealIP()
{
 
   if( isset($_SERVER['HTTP_X_FORWARDED_FOR']) )
   {
      $client_ip = 
         ( !empty($_SERVER['REMOTE_ADDR']) ) ? 
            $_SERVER['REMOTE_ADDR'] 
            : 
            ( ( !empty($_ENV['REMOTE_ADDR']) ) ? 
               $_ENV['REMOTE_ADDR'] 
               : 
               "unknown" );
 
      // los proxys van añadiendo al final de esta cabecera
      // las direcciones ip que van "ocultando". Para localizar la ip real
      // del usuario se comienza a mirar por el principio hasta encontrar 
      // una dirección ip que no sea del rango privado. En caso de no 
      // encontrarse ninguna se toma como valor el REMOTE_ADDR
 
      $entries = preg_split('[, ]', $_SERVER['HTTP_X_FORWARDED_FOR']);
 
      reset($entries);
      while (list(, $entry) = each($entries)) 
      {
         $entry = trim($entry);
         if ( preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", $entry, $ip_list) )
         {
            // http://www.faqs.org/rfcs/rfc1918.html
            $private_ip = array(
                  '/^0\./', 
                  '/^127\.0\.0\.1/', 
                  '/^192\.168\..*/', 
                  '/^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..*/', 
                  '/^10\..*/');
 
            $found_ip = preg_replace($private_ip, $client_ip, $ip_list[1]);
 
            if ($client_ip != $found_ip)
            {
               $client_ip = $found_ip;
               break;
            }
         }
      }
   }
   else
   {
      $client_ip = 
         ( !empty($_SERVER['REMOTE_ADDR']) ) ? 
            $_SERVER['REMOTE_ADDR'] 
            : 
            ( ( !empty($_ENV['REMOTE_ADDR']) ) ? 
               $_ENV['REMOTE_ADDR'] 
               : 
               "unknown" );
   }
 
   return $client_ip;
 
}
?>
  #10 (permalink)  
Antiguo 22/12/2012, 14:56
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Desacuerdo Respuesta: Mostrar imagen usando require !!!! (Tuenti)

¿Nadie sabe? :(.
  #11 (permalink)  
Antiguo 22/12/2012, 15:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Mostrar imagen usando require !!!! (Tuenti)

Cita:
Iniciado por abimex Ver Mensaje
los requires no intervienen en las cabeceras, los archivos que haces require quizas envian algo. Trata de omitir la etiqueta de cierre de PHP ?> y asi no envias espacios en blanco
pon algo de codigo porfa
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 22/12/2012, 15:54
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Mostrar imagen usando require !!!! (Tuenti)

Si quito los <?php me da error...
  #13 (permalink)  
Antiguo 22/12/2012, 16:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Mostrar imagen usando require !!!! (Tuenti)

Nadie ha dicho que quites todos, ¿entiendes lo que es la etiqueta de cierre?

Como regla general de PHP, si el archivo contiene únicamente funciones, clases y código que no se ejecuta por si mismo puedes omitir la etiqueta de cierre.

Cita:
<?php (apertura)
?> (cierre)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 22/12/2012, 18:09
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 15 años, 11 meses
Puntos: 12
Respuesta: Mostrar imagen usando require !!!! (Tuenti)

Es raro tu error ya que no muestra necesariamente un error de headers, probaste dejando
<?php
ob_start();

eso no es muy elegante pero puede ayudar.

Saludos.
__________________
Hosting en Chile en Silverhost - La solución en Hosting en Chile.

Etiquetas: require, usando, usuarios
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 03:56.