我有一个运行数据库备份并压缩它的 php 脚本,没有任何特定的 html 输出。此脚本包括时间检查,以避免在存储在 db 中的指定延迟之前执行。 现在的问题是我无法使用服务器 cronjob 任务,因为网络服务器不支持它。
所以我会创建一个 javascript 函数,它应该在每次访问时调用 php 脚本(是的,这足以满足我的目的)但不会延迟访问该页面的用户,因为它需要大约 1 分钟才能结束该过程。 是否可以在不等待响应的情况下运行脚本?当用户 session 终止时,php 脚本还可以继续运行吗?
我认为类似于: http://drupal.org/project/poormanscron
提前致谢
编辑: 解决方案 1(仅限 PHP): 把它放在我的输出之前:
public static function cronjob() {
ignore_user_abort(true); // optional
session_write_close();//close session file on server side to avoid blocking other requests
header("Content-Encoding: none");//send header to avoid the browser side to take content as gzip format
header("Content-Length: ".ob_get_length());//send length header
header("Connection: close");//or redirect to some url: header('Location: http://www.google.com');
ob_end_flush();flush();//really send content, can't change the order:1.ob buffer to normal buffer, 2.normal buffer to output
//fastcgi_finish_request(); // important when using php-fpm!
// Do processing here
sleep(5);
require_once("./cron_job.php");
exit();
}
ob_start(); // will be closed in backup function
register_shutdown_function('cronjob');
解决方案 2(使用 javascript):
1) 创建一个包含你的 cronjobs 的文件
2) 将此 javascript 代码放入您的 html 中:
<script type="text/javascript">
// cron job
$.get('./cron_job.php');
</script>
这些方法不会影响用户请求时间;)
谢谢大家
最佳答案
您可以让您调用的 PHP 脚本模拟连接结束。这意味着它可以向用户发送一些任意输出,然后强制关闭用户的连接但仍保持服务器端运行。
请参阅以下文章:http://php.net/manual/en/features.connection-handling.php
评论里有一些例子
关于使用 javascript/AJAX 的 PHP Cronjobs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14245527/