PHP 實時獲取文件大小


要將一個大的數據寫入文件,但是不想寫入一個,想寫成一個文件xM,就需要實時判斷文件大小,如果不清理文件狀態緩存的話,無法實現效果。


clearstatcache() 函數清除文件狀態緩存。

clearstatcache() 函數會緩存某些函數的返回信息,以便提供更高的性能。但是有時候,比如在一個腳本中多次檢查同一個文件,而該文件在此腳本執行期間有被刪除或修改的危險時,你需要清除文件狀態緩存,以便獲得正確的結果。要做到這一點,就需要使用 clearstatcache() 函數。

會進行緩存的函數,即受 clearstatcache() 函數影響的函數:

    • stat()
    • lstat()
    • file_exists()
    • is_writable()
    • is_readable()
    • is_executable()
    • is_file()
    • is_dir()
    • is_link()
    • filectime()
    • fileatime()
    • filemtime()
    • fileinode()
    • filegroup()
    • fileowner()
    • filesize()
    • filetype()
    • fileperms()
 1 //信息存入文件,每個文件2m,
 2                 $max_size       = 1024 * 1024 * 2;
 3 
 4                 $v              = str_repeat( 'hello', 20 );
 5 
 6                 $tmp_i          = 1;
 7                 $handler        = null;
 8                 //foreach( Dinfo::gAllDocListHandle()->each() as $v ) {
 9                 for( $i = 0; $i <= 100000; $i ++ ){
10                     if( is_null( $handler ) ){
11                         $handler        = fopen( $file_path, 'ab' );
12                         flock( $handler, LOCK_EX );
13                     }
14 
15                     $tmp_val            = json_encode( $v ) . "\r\n";
16                     fwrite( $handler, $tmp_val, mb_strlen( $tmp_val, 'utf8' )  );
17                     clearstatcache();
18 
19                     if( filesize( $file_path ) >= $max_size ) {
20                         flock( $handler, LOCK_UN );
21                         fclose( $handler );
22                         $handler    = null;
23                         $file_path  = $cache_dir . 'allDoc.' . $tmp_i++ . '.txt';
24                     }
25                 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM