2

Mac OS X (Mavericks) でphp.netからこの単純なコードを実行して、cURL マルチ exec 機能を試しています。

<?php
    // create both cURL resources
    $ch1 = curl_init();
    $ch2 = curl_init();

    // set URL and other appropriate options
    curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/");
    curl_setopt($ch1, CURLOPT_HEADER, 0);
    curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
    curl_setopt($ch2, CURLOPT_HEADER, 0);

    //create the multiple cURL handle
    $mh = curl_multi_init();

    //add the two handles
    curl_multi_add_handle($mh,$ch1);
    curl_multi_add_handle($mh,$ch2);

    $active = null;
    //execute the handles
    do {
        $mrc = curl_multi_exec($mh, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);

    while ($active && $mrc == CURLM_OK) {
        if (curl_multi_select($mh) != -1) {
            do {
                $mrc = curl_multi_exec($mh, $active);
            } while ($mrc == CURLM_CALL_MULTI_PERFORM);
        }
    }

    //close the handles
    curl_multi_remove_handle($mh, $ch1);
    curl_multi_remove_handle($mh, $ch2);
    curl_multi_close($mh);

    ?>

私が得た唯一の出力は次のとおりです。

PHP 致命的なエラー: で最大実行時間の 30 秒を超えました

これが私の環境です: Mac OS X 10.9、PHP 5.4.17、Apache 2.2.24。

通常のcurl「単一」リクエストがうまく機能するため、cUrlがインストールされます。

これは Mac OS の問題だと思いますが、解決策が見つかりません。何か考えはありますか?

編集: Linux サーバーで同じコードを試してみましたが、すべて正常に動作しました。

4

1 に答える 1

2

PHP 5.3.18 以降では、curl_multi_exec() を呼び出すまで、curl_multi_select() が永久に -1 を返す可能性があることに注意してください。

これを試して:

while ($this->active && $mrc == CURLM_OK) 
{   
   // add this line
   while (curl_multi_exec($this->mh, $this->active) === CURLM_CALL_MULTI_PERFORM);

   if (curl_multi_select($this->mh) != -1) 
   {   
       do {
           $mrc = curl_multi_exec($this->mh, $this->active);
           if ($mrc == CURLM_OK)
           {   
               while($info = curl_multi_info_read($this->mh))
               {   
                   $this->process($info);
               }        
           }   
       } while ($mrc == CURLM_CALL_MULTI_PERFORM);
   }   
} 

詳細については、 https: //bugs.php.net/bug.php?id=63411または http://marchtea.com/?p=109を参照してください。

于 2014-01-06T07:31:26.720 に答える