[Php-avanzado] Archivos bajo

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Jue Ago 20 14:00:17 ART 2009


Hola Mario,

El jue, 20-08-2009 a las 07:07 -0700, Mario Gomez Cassou escribió:
> Desde fuera de mi servidor solo se puede acceder al directorio
> /home/cd000325/public_html que es el raiz
> Quiero utilizar en mis scripts archivos que esten por debajo del
> directorio publico y para esto cree
> /home/cd000325/xxx/
> donde puse una foto y un archivo de texto.
> Para probar si se pueden utizar los archivos "escondidos" corro el
> script
> www.gomezcassou.com.ar/pruebas/under.php:
> 
>     <!! esta foto se ve porque esta sobre "public_html"-->
>     foto local<br>
>     <img src="foto.jpg">
>     <!! esta foto NO se ve porque esta debajo "public_html"-->
>     <br>en xxx<br>
>     <img src="/../xxx/foto.jpg">
>     <!-- PHP puede ver debajo "public_html"?-->
>     <?php
>         include "/../xxx/texto.txt";
>     ?>
> 
> y me salen las advertencias:
> 
> Warning: include() [function.include]: open_basedir restriction in
> effect. File(/home/cd000325/xxx/texto.txt) is not within the allowed
> path(s):
> (/home/cd000325/public_html:/tmp:/opt/apache/lib/php:/opt/php5/lib/php:/opt/ferozo/etc/suspen:/opt/ferozo/suspended.page) in /home/cd000325/public_html/pruebas/under.php on line 9
> 
> Warning: include(/home/cd000325/xxx/texto.txt) [function.include]:
> failed to open stream: Operation not permitted
> in /home/cd000325/public_html/pruebas/under.php on line 9
> 
> Warning: include() [function.include]: Failed opening
> '/home/cd000325/xxx/texto.txt' for inclusion
> (include_path='.:/opt/php5/lib/php')
> in /home/cd000325/public_html/pruebas/under.php on line 9
> 
> al directorio "/opt" no tengo acceso por ftp, asi que solo me queda el
> "tmp" para poner archivos, lo que no parece una buena idea y que
> tampoco funciona.
> 
> ¿no puede acceder PHP de alguna manera a este submundo?
> 
> Gracias

	Se puede acceder desde PHP, pero el que accede debe ser PHP y no código
HTML.

	Esto no tiene que andar:
<img src="/../xxx/foto.jpg">

	Esto sí:
include "/../xxx/texto.txt";

pero está mal la ruta: si empieza con / es la raíz del disco del
servidor, y no la raíz pública de la web.

	La ruta completa correcta sería:
include "/home/cd000325/xxx/texto.txt";
	o relativa asumiendo que este script está en la raíz publica:
include "../xxx/texto.txt";

	En la documentación de la función header del manual de PHP hay un
ejemplo para usar archivos invocados por PHP:


<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>

	Salu2!

-- 

Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado