我在Debian 9,Apache2.4,PHP7.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。
提前感谢!
发布于 2018-12-10 20:32:59
我解决了这个问题!
我将变量放在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工作时,它工作得很好!
https://stackoverflow.com/questions/53660726
复制相似问题