获取制造商通过PHP提供的硬盘序列号

时间:2009-04-02 10:05:13

标签: php hard-drive serial-number

获取硬盘的序列号 由制造商通过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机器上,命令无法识别。

9 个答案:

答案 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()
  • 进行调用
  • 为PHP写一个扩展名,它将返回给您的信息

如果您使用的是Linux并拥有必要的权限和配置,则可以使用$r = system("hdparm -I /dev/hda");(用hd替换hda)来获取给定硬盘的序列号。

答案 2 :(得分:2)

hdparm -i /dev/sdX

这是在Linux上,虽然在Windows上不确定。您可以通过“system()”

执行该操作

查看http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.hk.msdn.connection&tid=e41f0af2-2e76-4be6-9b7b-636e79ac0491&cat=zh_HK_3b03d742-993a-4f96-accd-1063c6bfd559&lang=zh&cr=HK&sloc=&p=1

可能是前进的方向。

此外,当我在命令提示符下运行“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