현재 위치: > 최신 기사 목록> 컬 세션이 초기화되지 않은 경우 Curl_Close를 호출하는 오류를 피하십시오.

컬 세션이 초기화되지 않은 경우 Curl_Close를 호출하는 오류를 피하십시오.

gitbox 2025-05-29

Curl은 네트워크 요청에 PHP를 사용할 때 매우 일반적인 라이브러리입니다. 그러나 CURL SESSION을 성공적으로 초기화하지 않고 CURL_CLOSE 기능이 호출되면 경고가 트리거되고 프로그램이 탁월한 중단을 유발할 수도 있습니다. 따라서 컬 세션의 수명주기를 안전하게 관리하는 방법을 이해하는 것은 강력한 코드를 구축하는 데 중요합니다.

1. 오류 시나리오 예제

다음은 일반적인 오류 예입니다.

 <?php

$ch = curl_init();

// 일부 조건으로 인해 반환 또는 예외가 발생합니다
if (!$ch) {
    echo "cURL 초기화가 실패했습니다";
}

// 초기화가 성공했는지 여부에 관계없이,모두 호출됩니다 curl_close
curl_close($ch); // 만약에 $ch ~을 위한 false,경고를 유발합니다

위의 코드에서 Curl_Init ()False를 반환하는 경우 (정상적인 상황에서는 거의 불가능하지만) 또는 $ ch는 실수로 비 재료 유형으로 수정 된 다음 Curl_Close ($ ch) 가 발생합니다.

2. 정확한 방어 프로그래밍 방법

이 오류를 피하려면 Curl_Close를 호출하기 전에 $ ch가 유효한 컬 핸들인지 확인해야합니다. IS_RESOURCE () 또는 CURL_RESET () 반환 유형 판단을 PHP 8.0 이상으로 사용할 수 있습니다.

방법 1 : 유효한 리소스인지 확인하십시오 (PHP 7 이하)

 <?php

$ch = curl_init();

if ($ch === false) {
    echo "cURL 초기화가 실패했습니다";
} else {
    // 관련 작업을 수행하십시오
    curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/data");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);

    // 안전하게 종료
    curl_close($ch);
}

방법 2 : CurlHandle (PHP 8 이상)의 인스턴스 사용

 <?php

$ch = curl_init();

if ($ch instanceof CurlHandle) {
    curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/data");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);

    curl_close($ch);
} else {
    echo "cURL 초기화가 실패했습니다";
}

Curlhandle은 원래 컬 리소스를 교체하기 위해 PHP 8에 도입 된 객체 유형입니다. 인스턴스 를 통해 확인하는 것은 더 의미적이고 안전합니다.

3. Try-Catch를 사용하여 패키지 프로세스를 래핑 (권장)

비즈니스 로직이 비교적 복잡한 경우 예외 처리 구조를 사용하여 전체 프로세스를 마무리하는 것이 좋습니다.

 <?php

$ch = null;

try {
    $ch = curl_init();

    if ($ch === false) {
        throw new Exception("초기화 할 수 없습니다 cURL 세션");
    }

    curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/data");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);

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

    echo $response;
} catch (Exception $e) {
    echo "실수:" . $e->getMessage();
} finally {
    if (is_resource($ch) || (PHP_VERSION_ID >= 80000 && $ch instanceof CurlHandle)) {
        curl_close($ch);
    }
}

결론적으로

PHP 7 또는 PHP 8을 사용하든 CURL_CLOSE를 호출하기 전에 핸들의 유효성을 확인하는 것이 기본이지만 중요한 방어 프로그래밍 관행임을 확인하십시오. 이것은 런타임 오류를 방지 할뿐만 아니라 프로그램의 안정성과 견고성을 향상시킵니다.

항상 기억하십시오 : 초기화가 성공적이라고 가정하지 말고, 안전은 항상 수리보다 더 효과적입니다.