离开网站时Javascript / PhP删除文件

时间:2018-03-02 01:46:43

标签: javascript php web web-development-server

我正在寻找一种方法来删除在特定文件夹中生成的唯一文件。当用户离开页面而未完成"任务"时,应删除该文件。文件命名通过uniqid()

是唯一的

我用以下方式尝试了它:

<script>

    window.onbeforeunload = <?php unlink($_POST['localfile']) ?>;

</script>

但不知何故,这并不总是奏效。例如,当我使用后退按钮时,它正在工作,但当我将其他网址放入我的搜索栏并转到所需目的地时,例如google.com,该文件将不会被删除。我怎么能解决这个问题,还是有其他方法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

我不明白这是如何运作的。您在此处混合客户端和服务器端代码。

&lt;脚本&gt; tag是javascript,将在客户端的计算机上执行。而&lt; ? PHP? &GT;在服务器端生成页面并将其发送到客户端时触发标记。

它可以在后退按钮上工作的唯一原因是因为当时设置了变量$ _POST。

执行此操作的最佳方法是使用window.onunload事件并发布ajax请求

该解决方案的唯一问题是,如果客户端计算机崩溃,它将不会运行javascript,因此您将实现一个不可靠的解决方案,最终得到一个充满旧文件的文件夹,需要定期清理。

如果您生成的文件小到足以保留在内存中,则应使用$ _SESSION变量。

javascript代码如下

<script>
  document.body.onunload = function() {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", './unlink.php, true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.onreadystatechange = function () {
      if (xhr.readyState == 4 && xhr.status == 200) {
        if (xhr.responseText) {
          //somecode
        }
        else {
          alert(xhr.responseText);
        }
      }
    };
    xhr.send();
  }
</script>

另一种解决方案是在数据库中使用将自动删除的临时表。

如果您决定使用$ _SESSION变量,请记住调用session_start();在PHP脚本的开头。

您将从学习客户端/服务器关系中受益。

希望这有帮助