Я хочу отобразить список общих дисков, подключенных к моей системе под управлением 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:
GetDriveType
с помощью функции w32api-register-function . GetDriveType
. Это зависит от вашей версии PHP. (См. Примечание пользователя в нижней части документации w32api-invoke-function !) 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
см.
Это может помочь сделать это с помощью c #. http://www.codeproject.com/KB/IP/networkshares.aspx Я не могу найти способ сделать это прямо под php.
Чтобы использовать это с вашим php, вам может понадобиться сделать это как dll и вызвать его с php, используя функции api Win32.