【发布时间】:2013-12-21 20:38:33
【问题描述】:
这是简单的 PHP 脚本:
<?php
is_resource($process = proc_open('aria2c http://speedtest.rinet.ru/file100m.dat', [
['pipe', 'r'],
['pipe', 'w'],
['file', '/tmp/error-output.txt', 'a']
], $pipes, '/tmp', [])) || die();
fclose($pipes[0]);
fpassthru($pipes[1]);
fclose($pipes[1]);
proc_close($process);
问题是输出中的进度数据“停滞”,直到 aria2c 完成。当 aria2c 进程结束时,它会立即将所有输出突发到我的脚本中。它与 fpassthru() 无关,我尝试了普通的 fread(),结果相同。
流程:
[注意] 文件已存在。重命名为 /tmp/file100m.dat.4。
<...>
[#edb1dc 70MiB/100MiB(70%) CN:1 DL:8.4MiB ETA:3s]
[#edb1dc 81MiB/100MiB(81%) CN:1 DL:9.7MiB ETA:1s]
[#edb1dc 92MiB/100MiB(92%) CN:1 DL:10MiB]
我需要获得像“[#edb1dc 92MiB/100MiB(92%) CN:1 DL:10MiB]”这样的行,而不必等待 aria2c 结束以收集有关当前进度的信息。
更不用说,如果我在控制台中运行完全相同的命令 aria2c 工作正常。
【问题讨论】:
-
你找到解决这个问题的方法了吗?
-
不。使用了其他软件。