我正在尝试将两种想法结合起来,但我不确定它们是否相互兼容。
想法 1:让 php 脚本运行命令(例如:ping)并在 Web 浏览器中提供命令的实时结果。
想法 2:出现一个 jQuery 对话框,打开时运行 php 脚本并在对话框中提供实时结果。
想法 1 很容易实现(ping.php):
<?php
header('Content-Type: text/html; charset=utf-8');
set_time_limit(1800);
ob_implicit_flush(true);
ob_end_flush();
$exe_command = 'C:\\Windows\\System32\\ping.exe -n 10 google.com';
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout -> we use this
2 => array("pipe", "w") // stderr
);
flush();
$process = proc_open($exe_command, $descriptorspec, $pipes);
echo "<pre>";
if (is_resource($process))
{
while ($s = fgets($pipes[1])) {
print $s;
flush();
}
}
echo "</pre>";
?>
如果我在浏览器中打开 ping.php,我会得到一行一行的响应 YAY!
想法 2 给我带来了麻烦。我可以打开对话框,但直到 php 完成工作后数据才会出现。这可能是 ajax 的本质,所以我可能在正确的方法上偏离了目标。
这是我在 index.html 中的 javascript:
<script language="Javascript">
function testGetScript() {
$.getScript("./cgi-bin/ping.php", function(data) {
var divResults = document.getElementById('pingMe');
divResults.innerHTML = data;
});
}
function initDialogs() {
$('#testDialog').dialog({
autoOpen: false,
width: 800,
title: "PINGING.....",
modal: true,
open: function(event, ui) {
testGetScript();
},
close: function() {
$(this).dialog("close");
},
buttons: [
{text: "Done", click: function() {
$(this).dialog("close");
}}
]
});
}
$(document).ready(function(){
initDialogs();
$("*[class='btn']").button().click(function() {
$('#testDialog').dialog('open');
});
</script>
有人对这是否可能有任何想法吗?如果是这样,您对如何实现这一点有任何建议吗?