PHP file_get_contents() 타임아웃 적용

(PHP file get contents() 시간제한 적용에서 넘어옴)

1 개요[ | ]

PHP file_get_contents() 타임아웃 적용
PHP file_get_contents() 시간제한 적용
기본값은 보통 60초임
  • 이외 별도로 file_get_contents() 함수에 파라미터를 지정하여 timeout 설정 가능

2 구현[ | ]

$ctx = stream_context_create( [ 'http'=>['timeout'=>] ] );
echo file_get_contents('URL주소', false, $ctx);

3 테스트[ | ]

  • sleep_hello.php: 입력된 시간(초)만큼 sleep 후 hello 출력
  • call_sleep_hello.php: 3초 타임아웃을 걸고 1~5초로 테스트
sleep_hello.php
<?php
$sec = $_GET['sec'];
echo "sleep($sec)";
sleep($sec);
echo "Hello!";
call_sleep_hello.php
<?php
$ctx = stream_context_create( [ 'http'=>['timeout'=>3] ] );
for( $i=1; $i<6; $i++ ) {
	$r = rand(1000, 9999);
	$url = "http://zetawiki.com/sleep_hello.php?r=$r&sec=$i";
	echo "**** URL: $url\n";
	$contents = file_get_contents($url, false, $ctx);
	var_dump( $contents );
}
→ 캐시방지를 위해, 랜덤값 $r을 넣어 항상 다른 URL을 호출하도록 함
실행결과
[root@zetawiki ~]# php call_sleep_hello.php 
**** URL: http://zetawiki.com/sleep_hello.php?r=2291&sec=1
string(14) "sleep(1)Hello!"
**** URL: http://zetawiki.com/sleep_hello.php?r=6593&sec=2
string(14) "sleep(2)Hello!"
**** URL: http://zetawiki.com/sleep_hello.php?r=7900&sec=3
string(14) "sleep(3)Hello!"
**** URL: http://zetawiki.com/sleep_hello.php?r=6671&sec=4
PHP Warning:  file_get_contents(http://zetawiki.com/sleep_hello.php?r=6671&sec=4): failed to open stream: HTTP request failed!  in /var/www/html/call_sleep_hello.php on line 7
bool(false)
**** URL: http://zetawiki.com/sleep_hello.php?r=8920&sec=5
PHP Warning:  file_get_contents(http://zetawiki.com/sleep_hello.php?r=8920&sec=5): failed to open stream: HTTP request failed!  in /var/www/html/call_sleep_hello.php on line 7
bool(false)
→ 타임아웃에 걸리면 Warning이 발생하고 결과값은 false가 됨

4 같이 보기[ | ]

5 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}