PHP警告:mysqli :: __ construct():(HY000 / 2002):没有这样的文件或目录(Debian GNU / Linux 9)

时间:2018-12-06 22:34:33

标签: php mysqli command-line cron debian

我在Debian 9,Apache 2.4,PHP 7.2上运行我的网站。 MySQL数据库是远程的。该网站使用mysqli模块可以正常运行。但是,当我尝试通过命令行运行PHP文件时,它失败并显示错误:

  

PHP警告:mysqli :: __ construct():(HY000 / 2002):在...中没有这样的文件或目录   数据库连接失败:没有这样的文件或目录(2002)

我一直试图运行的PHP文件的开头是这一行:

require_once(__DIR__ . '/../private/initialize.php');

initialize.php文件具有以下行:$database = db_connect();,它将调用以下功能:

function db_connect() {
    $connection = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
    confirm_db_connect($connection);
    return $connection;
}

function confirm_db_connect($connection) {
    if ($connection->connect_errno) {
        $msg = 'Database connection failed: ';
        $msg .= $connection->connect_error;
        $msg .= ' (' . $connection->connect_errno . ')';
        exit($msg);
    }
}

出于安全原因,数据库凭据被设置为常量,并通过以下代码从环境变量中获取:

define('DB_SERVER', getenv('DB_SERVER'));
define('DB_USER', getenv('DB_USER'));
define('DB_PASS', getenv('DB_PASS'));
define('DB_NAME', getenv('DB_NAME'));

通过/etc/apache2/envvars命令在export文件中定义的环境变量:

export DB_SERVER='*here db credential*'
export DB_USER='*here db credential*'
export DB_PASS='*here db credential*'
export DB_NAME='*here db credential*'

我检查了脚本是否使用了环境变量,而没有。

echo getenv('DB_SERVER');
echo getenv('DB_USER');
echo getenv('DB_PASS');
echo getenv('DB_NAME');

似乎变量设置不正确。

有人可以解决这个问题吗?我想从命令行运行带有mysqli扩展名的PHP文件,以便使用CRON Jobs。

谢谢!

1 个答案:

答案 0 :(得分:0)

我解决了这个问题!

我将变量放入cron作业之前的crontab -e文件中,但没有export命令。

DB_SERVER='*here db credential*'
DB_USER='*here db credential*'
DB_PASS='*here db credential*'
DB_NAME='*here db credential*'

它使所有cron作业都可以访问变量。

因此,当我使用cron作业时,效果很好!