Toto fungovalo pro mě:
$cmd = "ping 127.0.0.1";
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a pipe that the child will write to
);
flush();
$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
echo "<pre>";
if (is_resource($process)) {
while ($s = fgets($pipes[1])) {
print $s;
flush();
}
}
echo "</pre>";
Toto je pěkný způsob, jak zobrazit výstup příkazů shellu v reálném čase:
<?php
header("Content-type: text/plain");
// tell php to automatically flush after every output
// including lines of output produced by shell commands
disable_ob();
$command = 'rsync -avz /your/directory1 /your/directory2';
system($command);
Tuto funkci budete potřebovat, abyste zabránili ukládání do vyrovnávací paměti výstupu:
function disable_ob() {
// Turn off output buffering
ini_set('output_buffering', 'off');
// Turn off PHP output compression
ini_set('zlib.output_compression', false);
// Implicitly flush the buffer(s)
ini_set('implicit_flush', true);
ob_implicit_flush(true);
// Clear, and turn off output buffering
while (ob_get_level() > 0) {
// Get the curent level
$level = ob_get_level();
// End the buffering
ob_end_clean();
// If the current level has not changed, abort
if (ob_get_level() == $level) break;
}
// Disable apache output buffering/compression
if (function_exists('apache_setenv')) {
apache_setenv('no-gzip', '1');
apache_setenv('dont-vary', '1');
}
}
Nefunguje to na každém serveru, na kterém jsem to zkoušel, rád bych vám mohl nabídnout radu, co hledat ve vaší konfiguraci php, abyste zjistili, zda byste si měli nebo neměli trhat vlasy při pokusu o fungování tohoto typu chování na vašem serveru! Ví ještě někdo?
Zde je fiktivní příklad v prostém PHP:
<?php
header("Content-type: text/plain");
disable_ob();
for($i=0;$i<10;$i++)
{
echo $i . "\n";
usleep(300000);
}
Doufám, že to pomůže ostatním, kteří se sem dostali pomocí google.
Spuštění plochého binárního souboru pod Linuxem
Jak zkompilovat 32bitový binární soubor na 64bitovém linuxovém stroji s gcc/cmake