如何在成功完成下载后让PHP执行一个函数?

时间:2011-09-29 15:02:00

标签: php download

我觉得这应该是非常基本的,但我无法在任何地方找到解决方案。

我正在开发一个应用程序,在下载文件时向管理员发送电子邮件。目前,电子邮件是在下载开始时发出的,但我需要对其进行更改,以便它仅在下载完成时发送。

我怀疑PHP register_shutdown_function之类的内容可能就是我所需要的,但现在在请求完成之前调用according to the PHP manual关闭函数。这让我有点难过。

对于它的价值,当前处理下载的函数输出如下:

readfile($path);
exit;

有问题的网站非常庞大和复杂,所以理想情况下我想尽可能少地改变当前代码。如何解决这个问题的任何建议将非常感谢!感谢。

2 个答案:

答案 0 :(得分:0)

如果出现错误,

readfile()将返回读取的字节数或false

$ret = readfile($path);
if($ret && $ret != 0) {
    // send e-mail
}
exit();

答案 1 :(得分:0)

readfile($path);
mail('admin@example.com', 'Download completed', 'download be done, mon');
exit();

readfile调用将阻止脚本,直到文件被加载并输出到Web服务器。请注意,PHP脚本无法检测客户端是否实际成功下载了该文件。文件本身将由Web服务器部分缓存,当Web服务器的缓存吸收整个文件时,PHP的参与结束。这意味着用户可以中止下载(或网络故障导致其中止),但您仍会收到下载已完成的通知。

相关问题