2014-12-25 2 views
0

У меня есть класс Utility, который должен вызывать удаленный URL-адрес cPanel для создания адреса пересылки электронной почты через cURL. Это работает отлично, если я использую обычный curl_exec, но сбой, если я попытаюсь сделать его неблокирующим через curl_multi_exec. Все, что мне нужно сделать, это отправить запрос и перейти дальше, мне не нужно знать результат - так что это действительно не -blocking требованиеcurl_multi_exec не вызывает удаленную функцию

Вот код, который работает

$url = "https://mycpanel.com:2083/execute/Email/add_forwarder?domain=mydomain.com&email=email_fwd_146&fwdopt=pipe&pipefwd=php/piper.php&"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Basic " . base64_encode("user:pwd"))); 

$response = curl_exec($ch); 
CakeLog::write('error', print_r($response, true)); 
curl_close($ch); 

ответ я на приведенный выше код ниже (хотя я действительно не забочусь об ответе)

{ 
    "messages":null, 
    "errors":null, 
    "status":1, 
    "metadata":{ 
     "transformed":1 
     }, 
    "data":[ 
     { 
      "email":"[email protected]", 
      "domain":"mydomain.com", 
      "forward":"|/home/myconsole/php/piper.php" 
     }] 
} 

Здесь код не работает

$url = "https://mycpanel.com:2083/execute/Email/add_forwarder?domain=mydomain.com&email=email_fwd_146&fwdopt=pipe&pipefwd=php/piper.php&"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Basic " . base64_encode("user:pwd"))); 

$mh = curl_multi_init(); 
curl_multi_add_handle($mh,$ch); 
curl_multi_exec($mh, $active); 

Этот вызов кажется, никогда не достигнет сервера или даже выполнить. Любое понимание будет оценено по достоинству.

+0

Вы не показываете, как вы на самом деле опросаваете ручку multi curl для получения результатов. – mario

+0

Я не знаю, что вы видите выше, это весь мой код – ChicagoSky

ответ

0

Это потому, что curl_multi_exec() необходимо вызывать снова и снова, пока передача не будет завершена.

+0

Но это будет означать, что это будет операция блокировки - я думал, что весь смысл multi_exec состоял в том, что он был неблокирующим – ChicagoSky

+0

Нет, он не блокируется. –

Смежные вопросы