我遇到了一个问题,即php脚本由于其工作而永远不会终止,因此它永远不会有机会将数据传回ajax以html格式显示回用户。
更清楚的是,我要做的是让用户点击html页面上的按钮,该按钮执行一个javascript函数,该函数使用ajax来执行php脚本。 php脚本使用popen执行一个永不停止的命令(即:ping localhost),然后我回显popen的输出。问题是因为php脚本永远不会完成,所以回不会报告回声,除非我终止ping进程,导致php脚本结束并且回显的数据返回到javascript函数以html显示。
我希望能够在php脚本运行时看到实时输出。如果我点击html网站上的那个按钮,我希望按钮调用javascript函数,然后执行php脚本,我想立即看到php脚本中的所有回显,因为它正在运行。这可能吗?
到目前为止,这是我的代码:
的index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
function execfunc() {
// Clear any previous output.
clearOutput();
$.ajax({
type: "GET",
url: "phpscript.php",
data: "",
success: function(msg){
$('#divOutput').html(msg);
}
}); // Ajax Call
}
function stopReadout() {
// to do
}
function clearOutput() {
$("#divOutput").html("");
}
</script>
</head>
<body>
<h3>Executing Linux Command</h3>
<p>Push the button to execute the command "ping localhost":</p>
<button type="button" onclick="execfunc();">Execute</button>
<button type="button" onclick="stopReadout();">Stop</button>
<button type="button" onclick="clearOutput();">Clear</button>
<br/>
<p id="label">Terminal output:</p>
<br/>
<div id="divOutput" style="width:800px;height:512px;border:1px solid black;overflow:scroll"></div>
</body>
phpscript.php
<?php
while (@ ob_end_flush()); // end all output buffers if any
$cmd = 'ping localhost';
$proc = popen($cmd, 'r');
echo '<pre>';
while (!feof($proc))
{
echo fread($proc, 4096);
flush();
}
echo '</pre>';
?>
如果您自己运行phpscript.php,它可以正常工作并回显到浏览器窗口。 但是如果我使用ajax从index.html javascript执行脚本,我没有得到任何实时输出,因为php脚本永远不会完成。
我甚至尝试让phpscript.ph创建一个fifo管道并将ping输出转储到fifo管道中,然后我有另一个回显'cat fifofile'的php脚本,但是同样的行为发生了。
任何建议或帮助都会真正受到赞赏! d
答案 0 :(得分:0)
你需要使用网络套接字。