用于备份数据库的异步php函数

用于备份数据库的异步php函数,php,asynchronous,server,cron,Php,Asynchronous,Server,Cron,我使用一个PHP页面来备份我的数据库,它工作得非常好 我的问题(我最好说是我未来的问题)是,我的主机中的cron作业仅在响应返回5秒时才允许工作,否则它将失败 到目前为止,我的数据库非常小,我不确定它需要多少时间,但肯定不到5秒,因为它正在工作 但当我的db长大后,我想问题就开始了 如何使我的函数在5秒后也能工作 我将使用异步函数解决问题吗?hm,您有shell访问权限吗? 我制作了index.php及其名为master的类来检测cli模式。像这样: if( php_sapi_name() ==

我使用一个PHP页面来备份我的数据库,它工作得非常好

我的问题(我最好说是我未来的问题)是,我的主机中的
cron作业
仅在响应返回5秒时才允许工作,否则它将失败

到目前为止,我的数据库非常小,我不确定它需要多少时间,但肯定不到5秒,因为它正在工作

但当我的db长大后,我想问题就开始了

如何使我的函数在5秒后也能工作


我将使用异步函数解决问题吗?

hm,您有shell访问权限吗? 我制作了index.php及其名为master的类来检测cli模式。像这样:

if( php_sapi_name() === 'fpm-fcgi') {
    define( 'WEB_MODE', true );
    define( 'CLI_MODE', false );
} else if (php_sapi_name() === 'cli') {
    define( 'WEB_MODE', false );
    define( 'CLI_MODE', true );
} else {
    define( 'WEB_MODE', true );
    define( 'CLI_MODE', false );
}
然后在由http请求执行的脚本中,我这样做:

$this->asyncShellExecution('/usr/bin/php ' . ROOT_PATH .'/php/index.php -m houseKeeping' );

private function asyncShellExecution(string $str)
{
    exec($str .  " > /dev/null 2>/dev/null &");
}
在cli模式下,我调用new asynchousing()


通过这种方式,在通过xhr上传图像后,我得到了cpu和时间关键型的图像优化过程,并在之后运行它

难道你的主机没有一些工具来备份你的数据库吗?如果他们没有,他们就不是一个很好的主人。可能是:找到一个更好的主人?如果您只能运行cron代码5秒,那么无论您如何操作,如果运行时间超过5秒,则会超出允许的时间。它写为“HTTP cron请求的超时时间为5秒(最大等待时间)”。这就是我的意思,不是吗?到目前为止,它需要1.52秒,而且非常小。让我们等待它变得更大的时候,这听起来更像是您通过cron发出的任何http请求将在5秒后超时(如果它无法在5秒内连接到主机)。通过添加
sleep(10)进行测试位于当前cron的顶部。如果它仍然有效,你就不必担心了。睡眠(10)是评估功能的一个好主意。因此,我使用了sleep(15),后面跟着一个file_gets_content()。cronjob返回错误500,但文件在15秒后仍被写入。我将来应该依靠这个系统吗?
class asyncHouseKeeping
{
    function __construct()
    {
        $args=getopt("m:t:i:o:l:s:f:");

        if($args['m'] == 'houseKeeping') {
            $this->doHouseKeeping();
        } else {
            exit;
        }
    }
}