programing

file_get_contents()에는 타임아웃 설정이 있습니까?

newsource 2022. 9. 22. 00:27

file_get_contents()에는 타임아웃 설정이 있습니까?

루프 내의 메서드를 사용하여 일련의 링크를 호출합니다.각 링크를 처리하는 데 15분 이상 걸릴 수 있습니다.이제 PHP가 PHP의file_get_contents()타임아웃 기간이 있나요?

[네(Yes)]의 경우 콜과 함께 타임아웃이 되어 다음 링크로 넘어갑니다.앞의 링크가 종료되지 않는 한 다음 링크를 호출하고 싶지 않습니다.

그래서, 나에게 말해 주세요file_get_contents()에는 타임아웃 기간이 있습니다.다음 파일이 포함되어 있는 파일file_get_contents()0(표준)으로 설정되어 있습니다.

디폴트 타임아웃은 ini 설정(60초)으로 정의됩니다.즉석에서 변경할 수도 있습니다.

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

타임아웃을 설정하는 또 다른 방법은 사용 중인 HTTP 스트림래퍼HTTP 컨텍스트옵션으로서 타임아웃을 설정하는 것입니다.

$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 타임아웃은 모두 모든 행의 읽기/쓰기 타임아웃입니다."그리고 @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;

Yes! 세 번째 매개 변수에서 스트림 컨텍스트를 전달하면 다음과 같이 됩니다.

여기서 타임아웃은 1초입니다.

file_get_contents("https://abcedef.com", 0, stream_context_create(["http"=>["timeout"=>1]]));

https://www.php.net/manual/en/function.file-get-contents.php의 소스 인 코멘트 섹션

HTTP 컨텍스트옵션:

method
header
user_agent
content
request_fulluri
follow_location
max_redirects
protocol_version
timeout

비 HTTP 스트림콘텍스트

Socket
FTP
SSL
CURL
Phar
Context (notifications callback)
Zip

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

프로토타이핑의 경우, 쉘의 컬을 사용하여-m파라미터는 밀리초 경과를 허용하며 연결이 시작되지 않았거나 오류 404, 500, 잘못된 URL 또는 전체 데이터가 허용된 시간 범위 내에 완전히 검색되지 않은 경우 두 경우 모두 작동합니다. 타임아웃은 항상 유효합니다.Php는 절대 어울리지 않을야.

단순히 셸 콜에서 비위생 사용자 데이터를 전달하지 마십시오.

system("curl -m 50 -X GET 'https://api.kraken.com/0/public/OHLC?pair=LTCUSDT&interval=60' -H  'accept: application/json' > data.json");
// This data had been refreshed in less than 50ms
var_dump(json_decode(file_get_contents("data.json"),true));

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