【发布时间】:2018-01-19 11:23:16
【问题描述】:
我正在尝试为登录用户创建一个安全的文档检索系统。
首先,我检查用户是否已登录。如果是,我将文件从服务器上的受保护目录复制到用户当前目录中的 Web 可访问空间。
然后我将它们重定向到文件现在所在的 URL。让代码休眠 10 秒,让慢速连接有时间下载文件,然后将其删除,这样其他人就无法再使用该链接。
我的问题是,在标题之后,睡眠功能不起作用。我尝试删除 if 语句,这使脚本休眠 10 秒,然后在重定向用户之前取消链接文件,因此链接已经断开。
我正在努力寻找一种方法让脚本休眠 10 秒,并在重定向发生后仍然执行代码。
<?php
if(!isset($_SESSION['id'])){
header("location:../../../");
}
else {
echo copy('C:\directorypath\test.xls','test.xls');
if(header("location:../docs/test.xls")){
sleep("10");
unlink("test.xls");
}
}
?>
【问题讨论】:
-
感谢 Hamza,我在代码中使用睡眠功能没有问题,问题在于何时发生这种情况。我希望它在 if 语句返回为 true 之后休眠,但它在任何操作发生之前就开始了。
-
PHP 本质上是单线程的,这是不可能的。当
header行被执行时,脚本的其余部分被终止。没有办法既返回文件,同时也删除它。这不是 PHP 的工作方式。 -
您应该通过 php 提供文件,而不是将其复制到公共目录。
-
如果文件那么小,那么恕我直言,首先通过 PHP 脚本处理下载(而不是在 HDD 上复制文件)会更有意义。