2009-04-02 7 views
6

Obtenir série Nombre de disque dur fourni par le fabricant par PHP: Comment peut-il être fait? Je veux le stocker dans un fichier.Mise en série Nombre de disque dur fourni par le fabricant par PHP

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

Oui, je veux le numéro de série du disque dur du serveur.

Ou est-ce possible via Adobe AIR? Ou peut-il être fait à travers un programme C sur Windows?

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

Ce numéro: BC16-5d5f est-il unique pour un disque dur? En quoi est-il différent du numéro de série du fabricant?

wmic DISKDRIVE GET SerialNumber 

Affiche uniquement le texte suivant sur ma machine Vista:

SerialNumber

Sur ma machine XP, la commande est non reconnu.

+0

La raison pour laquelle vous ne recevez pas de réponse est parce que votre disque dur spécifique ne fournit pas non plus le système d'exploitation avec ces informations ou est endommagé. – OIS

Répondre

0

Voulez-vous le disque dur du serveur ou d'un client? PHP s'exécute sur le serveur donc l'obtenir directement du client ne me semble pas possible.

Le manuel suggère que vous pouvez exécuter des commandes sur votre serveur: http://nl2.php.net/manual/en/ref.exec.php

Malheureusement, je ne Unix pas assez pour vous Serials hdd.

2
hdparm -i /dev/sdX 

sur linux, mais pas sur Windows. Vous pouvez exécuter que par « system() »

Jetez un oeil à 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

pourrait être une voie à suivre.

Aussi, quand je courais un « dir » à l'invite de commande, il montre:

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

Est-ce que vous cherchez?

+0

Ce volume (c'est-à-dire la partition) numéro de série. – vartec

+0

Oh, merci! Je garderai ça à l'esprit. –

+0

Ce numéro BC16-5d5f est-il unique pour un disque dur? Comment ce numéro est-il généré BTW et en quoi est-il différent de le fabricant a donné le numéro de série? – dharm0us

1

Je ne peux pas vous donner la réponse, mais je suppose que vous devrez regarder dans le sens des extensions (peut-être même en écrire une vous-même). Je doute que ce soit quelque chose que le noyau de PHP a.

Edit: j'oublié la puissance brute de « exec »: -/

5

PHP lui-même n'a aucun moyen d'accéder au matériel comme ça.

Vous devrez soit

  • utiliser une commande de votre système d'exploitation et l'appeler avec system() ou exec()
  • écrire une extension pour PHP qui vous renvoyer les informations

Si vous êtes sur Linux et les privilèges et la configuration nécessaires, vous pouvez utiliser $r = system("hdparm -I /dev/hda"); (remplacer hda avec votre hd) pour obtenir le numéro de série d'un disque dur donné.

+0

Pour éviter l'accès root, nous avons aussi 'ls/dev/disk/par-id /' voir [ma réponse] (http://stackoverflow.com/a/26751810/881743);) –

8

Les rendements suivants le disque numéro de série. Si vous travaillez avec plusieurs disques, vous obtiendrez plusieurs résultats. Il suffit de le lancer avec shell_exec.

wmic DISKDRIVE GET SerialNumber 

wmic.exe est situé dans votre dossier Windows system32. Et wmic existe sur WinXP, je l'ai utilisé moi-même.

Mon résultat sur Vista:

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

Je ne sais pas si tous harddrives fournit le numéro de série à l'OS.

Il semble que la commande wmic est disponible uniquement sur les versions professionnelles de Windows XP, Windows Vista et Windows 7.

+0

Mes recherches ont conclu que wmic est sur Windows XP Professionnel mais pas sur Windows XP Home. L'avez-vous eu chez vous? Je cherche un moyen d'obtenir des informations et j'aimerais utiliser WMIC. – Dorothy

+0

ne fonctionne pas pour moi sur win 7 64 bits –

+0

@coding_idiot Il le fait sur ma copie de Windows 7 Home Premium (64 bits). Ouvrez simplement une fenêtre CLI et tapez la commande ci-dessus. – OIS

0

Vous pouvez utiliser

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

ou

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

Ensuite, vous peut faire écho.

Basé sur indice de Patrick Daryll Glandien, vous pouvez exécuter suivant sur * machines à base de nix. $ hdserial = hdparm -I /dev/hda

hdparm -i /dev/sda Renvoie moins d'information. Mais comme hdparm a besoin d'un accès root, il ne fonctionne pas avec php pour moi.

La partie '2> & 1' est utilisée à partir de suggestion here.

+0

Cette réponse a été acceptée pour la partie wmic [ici] (http://stackoverflow.com/questions/13797030/how-to-get-hard-disk-serial-number-with-php-on-localhost#comment18977745_13797030). – Lenin

+0

C'est la même chose que ma réponse, juste 3 ans plus tard ... Et la raison pour laquelle il n'est pas accepté est que l'afficheur de question n'a pas la bonne commande wmic (car il n'a pas de professionnel) ou le hdd ne donne pas l'OS le numéro de série. – OIS

+0

@OIS Voulez-vous dire que je viens de dupliquer votre réponse? – Lenin

0

Essayez ce code qu'il fonctionne correctement.

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

Sur la machine à base * nix, vous pouvez également utiliser ls /dev/disk/by-id/ parce hdparm besoin de la permission root (voir Patrick Daryll G. réponse).

<?php 
exec($command.' 2>&1', $output); 
echo 'HDD: '.$output[0].'<br>'; 

$outputs = explode('_', $outputs[0]); 
$outputs = end($outputs); 
echo 'HDD-SN: '.$output.'<br>'; 

et vous obtiendrez quelque chose comme ça

HDD: ata-HGST_XXX1234567890XX_ABCD123456789X // <connection>-<hdd_model>_<hdd_sn> 
HDD-SN: ABCD123456789X // Your HDD Serial Number 
0

Exécutez la commande suivante avec shell_exec (test dans l'invite de commande si nécessaire):

wmic path win32_physicalmedia get Tag,SerialNumber 

diskdrive ne reçoit pas la série réelle nombre pour mon lecteur qui montre branché à travers un canal IDE.Ce qui précède a semblé obtenir les numéros de série réels pour tous mes lecteurs. Le tag vous renverra également le type de lecteur qui peut être utile pour identifier les différents lecteurs.

sortie Exemple:

SerialNumber  Tag 
WD-WX55D33JQNZ4 \\.\PHYSICALDRIVE4 
S1OKIJNH938475 \\.\PHYSICALDRIVE0 
WD-CV44HJ5L765Y \\.\PHYSICALDRIVE1 
WD-WX41D65SD1UU \\.\PHYSICALDRIVE2 
WD-WXB1SD3OIJHG \\.\PHYSICALDRIVE3 
       \\.\CDROM0 
Questions connexes