2012-11-16 2 views
1

PHP에서 스트림을 열고 쓰기 작업을하고 있습니다. 스트림의 독서에 타임 아웃을 설정하고 싶지만 메타 데이터가 "timed_out"을 표시하지는 않습니다 (0 마이크로 초, 10 마이크로 초).stream_set_timeout은 제한 시간이 얼마되지 않아도 작동하지 않습니다.

관련 코드 : 내가 잘못

//open the socket 
if ($fp = fsockopen(gethostbyname(host), port, $errno, $errstr, $timeout)) { 

    //Send command to the host 
    if (fwrite($fp, $requestCommand)) { 
     //Set timeout and blocking 
     stream_set_blocking($fp, FALSE); 
     stream_set_timeout($fp, 0, 10); 

     //Check for timeout 
     $info = stream_get_meta_data($fp); 
     echo $info[ 'timed_out' ]; 

     //Read and check for timeout 
     while (!$info['timed_out'] && !feof($fp)) { 
      $response .= fread($fp, 4096); 

      //Get meta data (which has timeout info) 
      $info = stream_get_meta_data($fp); 
     } 
    } 
} 

을 뭐하는 거지?

+0

CLI 또는 브라우저에서이 작업을 실행하고 있습니까? – Pheonix

답변

1

내가 찾은 열쇠는 stream_set_blocking($fp, TRUE)입니다.

FALSE이면 $status['timed_out']은 실용적인 효과가없는 것 같습니다. TRUE [PHP 기본 설정]이 작동합니다.

+0

그게 효과가! 고맙습니다! 내가 PHP의 웹 사이트에서 본 예제는 FALSE로 설정되어 있었고 어떤 이유로 블로킹으로 시도하지 않았습니다. 이것이 API "계약"이 작동해야하는 방법인지 알고 있습니까? –

관련 문제