Предупреждение PHP: mysqli :: __ construct (): (HY000 / 2002): Нет такого файла или каталога (Debian GNU / Linux 9) - PullRequest
0 голосов
/ 07 декабря 2018

Я запускаю свой сайт на 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.

Заранее спасибо!

1 Ответ

0 голосов
/ 10 декабря 2018

Я решил проблему!

Я поместил свои переменные в файл crontab -e перед заданиями cron, но без команды export.

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

Это делает переменные доступными для всех cronjobs.

Так что, когда я использую задания cron, все работает отлично!

...