交错的multi_curl php

时间:2015-05-14 14:05:46

标签: php curl

我可以在php中的另一个multi_curl之间进行multi_curl吗?

我想要实现的目标:

  1. multi_curl脚本P1。
  2. multi_curl另一个脚本P2。
  3. 获得P2的结果。
  4. 获得P1的结果。
  5. 我的要求是分别对它们进行multi_curl。

    我的努力: -

    $ch_multi1 = curl_multi_init();
    $ch_multi2 = curl_multi_init();
    $ch1 = curl_init();
    $ch2 = curl_init();
    
    curl_setopt($ch1,CURLOPT_URL,"http://URL/to/page1.php");
    curl_setopt($ch1,CURLOPT_RETURNTRANSFER, true);
    
    curl_setopt($ch2,CURLOPT_URL,"http://URL/to/page2.php");
    curl_setopt($ch2,CURLOPT_RETURNTRANSFER, true);
    
    curl_multi_add_handle($ch_multi1,$ch1);
    curl_multi_add_handle($ch_multi2,$ch2);
    
    echo "multi_curl_1 ".date("H:i:s")."<br>";
    $running1 = NULL;
    do
    {
        $ret = curl_multi_exec($ch_multi1, $running1);
    } while ($ret == CURLM_CALL_MULTI_PERFORM);
    
    echo "multi_curl_2 ".date("H:i:s")."<br>";
    do
    {
        curl_multi_exec ($ch_multi2, $running2);
    }
    while ( $running2 > 0 );
    
    echo "result_2 ".date("H:i:s")."<br>";
    $result =  curl_multi_getcontent($ch2);
    echo $result."<br>";
    
    do
    {
        curl_multi_exec ($ch_multi1, $running1);
    }
    while ( $running1 > 0 );
    
    echo "result_1 ".date("H:i:s")."<br>";
    $result = curl_multi_getcontent($ch1);
    echo $result."<br>";
    
    curl_multi_remove_handle($ch_multi1, $ch1);
    curl_multi_remove_handle($ch_multi2, $ch2);
    curl_close($ch1);
    curl_close($ch2);
    

    我已经明确地在P1中引入了5秒的延迟,在P2中引入了10秒的延迟。它需要15秒而不是10秒。

1 个答案:

答案 0 :(得分:0)

PHP中的curl_multi_init()命令是异步。这意味着如果您正在编写同步函数,则不应依赖此函数的输出。

如果您依赖脚本中的执行顺序,则应使用同步功能,例如按顺序执行多个cURL,或使用回调函数。