Получение серийного номера жесткого диска, предоставленного производителем через 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 команда не распознана.
Возвращает серийный номер диска. Если вы работаете с несколькими дисками, вы получите несколько результатов. Просто запустите его с помощью 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()
Если вы находитесь в 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