2014-09-12 2 views
0

이상한 문제에 직면 해있는 것 같습니다. 랩톱 컴퓨터에서 PHP 스크립트를 사용하여 '곱슬 곱슬 함'을 사용하고 직장에서 완벽하게 작동합니다. 그러나 집에 있고 ISP에 연결되어있을 때 같은 스크립트가 데이터를 반환하지 못합니다. 다음과 같은 샘플 코드도 실패합니다.특정 네트워크에서 컬이 작동하지 않습니다.

$ch = curl_init("http://www.yahoo.com/"); 
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
curl_exec($ch); 
var_dump(curl_getinfo($ch)); 

curl_getinfo는 더 이상 디버깅 할 단서를 제공하지 않습니다. HTTP CODE는 0입니다. 헤더를 추가해야합니까>

브라우저를 통해 example.com에 액세스 할 수 있으므로 네트워크 문제는 없습니다. curl_err 및 curl_errno가 null입니다.

<pre> 
array (size=22) 
    'url' => string 'http://www.example.com/' (length=23) 
    'content_type' => null 
    'http_code' => int 0 
    'header_size' => int 0 
    'request_size' => int 0 
    'filetime' => int -1 
    'ssl_verify_result' => int 0 
    'redirect_count' => int 0 
    'total_time' => float 0 
    'namelookup_time' => float 0 
    'connect_time' => float 0 
    'pretransfer_time' => float 0 
    'size_upload' => float 0 
    'size_download' => float 0 
    'speed_download' => float 0 
    'speed_upload' => float 0 
    'download_content_length' => float -1 
    'upload_content_length' => float -1 
    'starttransfer_time' => float 0 
    'redirect_time' => float 0 
    'certinfo' => 
    array (size=0) 
     empty 
    'redirect_url' => string '' (length=0) 

</pre> 
null 
null 
+0

'curl_error()'와'curl_errno()'를 사용하십시오. – Ohgodwhy

+0

서버 액세스 권한이있는 경우 먼저 서버에서 URL을 찾아보십시오. 서버가 사이트에 연결하는 것을 허용하지 않을 수 있습니다. –

+0

[Fiddler] (http://www.telerik.com/fiddler) (간단한 웹 디버거) 또는 [WireShark] (https://www.wireshark.org/) (고급 네트워크 경청자). 아마도 네트워크 문제 일 수도 있습니다. 즉, 원격 서버가 사용자의 IP로부터의 액세스를 거부합니다. – Kleskowy

답변

0

을 통해이를 생각하면 나는이 당신이 무엇을해야하는지 생각 :

<?php $urlNoHttp = 'www.example.com'; // try 'example.com', too $hostIP = gethostbyname($urlNoHttp); var_dump($hostIP);

:

  1. 당신이 PHP에서 사이트에 연결할 수 있는지 확인 그것이 IP을 얻지 못한다면 당신은 connectio를 가지고 있습니다. n 문제이므로 포인트 2로 진행하십시오.

    그렇지 않으면 - 네트워크 문제가 아니며 컬 설정 자체입니다.

    1. 대상을 명령 줄 (ping www.example.com)에서 pinging/wget'ting 해보십시오. 당신이 응답을 얻는 경우에 - 당신의 호스트가 귀하의 OS가 아닌 PHP에 도달, 그래서

    2. 을 당신이 IP를 가지고있는 경우 - 다음에 대한 curl_setopt() int PHP docs 읽어보세요. 적절한 HTTP 헤더 (Content-type, User-Agent, 요청에 비어 있지 않은 본문 등)를 설정하는 것으로 시작합니다. 또한 캐시 된 버전의 URL을 사용하지 않도록하려면 curl_setopt($c, CURLOPT_FRESH_CONNECT, 1);을 추가하십시오.

    3. 여전히 작동하지 않는 경우 프록시의 "투명화"를 강제하려면 curl_setopt($c, CURLOPT_HTTPPROXYTUNNEL, TRUE);과 같은 일부 프록시 옵션을 혼합 해보십시오.

    일반적으로 네트워크 환경을 변경할 때 어떤 변화가 있는지 파악해야합니다. 관련 프록시가 있는지, 일부 이상한 NAT 시스템 또는 라우터의 방화벽이 이러한 이상한 설정을 가지고 있는지를 알아야합니다. 이러한 종류의 요청은 안전하지 않은 것으로 간주하고 차단합니다.

    희망이 도움이됩니다.

관련 문제