[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