【问题标题】:understanding php curl_multi_exec了解 php curl_multi_exec
【发布时间】:2013-03-21 22:08:45
【问题描述】:

我正在尝试理解 curl_multi_exec。我在这里复制了一段手动示例。所以我想知道,它是如何工作的?第一个循环发送我猜的http请求?但紧随其后的是一个循环内的循环,该循环使用带有看似未记录标志的函数..

我想并行下载 +=70 个网址 +=。

http://www.php.net/manual/en/function.curl-multi-exec.php

<?php
...
$active = null;
//execute the handles
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}
...
?>

【问题讨论】:

  • 我同意这是一个令人惊讶的糟糕文档。

标签: php curl curl-multi


【解决方案1】:

您可以浏览描述此示例的两篇文章。

PHP and curl_multi_exec

首先,这是高级别的。有两个外部循环。第一个负责立即清除 curl 缓冲区。第二个负责等待更多信息,然后获取该信息。这是所谓的阻塞 I/O 的一个示例。我们阻止程序其余部分的执行,直到网络 I/O 完成。虽然这通常不是处理网络 I/O 的最佳方式,但它确实是我们在单线程、同步 PHP 中的唯一选择。

Doing curl_multi_exec the right way

首先是$mrc 变量,从手册中我们了解到响应是在 cURL 预定义常量中定义的 cURL 代码。本质上,它是一个常规响应,与任何其他 PHP 函数 curl_multi_exec 没有什么不同,只有在完成后才返回响应。这意味着应该只有一个响应。在理想情况下,这个单一响应是 0(零)或等于预定义常量 CURLM_OK

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 2014-08-11
    • 1970-01-01
    • 2014-09-24
    • 2011-10-18
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    相关资源
    最近更新 更多