【问题标题】:Check progress of cURL检查 cURL 的进度
【发布时间】:2011-06-22 00:58:06
【问题描述】:

有什么方法可以检查 curl 命令的状态吗?说,我从 php 调用 curl,使用 exec 启动它。有没有办法在它运行时检查它的进度?还是我必须等待它完成?

exec("curl $url -k > /dev/null 2>&1 &");

【问题讨论】:

    标签: php curl


    【解决方案1】:

    你可以定义一个进度函数:

    curl_setopt($curl, CURLOPT_PROGRESSFUNCTION, 'my_progress_handler');
    

    回调函数的名称,其中 回调函数需要三个 参数。第一个是卷曲 资源,第二个是 文件描述符资源,以及 第三是长度。返回字符串 包含数据。

    如需更多信息,请参阅here

    注意:This comment 质疑 PHP 自己的函数签名。

    不能使用exec(),因为它是一个阻塞函数。它将一直等待,直到手头的程序终止。
    编辑:哦,我看到你使用了 & 符号,没关系

    可以使用的是popen(),但除非 curl 有一种输出进度的好方法,否则这不会很漂亮。

    我建议将-# 作为参数传递给curl,这样您就可以很好地从输出流中获取进度。

    【讨论】:

    • 但这对通过 exec 异步调用的 curl 命令有效吗?
    • Exec 不会阻止命令作为带有 & 的作业运行。但是,您不会得到任何输出。
    • 不,这将通过curl_init()curl_exec() 工作。 @datasage:是的,我刚刚在上次编辑中注意到并纠正了这一点。但是,popen()proc_open() 会更漂亮,因为您可以直接获得外流流句柄。
    • 嗯,从来没有看过 popen 或 proc_open,但现在检查一下。您是否有成功通过它们异步运行命令的经验?
    • 不,我自己从来不需要这样做,我只知道它就在那里 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2014-08-27
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    相关资源
    最近更新 更多