PHP에서 컬 타임아웃 설정
php를 통해 eXist 데이터베이스에서 컬 요청을 실행하고 있습니다.데이터 집합이 매우 크기 때문에 XML 응답을 반환하는 데 오랜 시간이 걸립니다.이를 수정하기 위해 긴 타임아웃으로 컬 요청을 설정했습니다.
$ch = curl_init();
$headers["Content-Length"] = strlen($postString);
$headers["User-Agent"] = "Curl/1.0";
curl_setopt($ch, CURLOPT_URL, $requestUrl);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'admin:');
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
$response = curl_exec($ch);
curl_close($ch);
단, 컬 요구는 항상 요구가 완료되기 전에 종료됩니다(브라우저를 통해 요구되었을 경우 1000 미만).이게 타임아웃을 컬로 설정하는 적절한 방법인지 아는 사람 있나요?
다음 문서를 참조하십시오.http://www.php.net/manual/en/function.curl-setopt.php
CURLOPT_CONNECTTIMEOUT
- 연결을 시도하는 동안 대기하는 시간(초)입니다.무기한 대기하려면 0을 사용합니다.
CURLOPT_TIMEOUT
- cURL 함수를 실행할 수 있는 최대 초수.
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds
또한 php 스크립트 self의 실행 시간을 확대하는 것도 잊지 마십시오.
set_time_limit(0);// to infinity for example
음, 내가 보기엔CURLOPT_TIMEOUT
에 cURL 함수의 실행에 필요한 시간을 나타냅니다.내 생각에 당신은 실제로 이 모든 것들을CURLOPT_CONNECTTIMEOUT
대신 cURL에 접속이 완료될 때까지 대기하는 최대 시간이 나타나기 때문입니다.
어떤 사람들에게는 이런 특이한 점이 있을 수 있어PHP 문서의 코멘트로부터.
cURL이 1초 이내에 타임아웃되도록 하려면
CURLOPT_TIMEOUT_MS
단, "Unix-like systems"에는 오류 "cURL Error (28) : Timeout was reached"와 함께 값이 1000 ms 미만일 경우 libcurl이 즉시 타임아웃되는 오류/"feature"가 있습니다.이 동작에 대한 설명은 다음과 같습니다.libcurl이 표준 시스템 이름 리졸바를 사용하도록 구축되어 있는 경우 전송의 그 부분은 최소 1초의 타임아웃을 허용하는 풀초 해상도를 계속 사용합니다.
이것이 PHP 개발자에게 의미하는 것은 "libcurl이 표준 시스템 이름 해결기를 사용하고 있는지 여부를 알 수 없기 때문에 먼저 테스트하지 않고는 이 함수를 사용할 수 없습니다(그러나 거의 확실합니다)"입니다.
문제는 (Li|U)nix에서 libcurl이 표준 이름 해결기를 사용하는 경우 이름 해결 중에 SIGALRM이 발생하며 libcurl이 타임아웃알람이라고 생각한다는 것입니다
해결책은 CURLOPT_NOSIGNAL을 사용하여 신호를 비활성화하는 것입니다.다음으로 타임아웃을 테스트할 수 있도록 자신에게 10초 지연을 요구하는 스크립트의 예를 나타냅니다.
if (!isset($_GET['foo'])) {
// Client
$ch = curl_init('http://localhost/test/test_timeout.php?foo=bar');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);
$data = curl_exec($ch);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
curl_close($ch);
if ($curl_errno > 0) {
echo "cURL Error ($curl_errno): $curl_error\n";
} else {
echo "Data received: $data\n";
}
} else {
// Server
sleep(10);
echo "Done.";
}
http://www.php.net/manual/en/function.curl-setopt.php#104597 에서
코드는 타임아웃을 1000초로 설정합니다.밀리초 동안 다음 명령을 사용합니다.CURLOPT_TIMEOUT_MS
.
사용자와 파일 사이의 타임아웃을 확인해야 합니다.이 경우 PHP 및 Curl.
때 하려면 Curl을 설정해야 .CURLOPT_TIMEOUT
로로 합니다.0
「」가 아닌 「」1000
.
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
PHP에서도 시간 제한을 삭제해야 합니다.그렇지 않으면 PHP가 Curl의 요구에 따라 스크립트를 종료합니다(기본적으로 30초 후).이것만으로도 문제가 해결됩니다.
무결성이 한 경우 보안 할 수 .ignore_user_abort
:
# The maximum execution time, in seconds. If set to zero, no time limit is imposed.
set_time_limit(0);
# Make sure to keep alive the script when a client disconnect.
ignore_user_abort(true);
클라이언트의 될 수 .
부분은신경 도 있고 안 쓸 수도 있어요신경 쓸 수도 있고 안 쓸 수도 있어요
에서 맨 에 있기 에 이 에 대답하는 은 " " "를 합니다.CURL_TIMEOUT
.
브라우저에서 요청을 실행할 수 없습니다. CURL 요청을 실행하는 서버가 응답할 때까지 대기하는 동안 시간이 초과됩니다.브라우저는 디폴트 네트워크타임아웃인 1~2분 후에 타임아웃이 될 수 있습니다.
명령줄/단말기에서 실행해야 합니다.
PHP를 fast CGI 애플리케이션으로 사용하는 경우 fast CGI 타임아웃 설정을 확인하십시오.참조: PHP curl put 500 오류
언급URL : https://stackoverflow.com/questions/2582057/setting-curls-timeout-in-php
'source' 카테고리의 다른 글
복잡한 v-if 문을 사용하지 않고 VueJ가 비동기 상태를 가져옵니다. (0) | 2022.11.05 |
---|---|
MySQL Nested 선택 쿼리? (0) | 2022.11.05 |
MAMP에 포함된 MySQL에는 구성 파일이 포함되어 있지 않습니까? (0) | 2022.11.05 |
PHP에서 PUT/DELETE 인수 처리 (0) | 2022.11.04 |
처음 실행된 스크립트의 절대 경로를 가져옵니다. (0) | 2022.11.04 |