PHP脚本可以在向用户返回数据后执行代码吗?


Can a PHP script execute code after it returns data to the user?

在我的情况下,我想定期检查我的数据库中过期的数据,并删除它,如果它有,所以我把这个检查添加到我所有的PHP web响应的开始。然而,在用户获得他们的数据之前,根本没有必要这样做,因为这与他们没有直接关系,我不想减慢我的网站。

我接受在这种情况下,我可能应该只安排一个cron任务来运行PHP脚本,但这似乎不是一个非常可移植的解决方案。如果迁移服务器,则必须手动添加此cron任务,如果更改平台,则会变得更加复杂。

我的两个问题是:

  • 是否可以返回一些数据(无论是HTML页面,或JSON数据等),然后执行一些PHP代码,以确保最快的响应时间?
  • 如果没有,是否有一些可移植的方法来调度PHP脚本?

您可以使用shell_exec(或类似的函数)在后台执行不同的PHP文件(或脚本本身)。

下面是一个例子:

function exec_in_background($cmd) {
    if (substr(php_uname(), 0, 7) == "Windows"){
        pclose(popen("@start /b '"'" ". $cmd, "r"));
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    }
}
if (isset($argv[1]) && $argv[1] == '--cron') {
    // Your database logic goes here
}
exec_in_background("php '"" . __FILE__ . "'" --cron");

你可以把它添加到你的脚本的顶部,它应该会起作用。

请注意,您尝试实现的可能是不明智的,因为如果有很多请求,您将执行这些操作很多次