проблемы с использованием Zend_Db при запуске php в качестве скрипта cli - PullRequest
0 голосов
/ 08 сентября 2010

Я пытаюсь добавить несколько сценариев администрирования в проект Zend Framework, который в конечном итоге будет запускаться ночью через cron.

Однако я столкнулся со своей первой проблемой со скриптом при попытке использовать Zend_Db.В настоящее время я делаю очень простой вызов SQL, чтобы получить некоторые результаты и просто отобразить их, используя var_dump () , однако получаю следующее сообщение об ошибке:

SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Сценарий до сих пор выглядит следующим образомэто:

<?php
chdir(dirname(__FILE__));

error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
date_default_timezone_set('Europe/London');

//directory setup and class loading
set_include_path('.' . PATH_SEPARATOR . '../library/' . PATH_SEPARATOR . '../application/models/'
                    . PATH_SEPARATOR . '../library/MyApp/'
                    . PATH_SEPARATOR . get_include_path());

include "Zend/Loader/Autoloader.php";

$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);

//start sessions
Zend_Session::start(); 

//read configuration data
$config = new Zend_Config_Xml('../application/config/config.xml', 'app');

//we create an ability to capture errors and write them to an error log if there are problems.
$log = new Zend_Log();
$writer = new Zend_Log_Writer_Stream($config->log->logfile);
$log->addWriter($writer);
$filter = new Zend_Log_Filter_Priority((int)$config->log->level);
$log->addFilter($filter);

//we now need to get the list of graduates that need to have their CV's removed from the search engine
$date = new Zend_Date();
$date->sub(3, Zend_Date::MONTH);

echo $date->get(Zend_Date::ISO_8601);

$sql = "SELECT userid, guid FROM users WHERE lastlogin = ? AND active = 1";

$db = Zend_Db::factory($config->database);
try{

    $results = $db->fetchAll($sql, $date->get(Zend_Date::ISO_8601));

    var_dump($results);

}catch(Zend_Db_Exception $dbe){

    $log->debug($dbe->getMessage()."\n".$dbe->getTraceAsString());

}


//close database.
if($db->isConnected()){
    $db->closeConnection();
}

Чего мне не хватает?Я знаю, что настройки соединения с базой данных в объекте Zend_Config работают, и веб-приложение работает нормально, без проблем.

В настоящее время я использую Zend Framework v1.7.6.

ТакжеЕсть ли общие советы по использованию Zend Framework в сценарии cli?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2010

также проверьте свой php.ini и найдите mysql_sock

. Это часто ловушка для пользователей Mac с установленным Mamp: Snow Leopard поставляется с настроенным php, отдельным от ph, включенного в Mamp

0 голосов
/ 08 сентября 2010

PHP будет пытаться подключиться к mysql через tcp / ip, если сервер mysql не находится на той же машине, что и скрипт, и в качестве хоста db используется localhost.Затем он будет использовать сокет файловой системы.

Возможно, MySQL не может создать /tmp/mysql.sock из-за разрешений или не настроен для этого. В руководстве Mysql об этом должно быть больше.

Быстрым способом обойти это сейчас должно быть изменение хоста db в настройках Zend_Db на фактический ip mysql, который прослушивает, а не"localhost" или "127.0.0.1".

...