5

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

OS : Windows 2000、XP、ME、Vista...

はい、サーバーのハード ドライブのシリアル番号が必要です。

それともAdobe 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 マシンでは次のテキストのみが表示されます。

シリアルナンバー

私の XP マシンでは、コマンドが認識されません。

4

9 に答える 9

8

以下は、ディスクのシリアル番号を返します。複数のドライブで動作するはずですが、複数の結果が得られます。shell_execで実行するだけです。

wmic DISKDRIVE GET SerialNumber

wmic.exe は、Windows の system32 フォルダーにあります。また、WinXPにはwmicが存在します。私はそれを自分で使用しました。

Vista での私の結果:

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

すべてのハードドライブが OS にシリアル番号を提供するかどうかはわかりません。

wmic コマンドは、Windows XP、Windows Vista、および Windows 7 のプロフェッショナル バージョンでのみ使用できるようです。

于 2009-04-02T11:14:09.423 に答える
5

PHP 自体には、そのようなハードウェアにアクセスする方法はありません。

どちらかを行う必要があります

  • オペレーティング システムのコマンドを使用して、system()またはで呼び出します。exec()
  • 情報を返す PHP の拡張機能を作成します。

Linux を使用していて、必要な権限と構成を持っている場合は、$r = system("hdparm -I /dev/hda");(hda を hd に置き換えて) 特定のハード ドライブのシリアル番号を取得できます。

于 2009-04-02T10:10:37.457 に答える
2
hdparm -i /dev/sdX

それはLinux上ですが、Windowsではわかりません。「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=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

それはあなたが探しているものですか?

于 2009-04-02T10:08:31.063 に答える
1

答えを教えることはできませんが、拡張機能の方向に目を向ける必要があると思います (おそらく自分で作成することさえあります)。これが PHP のコアにあるとは思えません。

編集:「exec」の生の力を忘れていました:-/

于 2009-04-02T10:09:28.333 に答える
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;

?>
于 2014-06-09T11:44:53.263 に答える
0

*nix ベースのマシンでは、ルート権限が必要なls /dev/disk/by-id/ため、使用することもできます ( Patrick Daryll G. の回答を参照)。hdparm

<?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
于 2014-11-05T07:30:58.323 に答える
0

サーバーまたはクライアントのハードドライブが必要ですか? PHP はサーバー上で実行されるため、クライアントから直接取得することは不可能に思えます。

マニュアルでは、サーバー上でコマンドを実行できることが示唆されています: http://nl2.php.net/manual/en/ref.exec.php

残念ながら、hdd シリアルを取得するのに十分な Unix がありません。

于 2009-04-02T10:07:14.577 に答える
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 には root アクセスが必要なため、php では実行できませんでした。

'2>&1' の部分は、ここでの提案から使用されます。

于 2012-12-10T12:16:42.060 に答える