长期用户,首次申请者.我从社区中学到了很多,而且我喜欢这个网站.
所以这就是我的目标.我想要一个在后端运行ping命令的Web界面.理想情况下,我想要一个网站,该网站的文本输入可让您输入IP地址或域,运行该命令的按钮以及从PHP运行以实际运行ping命令的python脚本.棘手的部分是使输出在命令行上输出时可以实时打印到网站上.我想以这种方式做为将来验证该概念并最终使用不同的iperf参数的方法.
我建立了一个小的PHP页面,“从技术上”完成了工作,但是我想不出如何仅在单击按钮时调用PHP脚本.由于它是一个PHP页面,因此每当页面加载时便会运行.因此,在进行了一些研究之后,我发现我正在寻找ajax jquery.我花了大约2天的时间尝试各种不同的事情,这些事情使我与我真正地融为一体,但似乎我正在围绕解决方案跳舞.
从对ajax的了解中,我实质上需要一个按钮,该按钮运行一个与我的工作php脚本链接的ajax函数.我可以通过它来运行脚本,但不能以实时/连续方式来更新页面内容.仅在命令完成运行时.
这是我的php页面,它会执行所需的操作,但每次页面加载/重新加载时都会执行.不理想.我希望脚本仅在按下按钮时运行.
liveping.php:
Domain/IP Address:
<?phpif (isset($_POST['ping'])) {
function liveExecuteCommand($cmd)
{
while (@ ob_end_flush()); // end all output buffers if any
$proc = popen("$cmd 2>&1", 'r');
$live_output = "";
$complete_output = "";
while (!feof($proc))
{
$live_output = fread($proc, 4096);
$complete_output = $complete_output . $live_output;
echo "
$live_output";
@ flush();
}
pclose($proc);
}
}
$domain = $_POST['domain'];
$pingCmd = "python /var/www/html/ping.py ".$domain;
if (isset($_POST['ping'])) {
liveExecuteCommand($pingCmd);
}
?>
ping.py:
#!/usr/bin/python
import cgi
import os
import sys
ping = "ping -c 5 -W 2 "+sys.argv[1]
os.system(ping)
我尝试过的一些事情:
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = setInterval(function() {
if (ajax.readyState == 4) {
document.getElementById('content').innerHTML = ajax.responseText;
}
},100);
function updateText() {
ajax.open('GET', 'ajax.php');
ajax.send();
}
Click Me
要么
var auto_refresh = setInterval(
function ()
{
$('#load_tweets').load('ajax.php').fadeIn("slow");
}, 1000); // refresh every 10000 milliseconds
与ajax.php
while (@ ob_end_flush()); // end all output buffers if any
$proc = popen("ping -c 5 -W 2 google.com", 'r');
$live_output = "";
$complete_output = "";
while (!feof($proc))
{
$live_output = fread($proc, 4096);
$complete_output = $complete_output . $live_output;
echo "
$live_output";
@ flush();
}
pclose($proc);
?>
谢谢你的帮助!
解决方法:
您不需要python即可显示ping结果.仅两个PHP文件就足够了.
> index.php将具有AJAX功能以及表单.
> ajax.php将具有用于ping指定域地址的代码.
我担心使用jQuery可能无法捕获实时提要.因为它没有任何onreadystatechange.因此,在这种情况下,您可能需要使用原始JavaScript.这是一个工作示例:
index.php:
Ping AJAXDomain/IP Address:
function updateText(domain) {
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function() {
if (this.readyState == 3) {
var old_value = document.getElementById("result").innerHTML;
document.getElementById("result").innerHTML = this.responseText;
}
};
var url = 'ajax.php?domain='+domain;
ajax.open('GET', url,true);
ajax.send();
}
document.getElementById("ping").onclick = function(){
domain = document.getElementById("domain").value;
updateText(domain);
}
ajax.php:
if (isset($_GET['domain'])) {
function liveExecuteCommand($cmd)
{
while (@ ob_end_flush()); // end all output buffers if any
$proc = popen($cmd, 'r');
$live_output = "";
$complete_output = "";
while (!feof($proc))
{
$live_output = fread($proc, 4096);
$complete_output = $complete_output . $live_output;
echo "
$live_output";
@ flush();
}
pclose($proc);
}
$domain = $_GET['domain'];
$pingCmd = "ping ".$domain;
liveExecuteCommand($pingCmd);
}
else{
echo "No post request";
}
?>
输出:
免责声明:
由于我当前正在使用Windows操作系统,因此ping命令已更改.根据您的操作系统进行更新.
作为第一次提问者,您已经对问题进行了巧妙的描述,并展示了解决问题的努力.我真的很感激.
标签:ajax,javascript,python,php,jquery
来源: https://codeday.me/bug/20191025/1930635.html