获取硬盘的序列号 由制造商通过PHP提供: 怎么做到呢? 我想将它存储在一个文件中。
操作系统:Windows 2000,XP,ME,Vista ......
是的,我想要服务器的硬盘 的序列号。
或者可以通过Adobe AIR完成吗? 或者可以通过Windows上的C程序完成吗?
C:\Documents and Settings\Administrator>dir
Volume in drive C has no label.
Volume Serial Number is BC16-5D5F
这个号码:BC16-5d5f是否适用于硬盘? 它与制造商给出的序列号有什么不同?
wmic DISKDRIVE GET SerialNumber
在我的Vista计算机上仅显示以下文本:
的SerialNumber
在我的XP机器上,命令无法识别。
答案 0 :(得分:8)
以下命令返回磁盘序列号。应该使用多个驱动器,您将获得多个结果。只需使用shell_exec运行即可。
wmic DISKDRIVE GET SerialNumber
wmic.exe位于windows system32文件夹中。在WinXP上确实存在wmic,我自己也在那里使用它。
我在Vista上的结果:
C:\Windows\System32>wmic DISKDRIVE GET SerialNumber
SerialNumber
20202020202054534241354c4*snip*
我不知道所有硬盘都是否为操作系统提供了序列号。
似乎wmic命令仅适用于Windows XP,Windows Vista和Windows 7的专业版本。
答案 1 :(得分:5)
PHP本身无法像这样访问硬件。
你必须要么
system()
或exec()
如果您使用的是Linux并拥有必要的权限和配置,则可以使用$r = system("hdparm -I /dev/hda");
(用hd替换hda)来获取给定硬盘的序列号。
答案 2 :(得分:2)
hdparm -i /dev/sdX
这是在Linux上,虽然在Windows上不确定。您可以通过“system()”
执行该操作可能是前进的方向。
此外,当我在命令提示符下运行“dir”时,它显示:
C:\Documents and Settings\Administrator>dir
Volume in drive C has no label.
Volume Serial Number is BC16-5D5F
这就是你要找的东西吗?
答案 3 :(得分:1)
我无法告诉你答案,但我想你必须向扩展方向看(甚至可能自己写一个)。我怀疑这是PHP的核心所在。
编辑:我忘记了“exec”的原始力量: - /
答案 4 :(得分:1)
使用shell_exec运行以下命令(如果需要,在命令提示符下测试):
wmic path win32_physicalmedia get Tag,SerialNumber
DISKDRIVE没有获得显示通过IDE通道插入的驱动器的实际序列号。以上似乎得到了我所有驱动器的实际序列号。标签还将返回哪种类型的驱动器可能有助于识别不同的驱动器。
示例输出:
SerialNumber Tag
WD-WX55D33JQNZ4 \\.\PHYSICALDRIVE4
S1OKIJNH938475 \\.\PHYSICALDRIVE0
WD-CV44HJ5L765Y \\.\PHYSICALDRIVE1
WD-WX41D65SD1UU \\.\PHYSICALDRIVE2
WD-WXB1SD3OIJHG \\.\PHYSICALDRIVE3
\\.\CDROM0
答案 5 :(得分:0)
您想从服务器或客户端获取硬盘吗? PHP在服务器上运行,因此从客户端直接获取它似乎不可能。
手册建议您可以在服务器上执行命令: http://nl2.php.net/manual/en/ref.exec.php
不幸的是我没有足够的Unix来获取硬盘连续剧。
答案 6 :(得分:0)
您可以使用
$hdserial =`wmic DISKDRIVE GET SerialNumber 2>&1`
或
$hdserial =`wmic bios get serialnumber 2>&1`
然后你可以回应它。
根据Patrick Daryll Glandien的提示,您可以在基于* nix的计算机上执行以下操作。
$ hdserial = hdparm -I /dev/hda
hdparm -i /dev/sda
返回较少的信息。但是由于hdparm需要root访问权限,因此我没有使用php运行。
“{>& 1”部分来自suggestion here。
答案 7 :(得分:0)
尝试使用此代码,它正常工作。
<?php
function GetVolumeLabel($drive) {
// Try to grab the volume name
if (preg_match('#Volume Serial Number is (.*)\n#i', shell_exec('dir '.$drive.':'), $m)) {
$volname = ' ('.$m[1].')';
} else {
$volname = '';
}
return $volname;
}
$serial = str_replace("(","",str_replace(")","",GetVolumeLabel("c")));
echo $serial;
?>
答案 8 :(得分:0)
在基于* nix的计算机上,您还可以使用ls /dev/disk/by-id/
,因为hdparm
需要root权限(请参阅Patrick Daryll G. answer)。
<?php
exec($command.' 2>&1', $output);
echo 'HDD: '.$output[0].'<br>';
$outputs = explode('_', $outputs[0]);
$outputs = end($outputs);
echo 'HDD-SN: '.$output.'<br>';
你会得到类似的东西
HDD: ata-HGST_XXX1234567890XX_ABCD123456789X // <connection>-<hdd_model>_<hdd_sn>
HDD-SN: ABCD123456789X // Your HDD Serial Number