GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo mostrar las imágenes fuera del directorio raíz web en mi aplicación php?

PHP de forma predeterminada ya puede acceder a archivos fuera de la raíz web, a menos que esté restringido con un open_basedir directiva (o modo seguro, pero espero que no estés en esa jaula).

Normalmente es una buena práctica insertar dentro de una configuración de VirtualHost un open_basedir restricción. Puede especificar varios directorios separados por : en Linux y ; en ventanas.

php_admin_value open_basedir /var/www/s/stage:/usr/share/php:/your/dir

Para acceder a esos archivos, use una ruta absoluta o una ruta relativa a la posición del archivo PHP llamado. (Así que tendrás que ../ para alcanzar los niveles superiores).

También asegúrese de que los directorios en los que desea escribir estén asignados al usuario del servidor web y tengan permiso de escritura.

De lo contrario, tiene una segunda opción:

Dentro de su directorio www, cree un archivo "image.php", con un contenido similar a:

<?php
  header('Content-Type: image/png');
  readfile("../img/" . $_GET['img']);
?>

Y llama a tus imágenes con

<img src="image.php?img=myimage.png" />

Tenga en cuenta que su archivo PHP no debería ser tan simple :) Como es posible que desee abordar múltiples formatos de imagen (y proporcionar el encabezado correcto para ellos), verificar la ruta/inclusiones de archivos maliciosos (no desea usar $ _GET sin validar/desinfectar la entrada), almacenamiento en caché adicional, etc. etc. etc.

Pero esto debería darle una idea de cómo puede abordar su problema.


Tan simple como eso, esto generará la imagen con los encabezados correctos,
recuerde que debe configurar el encabezado () antes de eliminar cualquier cosa del búfer de salida
=> sin eco ni impresión antes

$file = '../../somedirectory/image.jpg';
header('Content-Type:image/jpeg');
header('Content-Length: '.filesize($file));
echo file_get_contents($file);

Para mi aplicación, ninguna de esas respuestas funcionaba:simplemente no podía mostrar la imagen y no era realmente factible para mí agregar un nuevo archivo php para llamar por razones. Lo que SÍ funcionó para mí es

$filename = read_filename_from_database;
$fileDir = "/path/to/files/";
$file = $fileDir . $filename;
if (file_exists($file))
{
     $b64image = base64_encode(file_get_contents($file));
     echo "<img src = 'data:image/png;base64,$b64image'>";
}

Linux
  1. ¿Cómo Instalar R 3.3.1 En El Directorio Propio?

  2. ¿Cómo evitar que los usuarios accedan al directorio raíz?

  3. ¿Cómo puedo medir el uso de memoria real de una aplicación o proceso?

  4. ¿Cómo configurar el símbolo del sistema en Linux para mostrar el directorio actual?

  5. ¿Cómo puedo iniciar un programa como root usando el administrador de ventanas?

Cómo obtener el tamaño de un directorio en Linux

Cómo agregar una aplicación al Dock en el sistema operativo elemental

¿Cómo cambiar el directorio raíz del documento en Plesk?

¿Cuál es la ruta a mi directorio de inicio raíz? ¿Cómo se puede cambiar?

¿Agregar un directorio a Apache Web Root?

¿Cómo puedo ocultar la salida de una aplicación de shell en Linux?