MySQL DB Ошибка соединения с PHP скрипта запуска через bashscript

голоса
0

Я в настоящее время есть Баш скрипт со следующим кодом, чтобы просто выполнить PHP скрипт (через хрон):

php path/to/my/file.php

Это PHP скрипт, то делает кучу случайных вещей. Одним из них является подключение к базе данных MySQL, используя конфигурационный файл и затем запустить SQL операторы, чтобы изменить базу данных. Тем не менее, я продолжаю получать ошибки, как:

PHP Warning: mysql_query(): Access denied for user ''@'localhost' (using password: NO) in /opt/local/www/example.com/assets/classes/Importer.php on line 109
PHP Warning:  mysql_query(): A link to the server could not be established in /opt/local/www/example.com/assets/classes/Importer.php on line 109

Файлы Баш скрипт и PHP все хранятся на том же сервере. Есть ли причина, мой PHP скрипт, запускаемый через команду Баша не будет подключение к базе данных, несмотря на то, что происходит в тот же файл через браузер успешно подключается к базе данных?

Странная часть что ошибка правильно захвата «локальный» в качестве имени сервера из файла конфигурации, но по какой-то причине не делает то же самое с именем пользователя базы данных и пароль хранится там.

EDIT: Добавлен код ниже

Это ниже код выполняется из file.php упомянутого выше.

    public function __construct()
{
    // We need to manually include these classes since they are being run from a bash script
    require_once('core.php');
}

core.php (как указано выше в блоке кода), то есть следующий код:

// Include environment-specific configuration file
require_once 'config.php';

// TODO: Move this to Core::getDatabase();
$database = new Database(Core::getApplication()->getDbHost(), Core::getApplication()->getDbUser(), Core::getApplication()->getDbPass(), Core::getApplication()->getDbName());

config.php есть где «локальный» вар и имя пользователя и пароль базы данных поступают из

Изменить # 2: Я не считаю, что это вопрос пути к файлу, так как нужные файлы быть схватилась из конфигурации и сделали в mysql_connect () вызов, как подтверждается вывод их перед этим вызовом. Похоже, что он подключается к базе данных в одном файле, а затем забыть об этом или что-то, когда приходит время для запуска запросов ...?

Edit # 3: Я думаю, что я понял это. Деструктор для класса база данных был называться и отсоединение от базы данных. Я закомментировал разъединение и теперь он, кажется, работает. Я должен понять, почему это называют.

Задан 27/10/2011 в 20:38
источник пользователем
На других языках...                            


2 ответов

голоса
1

Это, вероятно, проблема с текущим каталогом. Это, вероятно, ищет конфигурационный файл в текущем каталоге, и этот каталог отличается, когда вы запустите его с помощью Баша.

Вы, вероятно, делаете:

require('config.php');

И если предположить , что config.php находится в том же каталоге , - но это не то, как это работает, это выглядит в текущей директории, а не один и тот же каталог, что и файл PHP.

Вместо того, чтобы использовать __FILE__определение , чтобы выяснить , где вы находитесь и получить абсолютный путь , основанный на этом. Что-то вроде этого:

require(dirname(__FILE__) . 'config.php');
Ответил 27/10/2011 в 20:40
источник пользователем

голоса
1

Выяснить, почему имя пользователь выходит пустым (как насчет обмена кода?). Это почти наверняка решить проблему входа в систему. Вы почти гарантированно не имеют «Nousername @ LOCALHOST» счет в MySQL, так что это правильно отрицая доступ.

Ответил 27/10/2011 в 20:41
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more