2010-09-08 4 views
0

J'essaie d'ajouter des scripts d'administration à un projet Zend Framework, qui sera exécuté tous les soirs via cron.Problèmes lors de l'utilisation de Zend_Db lors de l'exécution de php en tant que script cli

Cependant, j'ai rencontré mon premier problème avec le script en essayant d'utiliser Zend_Db. Je fais actuellement un appel SQL très simple pour obtenir des résultats et afficher uniquement les utiliser var_dump() mais je reçois le message d'erreur suivant:

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

Le script ressemble jusqu'à présent comme ceci:

<?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(); 
} 

Qu'est-ce qui me manque? Je sais que les paramètres de connexion à la base de données de l'objet Zend_Config fonctionnent et que l'application Web fonctionne correctement sans problème.

Je l'utilise actuellement avec Zend Framework v1.7.6.

Existe-t-il des astuces génériques pour utiliser Zend Framework dans un script cli?

Merci beaucoup.

Répondre

0

PHP essayera de se connecter à mysql via tcp/ip, à moins que le serveur mysql ne soit sur la même machine que le script et que "localhost" soit utilisé comme hôte db. Ensuite, il utilisera une socket de système de fichiers.

Il se peut que mysql ne puisse pas créer /tmp/mysql.sock en raison d'autorisations, ou qu'il ne soit pas configuré pour le faire. The Mysql manual devrait avoir plus sur cela. Un moyen rapide de contourner ce problème pour l'instant devrait être de changer l'hôte db dans vos paramètres de Zend_Db en une écoute réelle de mysql sur ip, pas "localhost" ou "127.0.0.1".

+0

merci, je savais que ce serait quelque chose de simple ... –

0

également vérifier votre php.ini et recherchez le mysql_sock

ce qui est souvent un piège pour les utilisateurs de Mac avec Mamp installé: Snow Leopard est livré avec un php configuré qui est séparé du pH inclus avec Mamp

Questions connexes