如何防止此脚本回显任何内容?

时间:2012-08-16 14:31:57

标签: php curl

该脚本一次执行多个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);
        }

帮助:)

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

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

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

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