2009-04-02 86 views
6

Obtener el número de serie de la unidad de disco duro Proporcionado por el fabricante a través de PHP: ¿Cómo se puede hacer? Quiero guardarlo en un archivo.Obtener el número de serie de la unidad de disco duro Proporcionado por el fabricante a través de PHP

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

Sí, quiero que el número de serie del disco duro del servidor.

¿O se puede hacer a través de Adobe AIR? ¿O se puede hacer a través de un programa C en Windows?

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

Este número: BC16-5d5f es exclusivo para un disco duro? ¿Cómo es diferente del número de serie dado por el fabricante?

wmic DISKDRIVE GET SerialNumber 

Sólo aparece el siguiente texto en mi máquina Vista:

SerialNumber

En mi máquina XP, el comando es reconocido.

+0

La razón por la que no obtiene una respuesta se debe a su disco duro, ya sea específica no proporciona el sistema operativo con esta información o está dañado. – OIS

Respuesta

0

¿Desea tener el disco duro del servidor o de un cliente? PHP se ejecuta en el servidor, por lo que no me es posible obtenerlo directamente del cliente.

El manual sugieren que puede ejecutar comandos en su servidor: http://nl2.php.net/manual/en/ref.exec.php

Por desgracia, no lo suficiente para conseguir que Unix series de HDD.

2
hdparm -i /dev/sdX 

que está en linux, aunque no estoy seguro en las ventanas. Se podría ejecutar ese "sistema()" a través de

Tenga una mirada en 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

Puede ser un camino a seguir.

También, cuando me encontré con un "dir" en el símbolo del sistema, se muestra:

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

es eso lo que está buscando?

+0

Ese número de serie de volumen (es decir, partición). – vartec

+0

¡Oh, gracias! Lo tendré en mente. –

+0

¿Es este número BC16-5d5f exclusivo para un disco duro? ¿Cómo se genera este número BTW y cómo es diferente de el número de serie dado por el fabricante? – dharm0us

1

No puedo decirle la respuesta, pero supongo que tendrá que mirar en la dirección de las extensiones (tal vez incluso escribir una). Dudo que esto sea algo que tiene el núcleo de PHP.

Edit: se olvidó de la potencia bruta del "ejecutivo": -/

5

PHP en sí no tiene forma de acceder al hardware así.

Tendrá que sea

  • utilizar un comando del sistema operativo y de llamarlo con system() o exec()
  • escribir una extensión para PHP que le devolverá la información

Si usted está en Linux y tiene los privilegios y la configuración necesarios, puede usar $r = system("hdparm -I /dev/hda"); (reemplace hda con su hd) para obtener el número de serie de un disco duro determinado.

+0

Para evitar el acceso raíz, también tenemos 'ls/dev/disk/by-id /' ver [mi respuesta] (http://stackoverflow.com/a/26751810/881743);) –

8

Lo siguiente devuelve el número de serie del disco. Debería funcionar con varias unidades, obtendrá resultados múltiples. Simplemente ejecútelo con shell_exec.

wmic DISKDRIVE GET SerialNumber 

wmic.exe se encuentra en la carpeta windows system32. Y wmic existe en WinXP, lo he usado yo mismo.

Mi resultado en Vista:

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

no sé si todos los discos duros proporciona el número de serie al sistema operativo.

Parece el comando wmic sólo está disponible en las versiones profesionales de Windows XP, Windows Vista y Windows 7.

+0

Mi investigación concluyó que wmic es en Windows XP Professional, pero no en Windows XP Home. ¿Lo tienes en casa? Estoy buscando una forma de obtener información y me gustaría usar WMIC. – Dorothy

+0

no funciona para mí en win 7 64-bit –

+0

@coding_idiot Lo hace en mi copia de Windows 7 Home Premium (64 bit). Simplemente abre una ventana CLI y escribe el comando de arriba. – OIS

0

Puede utilizar

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

o

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

A continuación, puede repetirlo

Según la sugerencia de Patrick Daryll Glandien, puede ejecutar lo siguiente en máquinas basadas en * nix. $ hdserial = hdparm -I /dev/hda

hdparm -i /dev/sda devuelve menos información. Pero como hdparm necesita acceso de root, no se ejecutó con php para mí.

La parte '2> & 1' se utiliza desde el suggestion here.

+0

Esta respuesta fue aceptada para la parte wmic [aquí] (http://stackoverflow.com/questions/13797030/how-to-get-hard-disk-serial-number-with-php-on-localhost#comment18977745_13797030). – Lenin

+0

Esto es lo mismo que mi respuesta, solo 3 años después ... Y la razón por la que no se acepta es que el cartel de pregunta no tiene el comando wmic correcto (porque no tiene profesional) o el disco duro no da el sistema operativo el número de serie. – OIS

+0

@OIS ¿Quiere decir que acabo de duplicar su respuesta? – Lenin

0

Pruebe este código, está funcionando correctamente.

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

máquina basada en * nix también se puede utilizar porque ls /dev/disk/by-id/hdparm permiso necesidad raíz (ver Patrick Daryll G. respuesta).

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

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

y obtendrá algo como esto

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

Ejecutar lo siguiente con shell_exec (prueba en la línea de comandos si es necesario):

wmic path win32_physicalmedia get Tag,SerialNumber 

diskdrive no recibe la serie real número para mi unidad que muestra enchufado a través de un canal IDE.lo anterior parecía obtener los números de serie reales para todas mis unidades. Tag también le devolverá qué tipo de unidad es la que puede ser útil para identificar diferentes unidades.

Ejemplo de salida:

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