Curl은 네트워크 요청에 PHP를 사용할 때 매우 일반적인 라이브러리입니다. 그러나 CURL SESSION을 성공적으로 초기화하지 않고 CURL_CLOSE 기능이 호출되면 경고가 트리거되고 프로그램이 탁월한 중단을 유발할 수도 있습니다. 따라서 컬 세션의 수명주기를 안전하게 관리하는 방법을 이해하는 것은 강력한 코드를 구축하는 데 중요합니다.
다음은 일반적인 오류 예입니다.
<?php
$ch = curl_init();
// 일부 조건으로 인해 반환 또는 예외가 발생합니다
if (!$ch) {
echo "cURL 초기화가 실패했습니다";
}
// 초기화가 성공했는지 여부에 관계없이,모두 호출됩니다 curl_close
curl_close($ch); // 만약에 $ch ~을 위한 false,경고를 유발합니다
위의 코드에서 Curl_Init () 가 False를 반환하는 경우 (정상적인 상황에서는 거의 불가능하지만) 또는 $ ch는 실수로 비 재료 유형으로 수정 된 다음 Curl_Close ($ ch) 가 발생합니다.
이 오류를 피하려면 Curl_Close를 호출하기 전에 $ ch가 유효한 컬 핸들인지 확인해야합니다. IS_RESOURCE () 또는 CURL_RESET () 반환 유형 판단을 PHP 8.0 이상으로 사용할 수 있습니다.
<?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);
}
<?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에 도입 된 객체 유형입니다. 인스턴스 를 통해 확인하는 것은 더 의미적이고 안전합니다.
비즈니스 로직이 비교적 복잡한 경우 예외 처리 구조를 사용하여 전체 프로세스를 마무리하는 것이 좋습니다.
<?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를 호출하기 전에 핸들의 유효성을 확인하는 것이 기본이지만 중요한 방어 프로그래밍 관행임을 확인하십시오. 이것은 런타임 오류를 방지 할뿐만 아니라 프로그램의 안정성과 견고성을 향상시킵니다.
항상 기억하십시오 : 초기화가 성공적이라고 가정하지 말고, 안전은 항상 수리보다 더 효과적입니다.