Programing

file_get_contents ()에 시간 초과 설정이 있습니까?

lottogame 2020. 6. 19. 19:23
반응형

file_get_contents ()에 시간 초과 설정이 있습니까?


file_get_contents()루프 에서 메소드를 사용하여 일련의 링크를 호출하고 있습니다. 각 링크를 처리하는 데 15 분 이상 걸릴 수 있습니다. 이제 PHP file_get_contents()에 시간 초과 기간이 있는지에 대해 걱정하고 있습니까?

그렇다면 통화 시간이 초과되고 다음 링크로 이동합니다. 이전 링크를 끝내지 않고 다음 링크를 호출하고 싶지 않습니다.

file_get_contents()타임 아웃 기간이 있는지 알려주세요 . 를 포함하는 파일 file_get_contents()set_time_limit()0 (무제한)으로 설정됩니다 .


기본 시간 초과는 default_socket_timeoutini-setting에 의해 정의되며 60 초입니다. 즉시 변경할 수도 있습니다.

ini_set('default_socket_timeout', 900); // 900 Seconds = 15 Minutes

시간 초과를 설정하는 다른 방법 은 사용중인 HTTP 스트림 래퍼HTTP 컨텍스트 옵션 으로 stream_context_create시간 초과를 설정하는 데 사용 하는 것입니다.

$ctx = stream_context_create(array('http'=>
    array(
        'timeout' => 1200,  //1200 Seconds is 20 Minutes
    )
));

echo file_get_contents('http://example.com/', false, $ctx);

@diyism에서 언급했듯이 " default_socket_timeout, stream_set_timeout 및 stream_context_create timeout은 전체 연결 시간 초과가 아니라 모든 행 읽기 / 쓰기의 시간 초과입니다. "@stewe의 최고 답변이 실패했습니다.

을 사용하는 대신 file_get_contents항상 curl시간 초과와 함께 사용할 수 있습니다 .

링크 호출에 작동하는 작동 코드가 있습니다.

$url='http://example.com/';
$ch=curl_init();
$timeout=5;

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

$result=curl_exec($ch);
curl_close($ch);
echo $result;

default_socket_timeout 을 즉시 변경하면 file_get_contents 호출 후 해당 값을 복원하는 것이 유용 할 수 있습니다 .

$default_socket_timeout = ini_get('default_socket_timeout');
....
ini_set('default_socket_timeout', 10);
file_get_contents($url);
...
ini_set('default_socket_timeout', $default_socket_timeout);

내 호스트에서 php.ini를 변경하면 작동합니다.

; Default timeout for socket based streams (seconds)
default_socket_timeout = 300

참고 URL : https://stackoverflow.com/questions/10236166/does-file-get-contents-have-a-timeout-setting

반응형