2009-07-20 10 views
14

dentro de PHP (XAMPP) instalado en una computadora con Windows XP Im tratando de leer un directorio que existe en un servidor de red local. Estoy usando is_dir() para verificar si es un directorio que puedo leer.ruta de red de acceso php bajo Windows

En Windows Explorer escribo \\\server\dir y ese directorio se está mostrando. Cuando marco una unidad de red, también puedo acceder a ella con z:\dir.

En PHP que tienen esa secuencia de comandos:

<?php if(is_dir($dir){ echo 'success' }) ?> 

Para $dir Traté:

  • /server/dir
  • //server/dir
  • \server\dir
  • \\server\dir
  • \\\\server\\dir

y

  • z:\dir
  • z:\\dir
  • z:/dir
  • z://dir

Pero nunca consigo el éxito? ¿Alguna idea? THX

Respuesta

9

Lo resuelto por cambiar algunas cosas en el registro del servidor como se explica en la última respuesta de esta discusión:

http://bugs.php.net/bug.php?id=25805

Gracias a VolkerK y Gumbo de todos modos! ¡Me encanta Stackoverflow y sus excelentes personas que te ayudan increíblemente rápido!

EDITAR (tomado de php.net):

El servicio tiene acceso limitado a los recursos de red, tales como acciones y tuberías, ya que no tiene las credenciales y debe conectarse a través de un nulo sesión. La siguiente clave del registro contiene los NullSessionPipes y valores NullSessionShares, que se utilizan para especificar las tuberías y acciones a las que las sesiones nulas pueden conectar: ​​ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters Como alternativa, puede agregar el valor REG_DWORD RestrictNullSessAccess a la llave y ponerlo a 0 para permitir que todos nulos sesiones para acceder a todas las tuberías y acciones creadas en ese machine.`

añadir RestrictNullSessAccess = 0 a su registery.

+1

Esto es cierto para Windows Server 2003. Para Windows XP, asegúrese de que la configuración de la Política de seguridad local "Acceso a la red: permita que los permisos de Todos se apliquen a usuarios anónimos" esté configurada como Activada. – Max

+3

¿Qué serían algunas de esas cosas? El enlace a php.net no fue muy útil. ¿Puedes consolidar tu solución aquí? – Wes

+1

@Wes Edité mi respuesta. Espero que ayude. – Max

3

Prueba el esquema de file: URI:

file://server/dir 
file:///Z:/dir 

El comenzar es siempre file://. El siguiente segmento de ruta es el servidor. Si está en su máquina local, déjelo en blanco (vea el segundo ejemplo). Vea también File URIs in Windows.

+0

gracias por tu respuesta, gumbo! Lamentablemente, ambas soluciones no funcionaron. is_dir() siempre devuelve falso. PD: en un directorio local (en el ejemplo c:/dir) ¡devuelve verdadero! – Max

+0

¿Intentó esa ruta en su Windows Explorer? Debería funcionar allí también. – Gumbo

7

Probablemente haya dejado que xampp instale apache como servicio y ejecute los scripts php a través de este apache. Y el servicio apache (que se ejecuta como localsystem) no tiene permitido acceder a la red de la misma manera que su cuenta de usuario.

Un servicio que se ejecuta en el contexto de la cuenta LocalSystem hereda el contexto de seguridad de SCM. El SID del usuario se crea a partir del valor SECURITY_LOCAL_SYSTEM_RID. La cuenta no está asociada a ninguna cuenta de usuario registrada.
Esto tiene varias implicaciones:
...
      * El servicio presenta las credenciales del equipo a servidores remotos.
...

Puede probar esta iniciando el Apache como aplicación de consola (apache_start.bat en el directorio XAMPP debería hacer eso) y ejecutar el script de nuevo. Puede usar barras diagonales hacia adelante y hacia atrás en la ruta de acceso unc. Sugeriría usar // server/share ya que a php no le importa/en literales de cadenas.

<?php 
$uncpath = '//server/dir'; 
$dh = opendir($uncpath); 
echo "<pre>\n"; 
var_dump($dh, error_get_last()); 
echo "\n</pre>"; 
Cuestiones relacionadas