: diskfreespace () (alias disk_free_space () ) 지정된 파일 시스템/파티션에서 현재 PHP 프로세스에 사용 가능한 바이트 수를 반환합니다. 반환 값의 단위는 바이트 이며, 일반적으로 디스크의 절대 총 자유 바이트보다는 "실행중인 공정에 사용할 수있는 공간"을 나타냅니다 (유니 닉스에서는 예약 된 블록 및 권한의 영향을받습니다.
중요한 세부 사항은 아래에 설명되어 있으며 일반적인 용도가 제공됩니다.
<span><span><span class="hljs-variable">$free</span></span><span> = </span><span><span class="hljs-title function_ invoke__">diskfreespace</span></span><span>(</span><span><span class="hljs-string">'/'</span></span><span>); </span><span><span class="hljs-comment">// 또는 disk_free_space('/path/to/dir');</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$free</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"얻지 못했습니다"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"사용 가능한 바이트 수: <span class="hljs-subst">$free</span></span></span><span>\n";
}
</span></span>반환 값 단위 : 바이트.
가능한 반환 유형 : 일반적으로 현대 PHP (64 비트)의 정수 (INT, 64 비트)는 일부 환경 또는 이전 PHP/32 비트 환경에서 부동 소수점 번호 또는 오버플로 일 수 있습니다. 함수는 실패시 False를 반환하고 경고를 발행합니다.
매개 변수 : 파일 경로 또는 마운트 포인트 (예 : C : \ , /var , /mnt /share )를 전달하며 HTTP /FTP 및 기타 URL을 직접 전달할 수 없습니다 (로컬 또는 장착 경로가 필요함).
diskfreespace () 의 결과는 일반적으로 Unix의 STATVFS 또는 Windows와 같은 시스템 호출의 "사용 가능한"필드와 동일하며, 이는 현재 사용자가 사용 가능한 바이트 수를 나타냅니다 (또는 실행중인 프로세스). 그러므로:
Unix/Linux에서 파일 시스템은 일반적으로 루트의 블록 (예 : 5%)의 일부를 보유합니다. 뿌리가 아닌 사용자는이 부분을 볼 수 없으며 반환 값에는 예약 공간이 포함되어 있지 않습니다 .
PHP가 불평등하지 않은 사용자로 실행되면 반환 값은 슈퍼 사용자가 사용할 수있는 모든 여유 공간보다는 사용자가 쓸 수있는 공간을 반영합니다.
네트워크 마운트 (NFS, SMB) 또는 컨테이너/가상 머신 환경의 경우 리턴 값은 마운트 옵션 및 컨테이너 제한 (할당량, CGROUPS 등)의 영향을받습니다.
따라서 - 디스크가 "실제로"무료인지 확인하려면 권한과 함께 값, 루트인지, 파일 시스템 예약/할당량 설정을 이해해야합니다 .
DISK_TOTAL_SPACE ()는 파티션의 총 바이트 수 (총 용량)를 반환하고 DISKFREESPACE ()는 사용 가능한 바이트 수를 반환합니다. 사용률은이 둘을 결합하여 계산할 수 있습니다.
<span><span><span class="hljs-variable">$path</span></span><span> = </span><span><span class="hljs-string">'/'</span></span><span>;
</span><span><span class="hljs-variable">$total</span></span><span> = </span><span><span class="hljs-title function_ invoke__">disk_total_space</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>);
</span><span><span class="hljs-variable">$free</span></span><span> = </span><span><span class="hljs-title function_ invoke__">diskfreespace</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$total</span></span><span> && </span><span><span class="hljs-variable">$free</span></span><span> !== </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-variable">$used</span></span><span> = </span><span><span class="hljs-variable">$total</span></span><span> - </span><span><span class="hljs-variable">$free</span></span><span>;
</span><span><span class="hljs-variable">$usedPercent</span></span><span> = </span><span><span class="hljs-variable">$total</span></span><span> > </span><span><span class="hljs-number">0</span></span><span> ? (</span><span><span class="hljs-variable">$used</span></span><span> / </span><span><span class="hljs-variable">$total</span></span><span>) * </span><span><span class="hljs-number">100</span></span><span> : </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">printf</span></span><span>(</span><span><span class="hljs-string">"총 용량: %s, 사용 가능: %s, 사용된: %.2f%%\n"</span></span><span>, </span><span><span class="hljs-title function_ invoke__">formatBytes</span></span><span>(</span><span><span class="hljs-variable">$total</span></span><span>), </span><span><span class="hljs-title function_ invoke__">formatBytes</span></span><span>(</span><span><span class="hljs-variable">$free</span></span><span>), </span><span><span class="hljs-variable">$usedPercent</span></span><span>);
}
</span></span>디스크 공간에는 일반적으로 사용되는 두 가지 장치가 있습니다.
바이너리 (운영 체제에서 일반적으로 사용) : 1 KIB = 1024 바이트, 1 MIB = 1024 kib = 10242 바이트, 1 gib = 10243 바이트.
10 진수 (일부 제조업체 또는 하드 디스크 사양) : 1 KB = 1000 바이트, 1MB = 10002 바이트.
PHP는 바이트 수를 반환합니다. "사람이 읽을 수있는"디스플레이가 필요한 경우 일반적으로 이진 (1024)으로 운영 체제 도구 ( DF -H 등)에 더 가깝게 변환됩니다. 일반적으로 GIB).
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">formatBytes</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$bytes</span></span></span><span>, </span><span><span class="hljs-variable">$precision</span></span><span> = </span><span><span class="hljs-number">2</span></span><span>) {
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_numeric</span></span><span>(</span><span><span class="hljs-variable">$bytes</span></span><span>) || </span><span><span class="hljs-variable">$bytes</span></span><span> < </span><span><span class="hljs-number">0</span></span><span>) </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">'0 B'</span></span><span>;
</span><span><span class="hljs-variable">$units</span></span><span> = [</span><span><span class="hljs-string">'B'</span></span><span>,</span><span><span class="hljs-string">'KiB'</span></span><span>,</span><span><span class="hljs-string">'MiB'</span></span><span>,</span><span><span class="hljs-string">'GiB'</span></span><span>,</span><span><span class="hljs-string">'TiB'</span></span><span>,</span><span><span class="hljs-string">'PiB'</span></span><span>];
</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$bytes</span></span><span> >= </span><span><span class="hljs-number">1024</span></span><span> && </span><span><span class="hljs-variable">$i</span></span><span> < </span><span><span class="hljs-title function_ invoke__">count</span></span><span>(</span><span><span class="hljs-variable">$units</span></span><span>)-</span><span><span class="hljs-number">1</span></span><span>) {
</span><span><span class="hljs-variable">$bytes</span></span><span> /= </span><span><span class="hljs-number">1024</span></span><span>;
</span><span><span class="hljs-variable">$i</span></span><span>++;
}
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">round</span></span><span>(</span><span><span class="hljs-variable">$bytes</span></span><span>, </span><span><span class="hljs-variable">$precision</span></span><span>) . </span><span><span class="hljs-string">' '</span></span><span> . </span><span><span class="hljs-variable">$units</span></span><span>[</span><span><span class="hljs-variable">$i</span></span><span>];
}
</span></span>예 : 1073741824 바이트 = 1073741824 / 1024^3 = 1 gib (예 : 1Gib).
32 비트 오버플 로 : 32 비트 PHP에서 더 많은 수의 바이트가 Int 범위에서 벗어날 수있어 오류 또는 부동 소수점 근사치가 발생할 수 있습니다. 64 비트 환경에서 실행하거나 Float /String을 사용하여 많은 수를 처리하십시오.
반환 값을 확인하십시오 : return false 함수가 실패하면 (! $ free) 대신 오류를 판단하려면 apply === false (0 바이트도 잘못된 값이기 때문에).
권한 및 보존 블록 : "현재 프로세스에 가시/현재 사용 가능한"공간으로 반환된다는 것을 인식하십시오. 웹 서버 사용자로 실행되면 결과가 사용 가능한 슈퍼 사용자보다 낮을 수 있습니다.
네트워크 파일 시스템 (NFS/SMB) :이 마운트는 불안정하거나 마운트 옵션의 영향을받을 수 있으며 특정 마운트 구성과 함께 테스트해야합니다.
빠른 모니터링 : 알람 (예 : 디스크 사용량> 90%)에 사용되는 경우 Disk_Total_Space () 와 DiskFreespace () 의 조합을 사용하고 유지 된 블록이나 할당량으로 오해를 피하기 위해 임계 값을 보수적으로 설정하십시오.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$path</span></span><span> = </span><span><span class="hljs-string">'/'</span></span><span>; </span><span><span class="hljs-comment">// 감지 될 경로</span></span><span>
</span><span><span class="hljs-variable">$total</span></span><span> = @</span><span><span class="hljs-title function_ invoke__">disk_total_space</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>);
</span><span><span class="hljs-variable">$free</span></span><span> = @</span><span><span class="hljs-title function_ invoke__">diskfreespace</span></span><span>(</span><span><span class="hljs-variable">$path</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$total</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span> || </span><span><span class="hljs-variable">$free</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"디스크 정보를 얻을 수 없습니다(경로 오류 또는 불충분 한 권한 일 수 있습니다)\n"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>);
}
</span><span><span class="hljs-variable">$used</span></span><span> = </span><span><span class="hljs-variable">$total</span></span><span> - </span><span><span class="hljs-variable">$free</span></span><span>;
</span><span><span class="hljs-variable">$usedPercent</span></span><span> = </span><span><span class="hljs-variable">$total</span></span><span> > </span><span><span class="hljs-number">0</span></span><span> ? (</span><span><span class="hljs-variable">$used</span></span><span> / </span><span><span class="hljs-variable">$total</span></span><span>) * </span><span><span class="hljs-number">100</span></span><span> : </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"길: <span class="hljs-subst">$path</span></span></span><span>\n";
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"총 용량: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">formatBytes</span></span><span>(</span><span><span class="hljs-variable">$total</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"사용 가능: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">formatBytes</span></span><span>(</span><span><span class="hljs-variable">$free</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"사용된: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">number_format</span></span><span>(</span><span><span class="hljs-variable">$usedPercent</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>) . </span><span><span class="hljs-string">"%\n"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$usedPercent</span></span><span> >= </span><span><span class="hljs-number">90</span></span><span>) {
</span><span><span class="hljs-comment">// 예제 경보 논리</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"경고하다:디스크는 그 이상으로 사용되었습니다 90%!\n"</span></span><span>;
}
</span><span><span class="hljs-comment">// formatBytes 함수는 위와 동일합니다</span></span><span>
</span></span>DiskFreespace ()는 바이트를 반환하여 디스크의 모든 사용자가 사용할 수있는 "절대 유휴 금액"이 아닌 이 마운트 포인트에서 현재 PHP 프로세스에 사용 가능한 공간을 나타냅니다.
결과는 파일 시스템 예약 블록, 권한, 할당량, 네트워크 마운트 및 운영 환경 (컨테이너/가상 머신)의 영향을받습니다.
표시 할 때는 운영 체제의 일반적인 디스플레이 방법에 더 가깝습니다.
오류를 처리하고 32 비트 환경에서 오류를 처리하고 많은 수의 오버플로 를 조심하십시오.