在后台运行 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的主要内容,如果未能解决你的问题,请参考以下文章

从PHP执行PhantomJS

Libreoffice shell_exec 在 PHP 脚本中失败

PHP启动的Bash后台进程不起作用

为啥这个带有 shell_exec 调用的 PHP 脚本从 Windows 10 的命令行运行,而不是浏览器/本地主机?

OpenCV exec 的 PHP shell_exec 问题(MAMP 库错误)

PHP shell_exec 等待脚本完成? [复制]