![](/img/trans.png)
[英]Warning: mysqli_connect(): (HY000/2002): No such file or directory
[英]PHP Warning: mysqli::__construct(): (HY000/2002): No such file or directory (Debian GNU/Linux 9)
我在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'));
通过export
命令在/etc/apache2/envvars
文件中定义的环境变量:
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。
提前致谢!
我解决了这个问题!
我将变量放在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作业时,效果很好!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.