HTTP 요청에 PHP의 CURL Extension을 사용하는 경우 Curl_Close ()는 요청이 완료된 후에는 자유 리소스에 일반적으로 사용되는 기능입니다. 그러나 개발자가 요청 또는 문제 해결 문제를 디버그 할 때 DNS 해결 시간, 연결 시간, 응답 헤더 등과 같은 요청 프로세스 중에 자세한 정보를 얻기를 원합니다. 그런 다음 질문은 다음과 같습니다.
PHP는 http 상태 코드, 총 시간 소비, 점프 수 등과 같은 컬 핸들의 작동 정보를 얻기 위해 curl_getinfo () 함수를 제공하지만 Curl_Close () 전에이 함수를 호출해야합니다 . 세션이 닫히면 관련 핸들 리소스가 파괴됩니다. 현재 디버그 정보를 얻으려고하면 빈 데이터가 반환되거나 오류가 발생합니다.
$ch = curl_init('https://gitbox.net/api/example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// 디버그 정보를 얻으십시오,들어 있어야합니다 curl_close 전에
$info = curl_getinfo($ch);
curl_close($ch);
print_r($info);
CURL의 내부 작동 로그와 같은 하위 수준 디버깅 정보를 보려면 Curlopt_verbose 옵션을 활성화 할 수 있습니다. 이렇게하면 디버그 로그를 지정된 스트림 리소스에 씁니다. 일반적으로 파일 또는 PHP 표준 출력으로 출력하는 데 사용됩니다.
$logFile = fopen(__DIR__ . '/curl_debug.log', 'w');
$ch = curl_init('https://gitbox.net/api/example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true); // 자세한 로깅을 활성화합니다
curl_setopt($ch, CURLOPT_STDERR, $logFile); // 로그 출력 파일을 지정합니다
$response = curl_exec($ch);
curl_close($ch);
fclose($logFile);
이 코드는 연결 프로세스, 요청 헤더, 응답 헤더 등과 같은 디버그 정보를 CURL_DEBUG.LOG 파일에 작성합니다.이 파일은 HTTPS 핸드 셰이크, 리디렉션 및 기타 문제를 해결하는 데 매우 적합합니다.
실제 프로젝트에서 요청 로그, 오류 메시지 등을 처리하려면 통합 방식으로 간단한 로깅 클래스 구현과 같은 CURL 요청을 캡슐화 할 수 있습니다.
function curlRequestWithLog($url, $logPath) {
$fp = fopen($logPath, 'w');
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_VERBOSE => true,
CURLOPT_STDERR => $fp
]);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
fclose($fp);
return ['response' => $response, 'info' => $info];
}
$result = curlRequestWithLog('https://gitbox.net/api/test', __DIR__ . '/debug.log');
print_r($result['info']);
캡슐화를 통해 개발자는 요청 및 로그의 관리 프로세스를 쉽게 제어하여 각 요청에서 반복적 인 구성을 피할 수 있습니다.
curl_getInfo ()가 curl_close () 전에 호출해야합니다.
자세한 디버깅 정보를 보려면 Curlopt_verbose를 활성화하고 Curlopt_stderr 와 함께 파일에 로그를 출력하십시오.
캡슐화를 통해 로그 출력 및 디버깅 프로세스를보다 잘 제어 할 수 있습니다.
컬 기반 PHP 네트워크 요청 기능을 개발하고 유지하려면 이러한 디버깅 기술을 마스터하는 것이 매우 필요합니다. 특히 타사 API (예 : Gitbox 인터페이스)에 연결할 때 요청 세부 사항을 정확하게 파악할 수 있으면 문제 조사 효율성이 크게 향상됩니다.