현재 위치: > 최신 기사 목록> Curl_Close 후 CURL 세션에서 오류를 디버깅하는 방법?

Curl_Close 후 CURL 세션에서 오류를 디버깅하는 방법?

gitbox 2025-05-26

네트워크 요청에 PHP의 컬 확장을 사용할 때 개발자는 종종 CURL_CLOSE () 에 전화하여 컬 세션을 닫습니다. 그러나 많은 사람들이 디버깅 할 때이 문제에 직면합니다. Curl_Close () 가 호출되면 오류 메시지를 포함하여 세션과 관련된 리소스가 릴리스됩니다.

이 기사는 세션을 마치기 전에 CURL에서 가능한 오류를 얻고 디버깅하는 방법을 설명하고 실용적인 제안 및 샘플 코드를 제공합니다.

curl_close () 전에 오류 메시지를 얻어야하는 이유는 무엇입니까?

curl_close ()는 curl_init () 에 의해 생성 된 컬 핸들을 릴리스합니다. 일단 출시되면 더 이상 Curl_Error () 또는 Curl_Errno ()를 호출하여 오류 메시지를 볼 수 없습니다. 이를 위해서는 손잡이를 닫기 전에 디버깅 또는 녹음을 위해 오류 정보를 제 시간에 얻어야합니다.

올바른 디버깅 순서

다음은 표준 요청 프로세스이며 오류 정보를 얻는시기에주의를 기울입니다.

 <?php

$url = "https://gitbox.net/api/data";

// 초기화 cURL 세션
$ch = curl_init();

// 설정 cURL 옵션
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 요청을 실행하십시오
$response = curl_exec($ch);

// 在폐쇄세션前获取실수信息
if (curl_errno($ch)) {
    $errorCode = curl_errno($ch);
    $errorMessage = curl_error($ch);
    error_log("cURL 실수 [$errorCode]: $errorMessage");
} else {
    // 처리 응답
    echo "응답 내용: " . $response;
}

// 폐쇄 cURL 세션
curl_close($ch);

추가 디버깅 기술

curl_error ()curl_errno () 외에도 다음 방법을 사용하여 추가 디버그 할 수도 있습니다.

1. 자세한 디버깅 정보를 활성화하십시오

Curlopt_verbose를 true 로 설정하여 PHP가 요청 프로세스의 세부 정보를 표준 오류 출력에 출력하여 CLI 모드에서 디버깅에 적합합니다.

 curl_setopt($ch, CURLOPT_VERBOSE, true);

로그 파일에 장황한 정보를 작성하려면 다음과 같습니다.

 $verbose = fopen('php://temp', 'w+');
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $verbose);

요청이 완료되면 로그 컨텐츠를 읽을 수 있습니다.

 rewind($verbose);
$verboseLog = stream_get_contents($verbose);
error_log("cURL 디버깅 정보: \n" . $verboseLog);

2. HTTP 상태 코드를 확인하십시오

때로는 요청 자체에 네트워크 오류가 없지만 서버는 잘못된 HTTP 상태 코드를 반환합니다. 다음과 같이 확인할 수 있습니다.

 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode !== 200) {
    error_log("HTTP 상태 코드: $httpCode");
}

3. try-catch 및 캡슐화 기능을 사용하십시오

멀티플렉싱 및 오류 캡처를 용이하게하기 위해 CURL 요청은 기능으로 캡슐화 될 수 있습니다.

 function fetchData($url) {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
    ]);

    $response = curl_exec($ch);

    if (curl_errno($ch)) {
        $error = curl_error($ch);
        curl_close($ch);
        throw new Exception("cURL 요청이 실패했습니다: " . $error);
    }

    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($httpCode !== 200) {
        throw new Exception("HTTP 상태 코드실수: " . $httpCode);
    }

    return $response;
}

try {
    $data = fetchData("https://gitbox.net/api/data");
    echo "성공하십시오: $data";
} catch (Exception $e) {
    error_log("예외 캡처: " . $e->getMessage());
}

요약

네트워크 요청에 PHP의 CURL을 사용하는 경우 디버깅의 핵심은 세션을 닫기 전에 정시에 오류 정보를 얻는 것 입니다. Curl_errno () , curl_error () , curl_getinfo ()Curlopt_verbose 와 같은 도구를 합리적으로 사용하여 개발자는 문제를 효과적으로 찾아 프로그램 안정성을 향상시킬 수 있습니다. Curl_Close () 후에 오류가 발생하거나 디버그 정보를 얻으려고 시도하지 마십시오. 그때까지 너무 늦었 기 때문입니다.