Вывод списка дисков системы

14 Июня 2022 15:05

Получение списка дисков и информации по ним.

Вариант 1

Простой вариант с выводом букв дисков

<?php

function showDisks() {
  if(php_uname('s')=='Windows NT'){
    // windows
    $disks = exec('fsutil fsinfo drives');
    $disks = explode(' ', $disks);
    unset($disks[0]);

    foreach($disks as $key => $disk) {
        $disks[$key] = $disk;
    }

    return $disks;
  }else{
      // unix
      $data = exec('mount');
      $data = explode(' ', $data);

      $disks = [];
      foreach($data as $token) {
          if(substr($token,0,5) == '/dev/') {
              $disks[] = $token;
          }
      }

      return $disks;
  }
}

Вариант 2

Вариант с дополнительной информацией по дискам

<?php

$type = array("Unknown","Removable","Fixed","Network","CD-ROM","RAM Disk"); 

$fso = new COM('Scripting.FileSystemObject'); 
$D = $fso->Drives;
foreach($D as $d ){
  $dO = $fso->GetDrive($d);
  $s = "";

  if($dO->DriveType == 3){ 
     $n = $dO->Sharename; 
  }else if($dO->IsReady){ 
     $n = $dO->VolumeName; 
     $s = file_size($dO->FreeSpace) . " free of: " . file_size($dO->TotalSize); 
  }else{ 
     $n = "[Drive not ready]"; 
  } 

  echo "Drive " . $dO->DriveLetter . ": - " . $type[$dO->DriveType] . " - " . $n . " - " . $s . "<br>"; 

} 

function file_size($size) { 
  $filesizename = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB"); 
  
  return $size ? round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $filesizename[$i] : '0 Bytes'; 
} 

Результат