2009-04-02 4 views
6

하드 드라이브의 일련 번호 얻기 PHP를 통해 제조업체에서 제공 : 어떻게 할 수 있습니까? 파일에 저장하고 싶습니다.제조업체가 PHP를 통해 제공하는 하드 드라이브의 일련 번호 얻기

OS : 윈도우 2000, XP, ME, 비스타 ...

네, 하드 드라이브 서버의 의 일련 번호를 원한다.

아니면 Adobe AIR를 통해 수행 할 수 있습니까? Windows에서 C 프로그램을 통해이 작업을 수행 할 수 있습니까?

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

이 번호는 하드 드라이브 고유 번호입니까? 제조업체의 일련 번호와 다른 점은 무엇입니까?

wmic DISKDRIVE GET SerialNumber 

표시 내 비스타 기계 만 다음 텍스트 :

의 serialNumber 내 XP의 시스템에서

, 명령이 인식 할 수없는 것입니다.

+0

당신이 대답을하지 않는 이유는 특정 하드 드라이브 때문에 하나이 정보를 사용하여 OS를 제공하지 않거나 손상되었습니다. – OIS

답변

0

하드 드라이브를 서버 또는 클라이언트에서 사용 하시겠습니까? PHP가 서버에서 실행되므로 클라이언트에서 직접 가져 오는 것이 가능하지 않습니다.

수동

을 사용하면 서버에서 명령을 실행할 수 있습니다 제안 : http://nl2.php.net/manual/en/ref.exec.php

불행하게도 나는 충분하지 유닉스 당신에게 하드 디스크 일련 번호를 얻기 위해 않습니다.

2
hdparm -i /dev/sdX 

아니, Windows에서는 잘 모르겠다. 당신은 그 통해 "시스템()"를 실행할 수 있습니다

앞으로 방법이 될 수 있음 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입니까? 이 번호는 어떻게 생성됩니까? 일련 번호와 어떻게 다른가요? – dharm0us

1

답변을 말할 수는 없지만 확장 프로그램의 방향을 조사해야합니다 (직접 작성하는 경우도 있음). 나는 이것이 PHP의 핵심이 무엇인지 의심 스럽다. 그 자체가 같은 하드웨어에 액세스하는 방법이 없습니다/

5

PHP - :

편집 : 나는 "간부"의 원시 전원에 대해 잊어 버렸습니다.

당신은 하나

  • 해야합니다 운영 체제의 명령을 사용하여 당신에게 정보를 반환합니다 PHP의 확장을 쓰기 system() 또는
  • exec()로 전화

하는 경우 당신은 리눅스에 있고 주어진 하드 드라이브의 일련 번호를 얻기 위해 $r = system("hdparm -I /dev/hda"); (hda를 당신의 hd로 대체)을 사용할 수있는 필요한 권한과 구성을 가지고 있습니다.

+0

루트 액세스를 막기 위해 [ls/dev/disk/by-id /'[내 대답] (http://stackoverflow.com/a/26751810/881743) 참조) –

8

다음은 디스크 일련 번호를 반환합니다. 여러 드라이브에서 작동해야하는 경우 여러 결과가 표시됩니다. shell_exec으로 실행하십시오.

wmic DISKDRIVE GET SerialNumber 

wmic.exe는 Windows 시스템 폴더에 있습니다. 그리고 wmic는 WinXP에 존재합니다. 필자는 직접 그것을 사용했습니다. Vista에서

내 결과, 모든 하드 드라이브가 2 개이고가 OS에 일련 번호를 제공하는 경우

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

나도 몰라.

WMIC 명령은 다음

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

또는

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

를 사용할 수있는 Windows XP, Windows Vista 및 Windows 7의 전문 버전

+0

내 연구는 wmic가 Windows XP Professional은 지원하지만 Windows XP Home은 지원하지 않습니다. 집에 있었 ​​니? 몇 가지 정보를 얻는 방법을 찾고 있는데 WMIC을 사용하고 싶습니다. – Dorothy

+0

이 7 64 비트에 나에게 맞지 않습니다. –

+0

@coding_idiot Windows 7 Home Premium (64 비트) 사본에 있습니다. CLI 창을 열고 위의 명령을 입력하기 만하면됩니다. – OIS

0

를에서만 사용할 수 있습니다 것 같다 당신 그것을 반향시킬 수 있습니다.

Patrick Daryll Glandien의 힌트를 기반으로 다음과 같은 * nix 기반 컴퓨터에서 실행할 수 있습니다. $ hdserial = hdparm -I /dev/hda

hdparm -i /dev/sda은 적은 정보를 반환합니다. 그러나 hdparm이 루트 액세스를 필요로하기 때문에, 그것은 나를 위해 PHP로 실행되지 않았습니다.

suggestion here에서 '2> &'부분이 사용됩니다.

+0

이 답변은 wmic part [here] (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

이 코드를 사용해보고 올바르게 작동하고 있습니다. * nix에서 스크립트 기반 시스템에서

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

당신은 또한 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