我正在寻找一种方法来删除在特定文件夹中生成的唯一文件。当用户离开页面而未完成"任务"时,应删除该文件。文件命名通过uniqid()
我用以下方式尝试了它:
<script>
window.onbeforeunload = <?php unlink($_POST['localfile']) ?>;
</script>
但不知何故,这并不总是奏效。例如,当我使用后退按钮时,它正在工作,但当我将其他网址放入我的搜索栏并转到所需目的地时,例如google.com,该文件将不会被删除。我怎么能解决这个问题,还是有其他方法可以解决这个问题?
答案 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脚本的开头。
您将从学习客户端/服务器关系中受益。
希望这有帮助