2009-04-02 15 views
6

ハードドライブのシリアル番号の取得 PHPで製造元から提供: どうすればできますか? ファイルに保存します。製造元が提供するハードドライブのシリアル番号の取得

OS:Windows 2000では、XP、ME、Vistaの...

はい、私は、サーバーのハードドライブのシリアルナンバーをしたいです。

Adob​​e AIRを使用して行うことはできますか? それはWindows上のCプログラムを介して行うことができますか?

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マシンで

、コマンドが認識されません。

+0

あなたは答えを得ることはありません理由があります。 – OIS

答えて

0

サーバーまたはクライアントからハードドライブを取り出しますか? PHPはサーバ上で動作するので、クライアントから直接取得することはできません。

マニュアルはあなたのサーバー上でコマンドを実行することができますお勧め: http://nl2.php.net/manual/en/ref.exec.php

残念ながら、私はあなたが雑誌をHDD取得するのに十分なUnixのがありません。

2
hdparm -i /dev/sdX 

これはLinux上にありますが、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

を見てください。

私は、コマンドプロンプトで「DIR」を実行したときにも、それは示しています

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()でそれを呼び出す

の場合あなたは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は、Windowsのsystem32フォルダにあります。 WinXPにはwmicが存在し、Iveはそれを自分で使っていました。すべてのハードドライブ]は、OSにシリアル番号を提供する場合、私は知らない

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

Vistaでの私の結果。

WMICコマンドは、あなたが次に

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

または

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

を使用できるWindows XP、Windows VistaおよびWindowsのプロバージョン7.

+0

私の研究は、 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はrootアクセスが必要なので、phpで私のために実行されませんでした。

suggestion hereから '2> & 1'部分が使用されています。

+0

この回答はwmicの部分[ここ]で受け入れられました(http://stackoverflow.com/questions/13797030/how-to-get-hard-disk-serial-number-with-php-on-localhost#comment18977745_13797030)。 – Lenin

+0

これはちょうど3年後の私の答えと同じです...そして、それが受け入れられない理由は、質問のポスターが正しいwmicコマンドを持っていないか(彼がプロを持っていないために)、またはhddが与えないOSのシリアル番号。 – OIS

+0

@OIS私はあなたの答えを複製したと言っていますか? – Lenin

0

このコードを試してください。正しく動作しています。 hdparmは、root権限が必要なので、あなたもls /dev/disk/by-id/を使用することができます* 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

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 

ディスクドライブは、実際のシリアルを取得していませんIDEチャネルを介して接続されているドライブの番号。上記のように私のすべてのドライブの実際のシリアル番号を取得するようだ。また、どのタイプのドライブであるかを返すので、異なるドライブを識別するのに役立ちます。

出力例:特定のハードドライブは、この情報にOSを提供していないか、破損しているいずれかのため

SerialNumber  Tag 
WD-WX55D33JQNZ4 \\.\PHYSICALDRIVE4 
S1OKIJNH938475 \\.\PHYSICALDRIVE0 
WD-CV44HJ5L765Y \\.\PHYSICALDRIVE1 
WD-WX41D65SD1UU \\.\PHYSICALDRIVE2 
WD-WXB1SD3OIJHG \\.\PHYSICALDRIVE3 
       \\.\CDROM0 
関連する問題