PHP | disk_total_space 函數

怎樣獲取磁盤的總空間

最近更新時間 2020-12-30 19:41:18

disk_total_space 返回給定目錄的磁盤總大小。

disk_free_space() 函數給出一個包含有一個目錄的字符串,本函數將根據相應的文件系統或磁盤分區返回所有的字節數。返回的是該目錄所在的磁盤分區的總大小,因此在給出同一個磁盤分區的不同目錄作為參數所得到的結果完全相同。

函數定義

disk_total_space(string $directory):float
// 源文件位於:ext/standard/filestat.c
# 函數定義

static int php_disk_total_space(char *path, double *space) /* {{{ */
#if defined(WINDOWS) /* {{{ */
{
  ...
  if (GetDiskFreeSpaceExW(pathw, &FreeBytesAvailableToCaller, &TotalNumberOfBytes, &TotalNumberOfFreeBytes) == 0) {
    char *err = php_win_err();
    php_error_docref(NULL, E_WARNING, "%s", err);
    php_win_err_free(err);
    PHP_WIN32_IOUTIL_CLEANUP_W()
    return FAILURE;
  }

  /* i know - this is ugly, but i works  */
  *space = TotalNumberOfBytes.HighPart * (double) (((zend_ulong)1) << 31) * 2.0 + TotalNumberOfBytes.LowPart;

  PHP_WIN32_IOUTIL_CLEANUP_W()

  return SUCCESS;
}
/* }}} */
#elif defined(OS2) /* {{{ */
{
  ...
  if (DosQueryFSInfo( drive ? drive - 64 : 0, FSIL_ALLOC, &fsinfo, sizeof( fsinfo ) ) == 0) {
    bytestotal = (double)fsinfo.cbSector * fsinfo.cSectorUnit * fsinfo.cUnit;
    *space = bytestotal;
    return SUCCESS;
  }
  return FAILURE;
}
/* }}} */
#else /* {{{ if !defined(OS2) && !defined(WINDOWS) */
{
  ...
#if defined(HAVE_SYS_STATVFS_H) && defined(HAVE_STATVFS)
  if (statvfs(path, &buf)) {
    php_error_docref(NULL, E_WARNING, "%s", strerror(errno));
    return FAILURE;
  }
  if (buf.f_frsize) {
    bytestotal = (((double)buf.f_blocks) * ((double)buf.f_frsize));
  } else {
    bytestotal = (((double)buf.f_blocks) * ((double)buf.f_bsize));
  }

#elif (defined(HAVE_SYS_STATFS_H) || defined(HAVE_SYS_MOUNT_H)) && defined(HAVE_STATFS)
  if (statfs(path, &buf)) {
    php_error_docref(NULL, E_WARNING, "%s", strerror(errno));
    return FAILURE;
  }
  bytestotal = (((double)buf.f_bsize) * ((double)buf.f_blocks));
#endif

  *space = bytestotal;
  return SUCCESS;
}
#endif

參數

  • checkdirectory - 文件系統目錄或者磁盤分區。不能作用於遠程文件,被檢查的文件必須是可通過服務器的文件系統訪問的。

返回值

  • checkfloat - 返回目錄磁盤總大小字節數。失敗時返回 false。

示例1: - 使用 disk_total_space() 函數獲取給定目錄的磁盤總大小。

<?php
/**
 * PHP 使用 disk_free_space() 函數獲取給定目錄的可用空間。
 *
 * @since Version 1.0.0
 * @filesource
 */

// 獲取目錄的字節數
$bytes = disk_total_space("/data");

echo 'Total:: '.$bytes.PHP_EOL;
echo 'Total:: '.humanReadable($bytes).PHP_EOL;

// 友好顯示字節數
function humanReadable($bytes) {
  $prefix = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
  $base = 1024;
  $class = min((int)log($bytes , $base) , count($prefix) - 1);

  return sprintf('%1.2f' , $bytes / pow($base, $class)) . $prefix[$class];
}
Total:: 42007232512
Total:: 39.12GB
rss_feed