2 つのアイデアを組み合わせようとしていますが、互いに互換性があるかどうかはわかりません。
アイデア 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 を開くと、1 行ずつ応答が返ってきます。
アイデア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>
これが可能かどうかについて考えている人はいますか?もしそうなら、これをどのように達成できるかについて何かアドバイスはありますか?