Я запускаю свой сайт на Debian 9, Apache 2.4, PHP 7.2.База данных MySQL удалена.Сайт работает бесперебойно с помощью модуля MySQL.Но когда я пытаюсь запустить файл 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*'
Я проверил, были ли переменные окружения приняты сценарием, и они не были't.
echo getenv('DB_SERVER');
echo getenv('DB_USER');
echo getenv('DB_PASS');
echo getenv('DB_NAME');
Кажется, что переменные установлены неправильно.
Кто-нибудь может помочь с этой проблемой?Я хочу запускать PHP-файлы с расширением mysqli из командной строки, чтобы использовать CRON Jobs.
Заранее спасибо!