Получить список общих дисков с помощью PHP на Windows? - PullRequest
2 голосов
/ 13 марта 2009

Я хочу отобразить список общих дисков, подключенных к моей системе под управлением 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>";

Ответы [ 3 ]

1 голос
/ 23 марта 2009

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

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

Вы можете перечислять общие ресурсы Windows через PHP COM API :

$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 см.

0 голосов
/ 13 марта 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...