¿Obtener la lista de unidades compartidas usando PHP en Windows?

Quiero mostrar la lista de unidades compartidas conectadas a mi sistema que ejecuta Windows. ¿Hay algún tutorial para esto?

He intentado el siguiente código en PHP:

echo "Drives"; for ($ii=66;$ii<92;$ii++) { $char = chr($ii); if (opendir($char.":/")) echo "".$char.""; } echo ""; 

Solutions Collecting From Web of "¿Obtener la lista de unidades compartidas usando PHP en Windows?"

Tienes que usar las funciones experimentales de la API de Win32 en PHP:

  1. Registre la función API GetDriveType usando w32api-register-function .
  2. Después de eso, puede llamar a esta función utilizando w32api-invoke-function o llamando directamente a GetDriveType . Depende de tu versión de PHP. (Consulte la nota aportada por el usuario en la parte inferior de la documentación de w32api-invoke-function !)
  3. Verifique el valor de retorno si es DRIVE_REMOTE . Puede encontrar los parámetros necesarios y la lista de otros valores devueltos en la documentación de MSDN de GetDriveType .

Puede enumerar los recursos compartidos de Windows a través de la API COM de PHP :

 $wmi = new COM('WinMgmts:{impersonationLevel=impersonate}!root/cimv2'); $result = $wmi->ExecQuery('Select Path from Win32_Share where Type = 0'); foreach ($result as $share) { echo $share->Path, PHP_EOL; } 

La salida mostrará una lista de todas las carpetas compartidas en la máquina. Tipo 0 es una unidad de disco.

Consulte la documentación de MSDN para Win32_Share para conocer las propiedades adicionales que puede consultar.

Nota: si está buscando unidades de red asignadas , cambie la consulta a

 Select ProviderName From Win32_LogicalDisk Where DriveType = 4 

y cambie $share->Path to $share->ProviderName

Vea este artículo de Technet para más detalles.


Una alternativa para usar COM sería usar el comando wmic :

 exec('wmic Share where Type=0 get Path', $shares); print_r($shares); 

es equivalente al primer ejemplo anterior. Para obtener más detalles sobre WMIC , consulte

  • WMIC – Tome el control de la línea de comandos sobre WMI y
  • Comando de instrumentación de administración de Windows

Esto puede ayudar a hacerlo bajo c #. http://www.codeproject.com/KB/IP/networkshares.aspx No puedo encontrar ninguna forma de hacerlo directamente bajo php.

Para utilizar esto con su php, puede necesitar hacer esto como un dll y llamarlo desde php usando las funciones api de Win32.