PHP | disk_free_space 函數
怎樣獲取目錄的剩餘空間
最近更新時間 2020-12-30 19:28:16
disk_free_space 返回給定目錄的可用空間。
disk_free_space() 函數將根據相應的文件系統或磁盤分區返回可用的字節數。如果函數處理錯誤返回 false。
如果傳入的不是文件目錄,會因操作系統不同返回值不一樣。
函數定義
disk_free_space(string $directory):float
// 源文件位於:ext/standard/filestat.c
# 函數定義
static int php_disk_free_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;
}
*space = FreeBytesAvailableToCaller.HighPart * (double) (1ULL << 32) + FreeBytesAvailableToCaller.LowPart;
PHP_WIN32_IOUTIL_CLEANUP_W()
return SUCCESS;
}
/* }}} */
#elif defined(OS2) /* {{{ */
{
...
if (DosQueryFSInfo( drive ? drive - 64 : 0, FSIL_ALLOC, &fsinfo, sizeof( fsinfo ) ) == 0) {
bytesfree = (double)fsinfo.cbSector * fsinfo.cSectorUnit * fsinfo.cUnitAvail;
*space = bytesfree;
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) {
bytesfree = (((double)buf.f_bavail) * ((double)buf.f_frsize));
} else {
bytesfree = (((double)buf.f_bavail) * ((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;
}
bytesfree = (((double)buf.f_bsize) * ((double)buf.f_bavail));
#endif
*space = bytesfree;
return SUCCESS;
}
#endif
參數
- checkdirectory - 文件系統目錄或者磁盤分區。不能作用於遠程文件,被檢查的文件必須是可通過服務器的文件系統訪問的。
返回值
- checkfloat - 返回目錄可用的字節數。失敗時返回 false。
示例1: - 使用 disk_free_space() 函數獲取給定目錄的可用空間。
<?php
/**
* PHP 使用 disk_free_space() 函數獲取給定目錄的可用空間。
*
* @since Version 1.0.0
* @filesource
*/
// 獲取目錄的字節數
$bytes = disk_free_space("/data");
echo 'Available:: '.$bytes.PHP_EOL;
echo 'Available:: '.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];
}
Available:: 3378401280 Available:: 3.15GB