Zend: regler le timeout des connexions MySQL avec pdo_mysql

11Il peut parfois être utile d’augmenter ou de baisser la durée de timeout des connexions MySQL. Par exemple, il peut être intéressant de l’augmenter si certaines de vos requêtes MySQL n’aboutissent pas et si vous obtenez l’erreur « MySQL server went away ».

Ce réglage se fait en passant l’option PDO::ATTR_TIMEOUT (constante de la classe PDO qui vaut 2) au driver pdo_mysql. Cette option marchera aussi pour certains autres pilotes mais sa signification peut différer (avec sqlite par exemple).

Avec Zend, il faut définir cette option lors de la création de l’adapter soit en utilisant Zend_Db::factory soit en créant une nouvelle instance de Zend_Db_Adapter_Pdo_Mysql.

Exemple avec un timeout de 10 secondes en utilisant Zend_Db::factory:

      $driverOptions = array(
          PDO::ATTR_TIMEOUT => 10
      );

      $params = array(
        'host' => '127.0.0.1',
        'port' => '3306',
        'username' => 'user',
        'password' => 'password',
        'dbname' => 'my_db',
        'driver_options' => $driverOptions
      );
      $adapter = Zend_Db::factory('pdo_mysql', $params);

sources/docs:
PDO::setAttribute
documentation Zend_Db_Adapter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Zend framework – Configurer la gestion des erreurs

Voici un petit tutoriel pour créer un contrôleur de gestion des erreurs dans Zend. La mise en place de ce contrôleur permet de rediriger les utilisateurs vers une page spécifique en fonction de l’erreur rencontrée.

Premièrement modifiez le fichier bootstrap.php et ajoutez-y la ligne suivante:

<?php
...
ini_set('display_errors', 1);
... ?>

Cela permet de définir s’il faut afficher le détail des erreurs ou non.

Créez ensuite le fichier ErrorController.php dans le dossier controllers de votre projet Zend avec le contenu suivant:

<?php

class ErrorController extends Zend_Controller_Action
{
    public function init()
    {

    }
	
    public function errorAction()
    {
        //récupération des erreurs
	    $errors = $this->_getParam('error_handler');
        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                // erreur 404 -- contrôleur ou action introuvable
                // redirection vers error404Action
				$this->_forward('error404');
				
                break;
            default:	
				//ereur 500 -- Internal server error
                // redirection vers error500Action avec le détail de l'erreur
				$this->_forward('error500',null,null,array('exception'=>$errors->exception));
                break;
        }

    }
	
    public function error404Action()
    {
        //Ne pas oublier de créer le fichier error404.phtml dans votre projet.
	    $this->getResponse()->setRawHeader('HTTP/1.1 404 Not Found');
	    $this->view->message= "erreur 404 page introuvable";
    }
	
    public function error500Action()
    {
        //Ne pas oublier de créer le fichier error500.phtml dans votre projet.
	    $exception = $this->_getParam('exception');
        //Envoi le détail de l'erreur dans la vue si le paramètre display_errors a été mis a true
	    if(ini_get('display_errors')){
		    //Récupération des informations de l'erreur et envoi vers la vue.
		    $this->view->message = $exception->getMessage();
		    $this->view->trace = $exception->getTraceAsString();
	    }
		//Log du detail de l'erreur dans un fichier	
		$log =
			new Zend_Log(
				new Zend_Log_Writer_Stream(
					'../log/errors.log')
			);
		$log->debug($exception->getMessage()
				  . "\n"
				  . $exception->getTraceAsString());
		
	}
}

?>

Voila, l’application est prête à rediriger vos utilisateurs. N’oubliez pas de changer le paramètre display_errors lors de la mise en production ;).

Une réflexion au sujet de « Zend framework – Configurer la gestion des erreurs »

  1. C’est trop cool, ça m’a baucoup aider. Moi j’ai configurer le log dans le boostrap comme suite :
    $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH.$config->logfile);
    // dans application.ini j’ai une ligne [production]: logfile = /logs/log.log
    $log = new Zend_Log($writer);
    Zend_Registry::set(‘log’, $log);

    dans le fichier ErrorController et partout où j’ai besoin du log je recupère : $log=Zend_Registry::get(‘log’);

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *