该脚本一次执行多个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); }
帮助:)
答案 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
请求。
使用输出缓冲也是一种可能性,但如果您需要将响应主体与单个请求隔离,则无法使用输出缓冲。