2017-02-23 3 views
0

私はそのような私のPHPコード内の各ループの中の関数を呼び出す:同時に複数の呼び出しをそれぞれのループに対して実行するのはPHPですか?

foreach ($tests as $test) { 
     $mytest = new Test; 
     $maintest = $mytest->Test_function($mytest); 

     $testarray[$test] = $mytest->getTest(); 
     } 

$ mytest-の各呼び出し> Test_functionは()フェッチされたデータにリモートサーバーとテストには約2分(電話を取ることができます)。

$ tests配列に5つの要素がある場合、スクリプトの使用時間は〜= 5 * 2分です PHPは非同期言語ではありませんが、同時に起動する方法はわかりますか5回の通話はすべて?

は、それはあまりにも待って非常にイライラ約10分、私のスクリプト^^ここ

+0

私は、このサービスを知らないが、私はそれを試してみましょう、それはあまりにも学ぶのは難しいですか? – AlbertoV

+0

curl_multi_execとcurl_multi_selectを確認してください。 "Test_function"のサンプルコードを投稿してください。おそらく、コードをリファクタリングするのに役立ちます。 –

答えて

0

のTest_functionのコードの一部($のMyTestを)です。

try { 
      $ch = curl_init(); 

      if (FALSE === $ch) 
       throw new Exception('failed to initialize'); 
      curl_setopt($ch, CURLOPT_URL, $mytest); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
      curl_setopt($ch, CURLOPT_MAXREDIRS, 2); 
      $agents = array(
       'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:7.0.1) Gecko/20100101 Firefox/7.0.1', 
       'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.9) Gecko/20100508 SeaMonkey/2.0.4', 
       'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)', 
       'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1' 

      ); 
      curl_setopt($ch, CURLOPT_USERAGENT, $agents[array_rand($agents)]); 
      curl_setopt($ch, CURLOPT_HEADER, true); 

      $html = curl_exec($ch); 

      if (FALSE === $html) 
       throw new Exception(curl_error($ch), curl_errno($ch)); 

     } catch(Exception $e) { 

      trigger_error(sprintf(
       'Curl failed with error #%d: %s',$mytest, 
       $e->getCode(), $e->getMessage()), 
       E_USER_ERROR); 

     } 
     curl_close($ch); 
     $dom = new DOMDocument(); 
     @$dom->loadHTML($html); 

     $linklist= array(); 

     foreach($dom->getElementsByTagName('a') as $link) { 
      $href = $link->getAttribute('href'); 
      array_push($linklist, $href); 
     } 
関連する問題