Íme egy egyszerű PHP szkript:
<?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);
A probléma az, hogy a kimenetben lévő folyamatadatok leállnak, amíg az aria2c be nem fejeződik. Amikor az aria2c folyamat véget ér, azonnal kitörli az összes kimenetet a szkriptembe. Nem kapcsolódik az fpassthru()-hoz, kipróbáltam a sima fread()-t, ugyanazzal az eredménnyel.
Az áramlás:
[FIGYELMEZTETÉS] A fájl már létezik. Átnevezve erre: /tmp/file100m.dat.4.
‹...nagy késés, majd szétrobban...›
[#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]
Olyan sorokat kell beszereznem, mint [#edb1dc 92MiB/100MiB(92%) CN:1 DL:10MiB] anélkül, hogy meg kellene várnom az aria2c végét, hogy információkat gyűjtsek az aktuális folyamatról.
Arról nem is beszélve, hogy ha pontosan ugyanazt a parancsot futtatom a konzolban, az aria2c jól működik.