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

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

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

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

Или это можно сделать через Adobe AIR? Или это можно сделать с помощью программы на 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:

Серийный номер

На моей машине XP команда не распознана.

Solutions Collecting From Web of "Получение серийного номера жесткого диска, предоставляемого производителем через PHP"

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

 wmic DISKDRIVE GET SerialNumber 

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

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

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

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

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

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

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

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

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

 hdparm -i /dev/sdX 

это на linux, но не уверен в окнах. Вы можете выполнить это через "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 = ж & кр = HK & SLOC = & р = 1

Может быть, путь вперед.

Кроме того, когда я запускал «dir» в командной строке, он показывает:

 C:\Documents and Settings\Administrator>dir Volume in drive C has no label. Volume Serial Number is BC16-5D5F 

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

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

Редактировать: я забыл о сырой мощности «exec»: – /

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

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

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

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

  $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 нуждается в корневом доступе, он не запускался с 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 (см. Ответ Patrick Daryll G. ).

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

Запустите следующую команду с помощью 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