9 개의 PHP 가 유용 한 기능 (2)

5984 단어 PHPwindows각본
원본:http://coolshell.cn/?p=2394
4. CPU 사용 정보
사용 하 다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: 보 낸 message
  • ru_msgrcv: 받 은 message
  • ru_maxs: 최대 주류 집합 크기
  • ru_ixrs: 모든 공유 메모리 크기
  • 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);
    echo "System 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);
    echo "System 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);
    echo "System time: ".
    	($data['ru_stime.tv_sec'] +
    	$data['ru_stime.tv_usec'] / 1000000);
    
    /* prints
    User time: 1.088171
    System time: 1.675315
    */
    
     
    우 리 는 위의 이 예 가 CPU 를 더 소모 하 는 것 을 볼 수 있다.
    5. 시스템 상수
    PHP 는 매우 유용 한 시스템 상수 을 제공 하여 현재 줄 번호 ( LINE), 파일 ( FILE), 디 렉 터 리 ( DIR), 함수 명 ( FUNCTION), 유형 명 ( CLASS), 방법 명 ( METHOD) 과 이름 공간 ( NAMESPACE) 을 얻 을 수 있 습 니 다. C 언어 와 비슷 합 니 다.
    우 리 는 이 물건 들 이 주로 디 버 깅 에 사용 된다 고 생각 할 수 있 습 니 다. 예 를 들 어 우리 가 include 다른 파일 을 사용 할 때 사용 할 수 있 습 니까?FILE__ (물론 PHP 5.3 이후 에 도 DIR 를 사용 할 수 있 습 니 다.) 다음은 예 입 니 다.
    // this is relative to the loaded script's path
    // it may cause problems when running scripts from different directories
    require_once('config/database.php');
    
    // this is always relative to this file's path
    // no matter where it was included from
    require_once(dirname(__FILE__) . '/config/database.php');
    

     다음은 사용LINE__ 디버그 에 도움 이 되 는 debug 정 보 를 출력 합 니 다.
    // some code
    // ...
    my_debug("some debug message", __LINE__);
    /*   
    Line 4: some debug message
    */
    
    // some more code
    // ...
    my_debug("another debug message", __LINE__);
    /*   
    Line 11: another debug message
    */
    
    function my_debug($msg, $line) {
    	echo "Line $line: $msg
    "; }
     
    6. 유일한 ID 생 성
    많은 사람들 이 md5 () 를 사용 하여 유일한 ID 를 만 듭 니 다. 다음 과 같 습 니 다.
    // generate unique string
    echo md5(time() . mt_rand(1,1000000));
    

     사실 PHP 중 에 하 나 는?uniqid() 의 함 수 는 이것 을 전문 적 으로 하 는 것 이다.
    // generate unique string
    echo uniqid();
    /*   
    4bd67c947233e
    */
    
    // generate another unique string
    echo uniqid();
    /*   
    4bd67c9472340
    */
    
     
    생 성 된 ID 의 앞 자리 가 똑 같다 는 것 을 알 게 될 것 입 니 다. 이것 은 생 성기 가 시스템 에 의존 하 는 시간 이기 때 문 입 니 다. 이것 은 사실 매우 좋 은 기능 입 니 다. 왜냐하면 당신 은 이 ID 들 을 정렬 하기 쉽 기 때 문 입 니 다.이 MD5 는 할 수 없습니다.
    이름 을 바 꾸 지 않도록 접 두 사 를 붙 일 수 있 습 니 다.
    //   
    echo uniqid('foo_');
    /*   
    foo_4bd67d6cd8b8f
    */
    
    //      
    echo uniqid('',true);
    /*   
    4bd67d6cd8b926.12135106
    */
    
    //   
    echo uniqid('bar_',true);
    /*   
    bar_4bd67da367b650.43684647
    */
    

     그리고 생 성 된 ID 가 MD5 보다 짧 아 져 많은 공간 을 절약 할 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기