在后台运行 php shell_exec 时显示加载栏或 gif
Posted
技术标签:
【中文标题】在后台运行 php shell_exec 时显示加载栏或 gif【英文标题】:Show loading bar or gif while a php shell_exec runs in background 【发布时间】:2020-02-12 12:01:00 【问题描述】:我有一个运行其脚本的 php 页面。 用户从索引页面单击一个按钮,该页面在 10 秒左右后显示最终结果。 我想在用户等待时显示一个进度条。 这是实际页面:
<!DOCTYPE html>
<html>
<head>
<title>METAR LIRN</title>
<style>
h1
text-align: center;
.table
display: table;
margin-top: 30px;
margin-left: auto;
margin-right: auto;
border: 1px solid #808080;
padding-left: 30px;
padding-right: 30px;
padding-bottom: 10px;
</style>
</head>
<body>
<div class="table">
<div>
<h1>METAR LIRN<h1>
</div>
<div>
<?php
$output = shell_exec('sh /var/www/html/weather.sh');
echo "<pre>$output</pre>";
?>
</div>
</body>
</html>
我看了其他类似的帖子,但没有运气... 提前致谢!
【问题讨论】:
【参考方案1】:当然,这是一个简单的例子:
index.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
/* Just some styles for the bar */
.loading-bar
background: blue;
width: 300px;
height: 20px;
display: none;
.loading-bar.active
display: block;
</style>
</head>
<body>
<button class="myBtn">Execute code!</button>
<div class="response"></div>
<div class="loading-bar"></div>
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script>
// Handle button click
$('.myBtn').on('click', function()
$('input').val( "" );
// Inmediatly show your bar
var $loadingBar = $('.loading-bar');
$loadingBar.addClass('active');
// Then execute Ajax
$.ajax(
url: "test.php",
method: 'GET'
)
.done(function(data)
// Display response data
$('div.response').html(data);
)
.fail(function(error)
// Display error if fails
$('div.response').html(error);
)
.always(function()
// Always hide loading bar when finish
$loadingBar.removeClass('active');
);
);
</script>
</body>
</html>
test.php:
<?php
sleep(2);
echo 'OK';
【讨论】:
嗨!实际上这个页面是点击一个简单的html按钮加载的 p style="text-align: center;"> 好吧,那你就不能实现加载栏了。 PHP 代码在服务器端执行,这意味着在客户端加载页面之前。您应该使用 Ajax 来执行您的 PHP 代码。同时,您可以在收到回复时显示您的加载栏并删除它:api.jquery.com/jquery.ajax 是的,我对此深信不疑。不幸的是,我不知道如何使它工作。无法加载php页面,它只显示加载gif...你能举个例子吗? 谢谢你的榜样!我添加了我的 php 页面 url,但它似乎不起作用......这是我的 php 页面代码:$输出”;回声“错误”;出口; ?> 我使用的代码只是一个例子,使用你的代码即可: $输出”?>。不要忘记您在 PHP 中打印的输出将是您在 Ajax 回调中接收到的数据。您可以使用此数据来确定响应是否成功。如果它仍然不起作用,请检查 Chrome 中的开发人员工具(网络选项卡)以查看那里的 PHP 响应。以上是关于在后台运行 php shell_exec 时显示加载栏或 gif的主要内容,如果未能解决你的问题,请参考以下文章
Libreoffice shell_exec 在 PHP 脚本中失败
为啥这个带有 shell_exec 调用的 PHP 脚本从 Windows 10 的命令行运行,而不是浏览器/本地主机?