我知道可以创建一个后台 PHP 进程,该进程可以从另一个 PHP 文件按需启动:
$command = "/usr/bin/php5 -f script.php";
exec( "$command > /dev/null 2>&1 &", $arrOutput);
但是,此解决方案仅在 PHP 作为mod_php运行时才有效。
有什么方法可以在FastCGI上做同样的事情吗?
似乎在 FastCGI 上,该过程由 FastCGI 一次又一次地启动和关闭,有人有修复它的经验吗?
你可以设置一个cron作业吗?如果没有,它必须在 PHP 中调用,我曾经以跨平台方式模拟它,而无需使用 curl 访问 exec() 等(信不信由你)。
创建 .php 脚本并将其公开,并将其添加到顶部:
if (isset($_POST['key']) == false || $_POST['key'] != 'your secret key') {
die(); //request not allowed
}
然后从另一个 PHP 文件中,创建一个安全 (https) curl 连接并将密钥发布给它,设置 curl 的超时时间为 5 秒(您也可以从请求页面发送一个 http 关闭连接标头),以便如果请求需要很长时间才能完成,调用脚本不会冻结,在您的情况下为 30 秒。
这将执行以下操作: 1. curl 将安全地访问该页面(无论如何都停止在他们的浏览器中访问它) 2. curl 将等待 5 秒,然后关闭连接(但您的两个 php 脚本都将继续)
无论操作系统内部、外壳等如何,它都兼容。您还可以根据需要调整超时等。
不是一个出色的解决方案,但希望它对您来说足够好。