2012-08-16 47 views
1

该脚本一次执行多个URL,并自动回显URL的内容,我想阻止此脚本回显任何内容,但我看不到任何行,如echo 'something';,除了我注释的行外。如何防止此脚本回显任何内容?

这是脚本:

 

    function batch_execute($urls) 
     { 
      $i   = 0; 
      $block  = array(); 
      $curl_handles = array(); 

      foreach ($urls as $url) 
      { 
       $curl_handles[$url] = curl_init(); 
       curl_setopt($curl_handles[$url], CURLOPT_URL, $url); 
       curl_setopt($curl_handles[$url], CURLOPT_CONNECTTIMEOUT, 100); 
      } 

      $curl_multi_handle = curl_multi_init(); 

      foreach ($curl_handles as $a_curl_handle) 
      { 
       $i++; 

       curl_multi_add_handle($curl_multi_handle, $a_curl_handle); 

       $block[] = $a_curl_handle; 

       if (($i % 10 == 0) or ($i == count($curl_handles))) 
       { 
        $running = NULL; 

        do 
        { 
         $running_before = $running; 

         curl_multi_exec($curl_multi_handle, $running); 

         if ($running != $running_before) 
         { 
    //      echo("Waiting for $running sites to finish...\n"); 
         } 

        } while ($running > 0); 

        foreach ($block as $handle) 
        { 
    //     $code = curl_getinfo($handle, CURLINFO_HTTP_CODE); 

    //     $curl_errno = curl_errno($handle); 

         $curl_error = curl_error($handle); 

         if ($curl_error) 
         { 
    //      echo(" *** cURL error: ($curl_errno) $curl_error\n"); 
         } 

         curl_multi_remove_handle($curl_multi_handle, $handle); 
        } 

        $block = array(); 
       } 
      } 

      curl_multi_close($curl_multi_handle); 
     } 

帮助:)

+1

尝试开启输出缓冲区('ob_start()')。 – Matt 2012-08-16 14:33:43

+0

我相信你需要将'CURLOPT_NOBODY'设置为'true'。 – Kermit 2012-08-16 14:34:27

+0

HEY @Matt非常感谢:)它的工作 – 2012-08-16 14:35:09

回答

3

打开输出缓冲区ob_start()将捕获所有输出打印到屏幕前。

然后用ob_end_clean()ob_end_flush()关闭缓冲区。在关闭之前,刷新将打印缓冲区的内容。

有关输出控件的更多信息,请查看here

0

当您创建单个cURL句柄时,请将选项CURLOPT_RETURNTRANSFER设置为1,并且cURL在发出请求时不会将内容输出到stdout。

请求完成后,如果要访问单个句柄的响应正文,请在该句柄上调用curl_multi_getcontent(),它将返回响应的内容。

您可以使用CURLOPT_NOBODY,但副作用是请求更改为HEAD请求,许多服务器可能不会接受该请求。

使用输出缓冲也是一种可能性,但如果您需要将响应主体与单个请求隔离开来,则这种方法无效。