PDA

Ver la Versión Completa : Acceso a directorios en PHP


mieltxo
19-09-2005, 15:39:38
Buenas tardes,

Tengo un problema bastante gordo al intentar listar los ficheros de un directorio compartido.

El problema esta en que solo puedo listar los ficheros dentro de la red local, y quisiera listar los que estuvieran fuera de mi red. Supongo que por privilegios no tengo acceso.. ¿Alguien sabe como lo puedo solucionar?

El error es: Invalid to open dir: invalid argument


if ($handleo = opendir("\\\\".gethostbyname($_SERVER['REMOTE_ADDR'])."\\dibujados\\")) {
while (false !== ($filem = readdir($handleo))) {
if ($filem != "." && $filem != "..") {
echo "$filem\n";
}
}
}

Gracias por vuestra ayuda

salvica
25-09-2005, 18:48:54
Podría ser por el sentido de las barras?

Buenas tardes,

if ($handleo = opendir("\\\\".gethostbyname($_SERVER['REMOTE_ADDR'])."\\dibujados\\")) {
while (false !== ($filem = readdir($handleo))) {
if ($filem != "." && $filem != "..") {
echo "$filem\n";
}
}
}

Ponlo así

if ($handleo = opendir("//".gethostbyname($_SERVER['REMOTE_ADDR'])."/dibujados/")) {
while (false !== ($filem = readdir($handleo))) {
if ($filem != "." && $filem != "..") {
echo "$filem\n";
}
}
}


Saludos
Salvica

mieltxo
27-09-2005, 12:23:50
No, las barras están correctamente. Ya lo probé hace tiempo y no me funciona del modo que planteas :(

Parecen ser problemas de permisos al acceder a otras redes...

salvica
27-09-2005, 23:51:32
Es que, no sé si me equivoco, da la impresión que estás intentando leer la estructura de directorios de otro sistema ajeno al que ejecuta la script, ya que: (del manual de php)

string gethostbyname ( string hostname)

(PHP 3, PHP 4 , PHP 5)
gethostbyname -- Obtiene la dirección IP correspondiente al nombre de una máquina conectada a Internet.


Teniendo en cuenta que php se ejecuta en el lado del servidor, la búsque da ficheros se debería realizar en éste, y las "tres barras" deberian referenciar la estructura del ordenador donde está montado el servidor (tipo "file:///" aunque esto último no lo he probado)

En fín, que pruebes lo siguiente: (copiado del manual)
Ejemplo 2. Listar todos los ficheros en un directorio excepto . y ..

<?php
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
echo "$file\n";
}
}
closedir($handle);
}
?>

mieltxo
29-09-2005, 11:00:28
Efectivamente, has entendido bien.

Leo una estructura de directorio ajeno dentro de mi propia red local, y funciona correctamente.

El problema esta en que quiero hacer lo mismo en un sistema ajeno que no este dentro de mi propia red local. Pero no se como puedo solventar los problemas de seguridad para acceder a otro sistema mediante PHP.

Un saludo

salvica
29-09-2005, 12:26:50
Te paso un pedazo de una script que en su día encontré en internet, para comprobar la ip real del visitante a una página, ya que la ip que devuelve "REMOTE_ADDR" puede estar enmascarada por un proxy, router, etc. A lo mejor te sirve de algo ;)

/*
+---------------------------------------------------------------------------
| Calcular los datos de la IP entrante
| - IP del usuario
| - IP del HOST de donde viene
| - NOMBRE del HOST de donde viene
+---------------------------------------------------------------------------
*/
if( isset($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) ) {
$ip_user = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
$ip_host = $HTTP_SERVER_VARS["REMOTE_ADDR"];
$array = split( ", ", $ip_user );
$url_host = @gethostbyaddr( $array[0] );
} else {
$ip_user = $_SERVER["REMOTE_ADDR"];
$ip_host = $_SERVER["REMOTE_ADDR"];
$url_host = @gethostbyaddr($ip_host);
}
$port_host = $_SERVER["REMOTE_PORT"];
$navegador = $_SERVER["HTTP_USER_AGENT"];
if( isset($_SERVER["HTTP_REFERER"]) ) {
$vieneDe = $_SERVER["HTTP_REFERER"];
$pos = strpos( $vieneDe, "?" );
if( $pos===false ) { // nota: tres signos igual
// no encontrado, el script se ejecuta en local ...
} else {
$vieneDe= substr( $vieneDe, 0, $pos );
}
} else {
$vieneDe = $url_host;
}

Luego puedes utilizar la ip del usuario o la del host, indistintamente.

Saludos
salvica