Получить список общих дисков с помощью PHP в Windows?

Я хочу отобразить список общих дисков, подключенных к моей системе под управлением Windows. Есть ли учебник для этого?

Я пробовал следующий код в PHP:

echo "<select id = 'drives'><option>Drives</option>"; for ($ii=66;$ii<92;$ii++) { $char = chr($ii); if (opendir($char.":/")) echo "<option>".$char."</option>"; } echo "</select>"; 

Вы должны использовать экспериментальные функции API Win32 в PHP:

  1. Зарегистрируйте функцию API GetDriveType с помощью функции w32api-register-function .
  2. После этого вы можете вызвать эту функцию либо с помощью функции w32api-invoke-функции, либо путем прямого вызова GetDriveType . Это зависит от вашей версии PHP. (См. Примечание пользователя в нижней части документации w32api-invoke-function !)
  3. Проверьте возвращаемое значение, если оно DRIVE_REMOTE . Вы можете найти необходимые параметры и список других возвращаемых значений в документации MSDN для GetDriveType .

Вы можете перечислить общие ресурсы Windows через COM-API 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; } 

На выходе будут перечислены все общие папки на машине. Тип 0 – это дисковод.

См. Документацию MSDN для Win32_Share для дополнительных свойств, которые вы можете запросить.

Примечание. Если вы ищете подключенные сетевые диски , измените запрос на

 Select ProviderName From Win32_LogicalDisk Where DriveType = 4 

и измените $share->Path к $share->ProviderName

См. Эту техническую статью для деталей.


Альтернативой использованию COM будет использование команды wmic :

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

эквивалентно первому приведенному выше примеру. Более подробную информацию о WMIC см.

  • WMIC – принять командный контроль над WMI и
  • Команда инструментария управления Windows

Это может помочь сделать это с помощью c #. http://www.codeproject.com/KB/IP/networkshares.aspx Я не могу найти способ сделать это прямо под php.

Чтобы использовать это с вашим php, вам может понадобиться сделать это как dll и вызвать его с php, используя функции api Win32.