実用的なPHP機能の詳細(一)php glob()の使い方

9083 ワード

一、glob()を使用してファイルを検索する
ほとんどのPHP関数の関数名は文字通りその用途が理解できますが、glob()を見たとき、これが何に使われているのか分からないかもしれませんが、glob()はscandir()と同じように、ファイルを検索するために使用できます.次の使い方を見てください.
//         PHP     

$files = glob(‘*.php’);  

print_r($files);  

/*   : 

Array 

( 

[0] => phptest.php 

[1] => pi.php 

[2] => post_output.php 

[3] => test.php 

) 

*/  

二、メモリ使用状況情報の取得
PHPのメモリ回収メカニズムは非常に強力で、PHPスクリプトを使用して現在のメモリの使用状況を取得し、memoryを呼び出すこともできます.get_USage()関数当期メモリ使用状況を取得しmemory_を呼び出すget_peak_USage()関数は、メモリで使用されるピークを取得します.参照コードは次のとおりです.
echo “Initial: “.memory_get_usage().” bytes 
”;
/* Initial: 361400 bytes */ // for ($i = 0; $i < 100000; $i++) { $array []= md5($i); } // for ($i = 0; $i < 100000; $i++) { unset($array[$i]); } echo “Final: “.memory_get_usage().” bytes
”;
/* prints Final: 885912 bytes */ echo “Peak: “.memory_get_peak_usage().” bytes
”;
/* Peak: 13687072 bytes */

三、CPU使用状況情報の取得
メモリ使用量を取得した場合、Windowsでは使用できないPHPのgetrusage()を使用してCPU使用量を取得することもできます.
print_r(getrusage());  

/*    

Array 

( 

[ru_oublock] => 0 

[ru_inblock] => 0 

[ru_msgsnd] => 2 

[ru_msgrcv] => 3 

[ru_maxrss] => 12692 

[ru_ixrss] => 764 

[ru_idrss] => 3864 

[ru_minflt] => 94 

[ru_majflt] => 0 

[ru_nsignals] => 1 

[ru_nvcsw] => 67 

[ru_nivcsw] => 4 

[ru_nswap] => 0 

[ru_utime.tv_usec] => 0 

[ru_utime.tv_sec] => 0 

[ru_stime.tv_usec] => 6269 

[ru_stime.tv_sec] => 0 

) 

*/  

この構造はCPUについてよく知らない限り、難解に見えます.以下に説明します.
  • ru_oublock:ブロック出力動作
  • ru_inblock:ブロック入力動作
  • ru_msgsnd:送信メッセージ
  • ru_msgrcv:受信メッセージ
  • ru_maxrss:最大駐在セットサイズ
  • ru_ixrss:全共有メモリサイズ
  • ru_idrss:全非共有メモリサイズ
  • ru_minflt:ページ回収
  • ru_majflt:ページ失効
  • ru_nsignals:受信信号
  • ru_nvcsw:アクティブコンテキスト切替
  • ru_Nivcsw:パッシブコンテキスト切替
  • ru_nswap:交換領域
  • ru_utime.tv_usec:ユーザ状態時間(microseconds)
  • ru_utime.tv_sec:ユーザ状態時間(seconds)
  • ru_stime.tv_usec:システムカーネル時間(microseconds)
  • ru_stime.tv_sec:システムカーネル時間?(seconds)

  •  
    スクリプトがどれだけCPUを消費しているかを見るには、「ユーザー状態の時間」と「システムカーネル時間」の値を見る必要があります.秒とマイクロ秒の部分はそれぞれ提供されており、マイクロ秒の値を100万で割って秒の値に追加すると、小数部のある秒数が得られます.
    // sleep for 3 seconds (non-busy)  
    
    sleep(3);  
    
    $data = getrusage();  
    
    echo “User time: “.  
    
    ($data['ru_utime.tv_sec'] +  
    
    $data['ru_utime.tv_usec'] / 1000000);  
    
    echoSystem time: “.  
    
    ($data['ru_stime.tv_sec'] +  
    
    $data['ru_stime.tv_usec'] / 1000000);  
    
    /*    
    
    User time: 0.011552 
    
    System time: 0 
    
    */  

    sleepはシステム時間を消費しません.次の例を見てみましょう.
    // loop 10 million times (busy)  
    
    for($i=0;$i<10000000;$i++) {  
    
    }  
    
    $data = getrusage();  
    
    echo “User time: “.  
    
    ($data['ru_utime.tv_sec'] +  
    
    $data['ru_utime.tv_usec'] / 1000000);  
    
    echoSystem time: “.  
    
    ($data['ru_stime.tv_sec'] +  
    
    $data['ru_stime.tv_usec'] / 1000000);  
    
    /*    
    
    User time: 1.424592 
    
    System time: 0.004204 
    
    */  

    これは約14秒のCPU時間を費やし,ほとんどがユーザの時間であり,システム呼び出しがないためである. 
    システム時間とは、CPUがシステム呼び出し上でカーネル命令を実行するのにかかる時間である.次に例を示します.
    $start = microtime(true);  
    
    // keep calling microtime for about 3 seconds  
    
    while(microtime(true) – $start < 3) {  
    
    }  
    
    $data = getrusage();  
    
    echo “User time: “.  
    
    ($data['ru_utime.tv_sec'] +  
    
    $data['ru_utime.tv_usec'] / 1000000);  
    
    echoSystem time: “.  
    
    ($data['ru_stime.tv_sec'] +  
    
    $data['ru_stime.tv_usec'] / 1000000);  
    
    /* prints 
    
    User time: 1.088171 
    
    System time: 1.675315 
    
    */  

    上記の例では、CPUをより消費していることがわかります.
    四、任意の数の関数パラメータを渡す
    私たちはいます.NETまたはJAVAプログラミングでは、一般的な関数パラメータの個数は固定されていますが、PHPでは任意の数のパラメータを使用できます.次の例では、PHP関数のデフォルトパラメータを示します.
    //            
    
    function foo($arg1 = ”, $arg2 = ”) {  
    
    echo “arg1: $arg1
    ”;
    echo “arg2: $arg2
    ”; } foo(‘hello’
    ,'world’); /* : arg1: hello arg2: world */ foo(); /* : arg1: arg2: */ PHP , func_get_args() : // , function foo() { // $args = func_get_args(); foreach ($args as $k => $v) { echo “arg”.($k+1).”: $v
    ”; } } foo(); /* */ foo(‘hello’); /* arg1: hello */ foo(‘hello’, ‘world’, ‘again’); /* arg1: hello arg2: world arg3: again */