Получение серийного номера жесткого диска, предоставляемого производителем через PHP - PullRequest
5 голосов
/ 02 апреля 2009

Получение серийного номера жесткого диска Предоставлено производителем через PHP: Как это можно сделать? Я хочу сохранить его в файле.

ОС: Windows 2000, XP, ME, Vista ...

Да, я хочу серийный номер жесткого диска Сервера.

Или это можно сделать через Adobe AIR? Или это можно сделать через программу на C на Windows?

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 ]

8 голосов
/ 02 апреля 2009

Далее возвращается серийный номер диска. Если вы будете работать с несколькими дисками, вы получите несколько результатов. Просто запустите его с shell_exec .

wmic DISKDRIVE GET SerialNumber

wmic.exe находится в вашей папке windows32. И wmic существует на WinXP, я сам использовал его там.

Мой результат на Vista:

C:\Windows\System32>wmic DISKDRIVE GET SerialNumber
SerialNumber
20202020202054534241354c4*snip*

Я не знаю, все ли жесткие диски предоставляют серийный номер ОС.

Кажется, команда wmic доступна только в профессиональных версиях Windows XP, Windows Vista и Windows 7.

5 голосов
/ 02 апреля 2009

PHP сам по себе не имеет доступа к подобному оборудованию.

Вам придется либо

  • используйте команду вашей операционной системы и вызывайте ее с помощью system() или exec()
  • напишите расширение для PHP, которое вернет вам информацию

Если вы работаете в Linux и обладаете необходимыми привилегиями и конфигурацией, вы можете использовать $r = system("hdparm -I /dev/hda"); (заменить hda на hd), чтобы получить серийный номер данного жесткого диска.

2 голосов
/ 02 апреля 2009
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

Это то, что вы ищете?

1 голос
/ 08 октября 2017

Запустите следующее с shell_exec (при необходимости проверьте в командной строке):

wmic path win32_physicalmedia get Tag,SerialNumber

DISKDRIVE не получает актуальный серийный номер для моего диска, который показывает подключенный через канал IDE. вышеупомянутые, казалось, получили фактические серийные номера для всех моих дисков. Tag также вернет вам тип диска, который может быть полезен для идентификации различных дисков.

Пример вывода:

SerialNumber     Tag
WD-WX55D33JQNZ4  \\.\PHYSICALDRIVE4
S1OKIJNH938475   \\.\PHYSICALDRIVE0
WD-CV44HJ5L765Y  \\.\PHYSICALDRIVE1
WD-WX41D65SD1UU  \\.\PHYSICALDRIVE2
WD-WXB1SD3OIJHG  \\.\PHYSICALDRIVE3
                 \\.\CDROM0
1 голос
/ 02 апреля 2009

Я не могу сказать вам ответ, но, думаю, вам придется посмотреть в сторону расширений (возможно, даже написать их самостоятельно). Я сомневаюсь, что это ядро ​​PHP.

Редактировать: я забыл о необработанной силе "exec": - /

0 голосов
/ 05 ноября 2014

На * nix-машине вы также можете использовать ls /dev/disk/by-id/, потому что hdparm требуется разрешение root (см. Патрик Дэрилл Дж. ответ).

<?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
0 голосов
/ 09 июня 2014

Попробуйте этот код, он работает правильно.

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

?>
0 голосов
/ 10 декабря 2012

Вы можете использовать

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

или

    $hdserial =`wmic bios get serialnumber 2>&1` 

Тогда вы можете повторить это.

Основываясь на подсказке Патрика Дэрилла Гландиана , вы можете выполнить следующие действия на * nix-машинах. $ hdserial = hdparm -I /dev/hda

hdparm -i /dev/sda возвращает меньшую информацию. Но поскольку hdparm нужен root-доступ, он не запускался с php для меня.

Часть '2> & 1' используется из предложения здесь .

0 голосов
/ 02 апреля 2009

Хотите ли вы жесткий диск с сервера или с клиента? PHP работает на сервере, так что получить его прямо из клиента мне не представляется возможным.

Руководство предполагает, что вы можете выполнять команды на своем сервере: http://nl2.php.net/manual/en/ref.exec.php

К сожалению, мне не хватает Unix, чтобы получить жесткие диски.

...