CURL не может подключиться? Просто висит и не отвечает. В PHP это включено - PullRequest
0 голосов
/ 26 сентября 2010

У меня есть простая функция PHP на другом сервере, которую я проверил и у которой включен PHP CURL.

Функция:

function sw_fetch_code($apikey='',$email=''){

 $url = "http://www.domain.com/xxx/api.php?getcode=1&apikey=".$apikey."&email=".$email."";


        $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_HEADER, 1); 
 $result = curl_exec($ch);

 curl_close($ch);

 $obj = json_decode($result);  

 if(!empty($obj)){
  if($obj->status == 200){

   return $obj->code;

  }else{
   return $obj->status;
  }
 }

}

Как вы можете видеть, это очень просто, и я проверил это и работает на локальном хосте и внутри моего собственного сервера.URL возвращается, как и ожидалось.Однако он не дает никакого ответа, когда эта функция вызывается на сервере моих друзей.

Есть идеи, что может вызвать это?

Ответы [ 3 ]

0 голосов
/ 26 сентября 2010

Во-первых: проверьте на сервере «друга», работает ли URL, поскольку у вас нет параметров POST, вы можете проверить точный запрос и получить ожидаемые результаты.Посмотрите, сможете ли вы получить результаты в браузере на другом сервере.Если у вас нет графического интерфейса, попробуйте wget в командной строке.Смотрите, если вы получите результаты.Если вы перейдете к следующему шагу, если вы этого не сделаете, проблема не в CURL."друг-сервер" не может видеть ваш домен.Может быть проблема с сетью / хосты и т. Д. (Подробнее об этом, если это так)

Второе: если вы видите результаты на шаге 1. Попробуйте это и посмотрите, получите ли вы что-либо:1005 * Если вы получили ответ на этот вопрос, значит, что-то не так с cURL.

0 голосов
/ 26 сентября 2010

Вызывает ли curl_exec() немедленный сбой или он зависает в течение 30 секунд или около того, пока не истечет время ожидания? Если последнее, вы можете проверить наличие брандмауэра.

Что curl_getinfo ($ ch) говорит вам?

0 голосов
/ 26 сентября 2010

Я думаю, вам следует начать со стандартных проверок:

Если php скомпилирован с расширением php_curl (или расширение доступно как общий объект).Вы можете проверить это, установив

<?php
if (!extension_loaded('curl')) 
{
    if (!dl('curl.so')) {
        die('Cannot load php_curl extension');
    }
}
?>

. Если расширение загружено, возможно, проблема с dns / firewall на сервере друга.Также может потребоваться использование прокси-сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...