현재 위치: > 최신 기사 목록> curl_setopt와 협력 할 때 일반적인 오해

curl_setopt와 협력 할 때 일반적인 오해

gitbox 2025-05-18

네트워크 요청에 PHP를 사용할 때 CURL 확장은 의심 할 여지없이 가장 일반적이고 강력한 도구 중 하나입니다. CURL을 매일 사용하면 Curl_SetOpt ()는 요청 옵션을 설정하는 데 사용되며 Curl_Close ()는 세션 핸들을 닫는 데 사용됩니다. 단순하고 명확하게 보이지만 함께 사용될 때 숨겨진 많은 "구덩이"가 있습니다. 이 기사는 심도있게 사용하는 몇 가지 일반적인 잘못된 방법을 분석하여 타격을 피하는 데 도움이됩니다.

1. curl_close 후 옵션을 설정 하시겠습니까? 유효하지 않은!

 $ch = curl_init();
curl_close($ch);
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/data");

문제 분석 : Curl_Close () 가 호출되면 $ ch 핸들이 해제되었습니다. 이에 대한 후속 설정은 유효하지 않으며 경고도 던져 질 수 있습니다.

솔루션 : Curl_Close ()를 호출하기 전에 모든 요청 및 처리 작업이 완료되었는지 확인하십시오. Curl_Close ()는 전체 요청 프로세스의 마지막 단계 여야합니다.

2. 닫힌 손잡이를 재사용 하시겠습니까? 직접 무너집니다!

많은 개발자들이 성능을 향상시키기 위해 핸들을 재사용하려고하지만 실수로 닫은 후에 실수로 계속 사용하면 오류가 발생합니다.

 $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/one");
curl_exec($ch);
curl_close($ch);

// 다시 사용하십시오
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/two");
curl_exec($ch);

문제 분석 : $ ch 마감 후 $ ch는 잘못된 리소스입니다. 계속 사용하면 PHP가 오류를 던지게됩니다. 제공된 자원은 유효한 컬 핸들 리소스가 아닙니다 .

제안 된 실습 : 여러 요청을 시작하려면 첫 번째 요청 직후에 핸들을 닫지 않거나 여러 핸들을 사용하거나 사용할 때마다 다시 시작하십시오.

3. Curlopt_returntransfer가 설정되지 않았으며 결과가 직접 출력됩니다.

 $ch = curl_init("https://gitbox.net/api/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
$result = curl_exec($ch);
curl_close($ch);
echo "결과는입니다:" . $result;

문제 분석 : curlopt_returntransfertrue 로 설정되지 않아 결과가 페이지로 직접 출력되는 반면, $ 결과는 실제 반환 내용이 아니라 실제로는 true 또는 false 입니다.

올바른 방법 :

 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

이러한 방식으로, 반환 된 컨텐츠는 JSON 디코딩, 문자열 분석 등과 같은 후속 처리를 위해 얻을 수 있습니다.

4. 손잡이를 닫기 전에 오류 메시지가 판단되지 않았습니다.

많은 사람들이 닫기 전에 점검 오류를 무시합니다.

 $ch = curl_init("https://gitbox.net/api/info");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);

if (!$data) {
    echo "요청이 실패했습니다";
}

문제 분석 : curl_exec ()는 실패를 나타내려면 false를 반환하지만 더 중요한 것은 Curl_error ($ ch)가 자세한 오류 정보를 제공합니다. curl_close ()가 실행되면 오류 설명을 더 이상 얻을 수 없습니다.

제안 된 관행 :

 $data = curl_exec($ch);

if (curl_errno($ch)) {
    echo 'cURL 실수:' . curl_error($ch);
}

curl_close($ch);

먼저 오류를 판단한 다음 핸들을 닫습니다. 이것은 좋은 인코딩 습관입니다.

5. HTTPS 요청에 맞는 올바른 SSL 옵션이 설정되지 않았습니다.

 $ch = curl_init("https://gitbox.net/secure/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);

문제 분석 : 대상이 https이고 curlopt_ssl_verifypeer가 설정되지 않은 경우 일부 환경에서는 실패 할 수 있습니다.

제안 된 관행 :

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 또는 false(테스트 전용)
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);

실제 배포 환경을 설정하고 생산 환경에서 가능한 한 많은 검증을 활성화해야합니다.