我有這個shell程序,我想執行的PHP。問題是它可能需要很長時間,因此我需要它實時更新到用戶的瀏覽器。我讀過,我可能需要使用popen()來做到這一點,但我有點(好吧,我真的是:P)一個PHP noob,不知道我怎麼能做到這一點。php shell_exec與實時更新
將不勝感激任何幫助!
我有這個shell程序,我想執行的PHP。問題是它可能需要很長時間,因此我需要它實時更新到用戶的瀏覽器。我讀過,我可能需要使用popen()來做到這一點,但我有點(好吧,我真的是:P)一個PHP noob,不知道我怎麼能做到這一點。php shell_exec與實時更新
將不勝感激任何幫助!
if(($fp = popen("your command", "r"))) {
while(!feof($fp)){
echo fread($fp, 1024);
flush(); // you have to flush buffer
}
fclose($fp);
}
有兩種可能的行爲:
無座,在那裏你需要做的flushs之間其他的東西(@GameBit展示如何做到這一點)。
帶座外,在那裏你等到叫命令完成,在這種情況下看passthru function
試試這個代碼
header('Content-Encoding: none;');
set_time_limit(0);
$handle = popen("<<< Your Shell Command >>>", "r");
if (ob_get_level() == 0)
ob_start();
while(!feof($handle)) {
$buffer = fgets($handle);
$buffer = trim(htmlspecialchars($buffer));
echo $buffer . "<br />";
echo str_pad('', 4096);
ob_flush();
flush();
sleep(1);
}
pclose($handle);
ob_end_flush();
有(Windows機器+ WAMP的服務器上測試)一個骯髒的簡單選項
`yourcommand 1>&2`;
將stdout重定向到th e stderr。
感謝您的快速和優秀的答案,隊友! – MegaEduX
爲什麼你需要刷新緩衝區? – dellsala