2009-04-02 3 views
6

Получение серийного номера жесткого диска Предоставлено изготовителем через 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 

Отображает только следующий текст на моей машине перспективы:

SerialNumber

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

+0

Причина вы не получите ответ, потому что ваш конкретный жесткий диск либо не обеспечивает ОС с этой информацией или поврежден. – OIS

ответ

0

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

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

К сожалению, я не достаточно Unix, чтобы вы Hdd сериалах.

2
hdparm -i /dev/sdX 

Это на linux, но не обязательно на окнах. Вы можете выполнить это с помощью «системы()»

Посмотрите 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

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

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

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

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

+0

Этот тома (то есть раздел) серийный номер. – vartec

+0

О, спасибо! Я буду помнить об этом. –

+0

Является ли этот номер BC16-5d5f уникальным для жесткого диска? Как это число генерирует BTW и как оно отличается от изготовителю данного серийного номера? – dharm0us

1

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

Edit: Я забыл о грубой силе «Exec»: -/

5

PHP сами по себе не имеет никакой возможности доступа к аппаратному подобным.

Вы должны либо

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

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

+0

Чтобы избежать доступа root, мы также имеем 'ls/dev/disk/by-id /' см. [Мой ответ] (http://stackoverflow.com/a/26751810/881743);) –

8

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

+0

В моих исследованиях сделан вывод, что wmic is на Windows XP Professional, но не на Windows XP Home. У вас есть это на дому? Я ищу способ получить некоторую информацию, и я бы хотел использовать WMIC. – Dorothy

+0

не работает для меня на выигрыше 7 64-бит –

+0

@coding_idiot Это делается на моей копии Windows 7 Home Premium (64 бит). Просто откройте окно CLI и введите команду выше. – OIS

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 нуждается в корневом доступе, он не запускался с php для меня.

The '2> & 1' часть используется от suggestion here.

+0

Этот ответ принят для wmic part [здесь] (http://stackoverflow.com/questions/13797030/how-to-get-hard-disk-serial-number-with-php-on-localhost#comment18977745_13797030). – Lenin

+0

Это то же самое, что и мой ответ, всего 3 года спустя ... И причина, по которой это не принято, - это вопрос, который либо не имеет правильной команды wmic (потому что у него нет профессионального), либо hdd не дает ОС - серийный номер. – OIS

+0

@OIS Вы хотите сказать, что я просто дублировал ваш ответ? – Lenin

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; 

?> 
0

На * NIX машины на основе вы можете также использовать ls /dev/disk/by-id/hdparm, потому что потребность корня разрешения (см 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 
0

Выполните следующую с 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