【问题标题】:How to prevent this script from echoing anything?如何防止此脚本回显任何内容?
【发布时间】:2012-08-16 14:31:56
【问题描述】:

该脚本一次执行多个 URL,并自动回显该 URL 的内容,我想阻止此脚本回显任何内容,但除了我注释掉的行之外,我没有看到任何类似 echo 'something'; 的行。

这是脚本:

函数批处理执行($urls) { $i = 0; $块 = 数组(); $curl_handles = 数组(); foreach ($urls 作为 $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 作为 $a_curl_handle) { $i++; curl_multi_add_handle($curl_multi_handle, $a_curl_handle); $block[] = $a_curl_handle; if (($i % 10 == 0) 或 ($i == count($curl_handles))) { $运行=空; 做 { $running_before = $running; curl_multi_exec($curl_multi_handle, $running); if ($running != $running_before) { // echo("正在等待 $running 站点完成...\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); 如果 ($curl_error) { // echo(" *** cURL 错误: ($curl_errno) $curl_error\n"); } curl_multi_remove_handle($curl_multi_handle, $handle); } $块 = 数组(); } } curl_multi_close($curl_multi_handle); }

帮助:)

【问题讨论】:

  • 尝试打开输出缓冲区 (ob_start())。
  • 我相信你需要将CURLOPT_NOBODY设置为true
  • 嘿@Matt 非常感谢 :) 成功了
  • 记得在完成后关闭输出缓冲区(并清理它)。 ob_end_clean()
  • 不要冲洗...干净!哈哈,flush会输出到浏览器。使用ob_end_clean()

标签: php curl


【解决方案1】:

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

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

查看here 了解有关输出控件的更多信息。

【讨论】:

    【解决方案2】:

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

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

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

    也可以使用输出缓冲,但如果您需要将响应正文与单个请求隔离开来,则无济于事。

    【讨论】:

      猜你喜欢
      • 2014-09-11
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多