Как обнаружить все жесткие диски на машине с помощью переполнения стека

Как можно использовать PHP для обнаружения всех дисков на компьютере? Это обнаружение будет включать:

  • Жесткие диски
  • Pen диски
  • Жесткие диски

И как это можно сделать на нескольких платформах, таких как Linux и Windows?

0

Решение

Если вы используете Linux, вы можете использовать PHP exec() Функция для выполнения следующих 2 команд:

fdisk -l

какой список из диска & раздел как следует:

Disk /dev/xvda1: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda1 doesn't contain a valid partition table

Disk /dev/xvda2: 365.0 GB, 365041287168 bytes
255 heads, 63 sectors/track, 44380 cylinders, total 712971264 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda2 doesn't contain a valid partition table

Disk /dev/xvda3: 939 MB, 939524096 bytes
255 heads, 63 sectors/track, 114 cylinders, total 1835008 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/xvda3 doesn't contain a valid partition table

и эта команда:

mount

который перечисляет активные точки монтирования, включая своп. Вывод следующим образом:

/dev/xvda1 on / type ext4 (rw)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/xvda2 on /mnt type ext3 (rw)

С помощью анализа этих данных вы можете получить информацию обо всех дисках. Есть больше команд (например, cat /proc/partitions) доступно в Linux, вы можете исследовать альтернативы.


Для Windows это сложнее. Вы можете использовать (необходимые административные привилегии):

fsutil fsinfo drives

который возвращает (не очень информативно):

Drives: C:\ D:\ E:\ F:\

Подробную информацию о диске можно получить через:

diskpart

тогда выпустите:

list volume

тогда будет показан следующий вывод:

Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
----------  ---  -----------  -----  ----------  -------  ---------  --------
Volume 0     E                       DVD-ROM         0 B  No Media
Volume 1         System Rese  NTFS   Partition    100 MB  Healthy    System
Volume 2     C   System       NTFS   Partition     99 GB  Healthy    Boot
Volume 3     F   Data (local  NTFS   Partition    365 GB  Healthy

Но поскольку PHP не может выполнить команду и ввести более 1 команды для ввода, вы, вероятно, не сможете получить информацию напрямую. Рассмотрите возможность использования пакетной программы для вывода необходимой информации и использования PHP для вызова этой пакетной программы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]