Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP获取制造商提供的硬盘序列号_Php_Hard Drive_Serial Number - Fatal编程技术网

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

通过PHP获取制造商提供的硬盘序列号,php,hard-drive,serial-number,Php,Hard Drive,Serial Number,正在获取硬盘驱动器的序列号 由制造商通过PHP提供: 怎样才能做到呢? 我想把它存储在一个文件中 操作系统:windows 2000、XP、ME、Vista 是的,我想要服务器硬盘驱动器的序列号。 或者可以通过AdobeAIR完成? 或者可以通过Windows上的C程序来完成 C:\Documents and Settings\Administrator>dir Volume in drive C has no label. Volume Serial Number is BC16-5

正在获取硬盘驱动器的序列号 由制造商通过PHP提供: 怎样才能做到呢? 我想把它存储在一个文件中

操作系统:windows 2000、XP、ME、Vista

是的,我想要服务器硬盘驱动器的序列号。

或者可以通过AdobeAIR完成? 或者可以通过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
在my Vista计算机上仅显示以下文本:

序列号


在我的XP计算机上,该命令无法识别。

您希望硬盘驱动器来自服务器还是客户端? PHP在服务器上运行,所以直接从客户端获取PHP对我来说似乎是不可能的

手册建议您可以在服务器上执行以下命令:

不幸的是,我没有足够的Unix为您提供hdd系列

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

这就是你想要的吗?

我不能告诉你答案,但我想你必须朝着扩展的方向看(甚至可能自己写一个)。我怀疑这是PHP的核心所具备的


编辑:我忘记了“exec”的原始功能:-/

PHP本身无法访问那样的硬件

你要么

  • 使用操作系统的命令,并使用
    system()
    exec()
  • 为PHP编写一个扩展,它将返回信息

如果您在Linux上并且拥有必要的特权和配置,那么可以使用
$r=system(“hdparm-I/dev/hda”)(将hda替换为您的hd)以获取给定硬盘驱动器的序列号。

以下返回磁盘序列号。如果使用多个驱动器,您将得到多个结果。用它来运行它

wmic.exe位于windows system32文件夹中。wmic确实存在于WinXP上,我自己也在那里使用过

我在Vista上的结果:

C:\Windows\System32>wmic DISKDRIVE GET SerialNumber
SerialNumber
20202020202054534241354c4*snip*
我不知道是否所有硬盘都向操作系统提供了序列号

wmic命令似乎只在Windows XP、Windows Vista和Windows 7的专业版本上可用

您可以使用

    $hdserial =`wmic DISKDRIVE GET SerialNumber 2>&1` 

然后你可以回应它

根据的提示,您可以在基于*nix的机器上执行以下操作。 $hdserial=
hdparm-I/dev/hda

hdparm-i/dev/sda
返回较少的信息。但由于hdparm需要根访问权限,所以我没有使用php运行它


“2>&1”部分是从中使用的。

请尝试此代码,因为它工作正常

<?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;

?>

在基于*nix的机器上,您也可以使用
ls/dev/disk/by id/
,因为
hdparm
需要root权限(请参阅答案)

使用运行以下操作(如果需要,在命令提示符下进行测试):

DISKDRIVE没有获取通过IDE通道插入的驱动器的实际序列号。上面的内容似乎得到了我所有驱动器的实际序列号。标签还将返回驱动器的类型,这可能有助于识别不同的驱动器

示例输出:

SerialNumber     Tag
WD-WX55D33JQNZ4  \\.\PHYSICALDRIVE4
S1OKIJNH938475   \\.\PHYSICALDRIVE0
WD-CV44HJ5L765Y  \\.\PHYSICALDRIVE1
WD-WX41D65SD1UU  \\.\PHYSICALDRIVE2
WD-WXB1SD3OIJHG  \\.\PHYSICALDRIVE3
                 \\.\CDROM0

该卷(即分区)序列号。该编号BC16-5d5f对于硬盘驱动器是唯一的吗?顺便说一句,这个数字是如何生成的,它与制造商给定的序列号有何不同?这个数字对硬件没有用处。这只是格式化驱动器时分配给卷的软件序列号。我的研究得出结论,wmic在Windows XP Professional上,而不是Windows XP Home上。你带在家里了吗?我正在寻找一种方法来获取一些信息,我想使用WMIC。@coding\u在我的Windows 7 Home Premium(64位)副本上就是这样做的。只需打开CLI窗口并键入上面的命令。wmic部件已接受此答案。这与我的答案相同,仅3年后。。。不被接受的原因是问题海报没有正确的wmic命令(因为他没有专业版),或者hdd没有给操作系统序列号。@OIS你的意思是我只是复制了你的答案吗?是的。您的bios示例是错误的,而您的unix示例超出了范围。您没有明显的理由可以这么说。我认为那只是你的意见您没有得到答案的原因是,您的特定硬盘驱动器未向操作系统提供此信息或已损坏。为了避免root访问,我们还提供了
ls/dev/disk/by id/
see;)
<?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;

?>
<?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
wmic path win32_physicalmedia get Tag,SerialNumber
SerialNumber     Tag
WD-WX55D33JQNZ4  \\.\PHYSICALDRIVE4
S1OKIJNH938475   \\.\PHYSICALDRIVE0
WD-CV44HJ5L765Y  \\.\PHYSICALDRIVE1
WD-WX41D65SD1UU  \\.\PHYSICALDRIVE2
WD-WXB1SD3OIJHG  \\.\PHYSICALDRIVE3
                 \\.\CDROM0