在Windows上使用PHP获取共享驱动器列表?

时间:2009-03-13 11:33:21

标签: 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>";

3 个答案:

答案 0 :(得分:1)

您必须在PHP中使用实验性Win32 API函数:

  1. 使用w32api-register-function注册API函数GetDriveType
  2. 之后,您可以使用w32api-invoke-function或直接致电GetDriveType来调用此功能。这取决于您的PHP版本。 (请参阅w32api-invoke-function文档底部的用户提供的说明!)
  3. 检查返回值是否为DRIVE_REMOTE。您可以在GetDriveType的MSDN文档中找到所需参数和其他返回值列表。

答案 1 :(得分:1)

您可以通过PHP's COM API枚举Windows共享资源:

$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是磁盘驱动器。

有关您可以查询的其他属性,请参阅Win32_Share的MSDN文档。

注意:如果您正在寻找映射网络驱动器,请将查询更改为

Select ProviderName From Win32_LogicalDisk Where DriveType = 4

并将$share->Path更改为$share->ProviderName

有关详细信息,请参阅此Technet Article


使用COM的另一种方法是使用wmic命令:

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

等同于上面的第一个例子。有关WMIC的详细信息,请参阅

答案 2 :(得分:0)

这可能有助于在c#下完成。 http://www.codeproject.com/KB/IP/networkshares.aspx 我无法直接在php下找到任何方法。

要在你的php中使用它,你可能需要将它作为一个dll并使用Win32 api函数从php调用它。