服务器上存在文件时不显示按钮

Posted

技术标签:

【中文标题】服务器上存在文件时不显示按钮【英文标题】:Don't display a button while file exists on server 【发布时间】:2018-02-07 00:55:21 【问题描述】:

我试图仅在网络服务器上的特定文件被删除时才在 html 页面上显示下载按钮。我想我会使用 CSS display: none; 然后是一个 php 脚本,它有一个看起来像这样的 while 循环:

while (file_exists("/aaa/file.txt")) 
      sleep(5);
    
//set display property of the invisibleLink class to block and continue

问题是我不知道最后一步该怎么做,而且我看到的关于使用 PHP 修改 CSS 的每个线程都不适用于我的用例。

【问题讨论】:

那是因为你的PHP是在你的服务器上执行的,而CSS是由客户端渲染的。 进入睡眠状态只会延迟对客户端的响应。这是没有意义的。如果该文件从未被删除,那么您的页面将永远不会得到响应并且会超时。您应该做的是,如果文件在请求时存在,则显示该按钮。如果没有,请不要显示。如果用户按下按钮,请再次检查文件的状态。如果在呈现按钮和用户返回请求之间的时间内删除了它,则只需返回错误或警告,无论您的用例如何。 您可以对服务器端脚本进行 ajax 调用,告诉您文件是否存在,然后根据响应添加/删除一个类 【参考方案1】:

PHP 在屏幕上显示任何内容之前执行,因此您可能无法执行此操作:代码将简单地休眠 5 分钟,然后在显示给用户之前继续生成其余的 html。

您可能想要做的是将按钮标记为显示:无,然后当页面完成加载时,有一个 js 函数调用一个 php 页面,该页面返回文件是否存在。让 js 函数循环,直到 php 页面显示文件消失,然后让 js 函数显示按钮并停止循环。

<button type="button" id="test_btn" style="display: none;">Download</button>

<script type="text/javascript">
    $(document).ready(function () 
        checkFile();

        function checkFile() 
            $.ajax(
                url: '/path/to/file_checker.php',
                type: 'GET',
                success: function (data) 
                    if (data === "deleted")  // or whatever you want the response to be
                        $('#test_btn').show();
                    
                    else 
                        checkFile(); // you can add a setTimeout if you don't want this running too often
                    
                
            );
        
    
</script>

那么您的文件检查器 php 可以与您所拥有的类似:

if (file_exists("/aaa/file.txt")) 
    echo "exists";

else 
    echo "deleted";

【讨论】:

正是我想要的。完美运行,谢谢! ;)【参考方案2】:

只需构建按钮并使用这样的类将其隐藏:

<style>
.hidden display:none;
</style>

<?php
if(!file_exists("path") ) $class = "hidden" 
  echo "<input type='button' class='$class' name='stuff'>woo</button>";
?>

【讨论】:

为什么不只是if( file_exists("path") ) echo "&lt;input type='button' class='$class' name='stuff'&gt;woo&lt;/button&gt;"; 如果你这样做,就不需要上课,但那是另一种方式。但是使用 PHP,有 50 种方法可以做一件事。

以上是关于服务器上存在文件时不显示按钮的主要内容,如果未能解决你的问题,请参考以下文章

Admob GADBannerView,当 UINavgiationController 存在时不显示

使用屏幕管理器时不显示相机图像

GTK# 图像按钮在运行时不显示图像

使用 webpack 时不显示 Datatables.net Excel 导出按钮

SwiftUI onDrag 在设备上运行时不显示预览图像

WPF 按钮中的图像在运行时不可见