Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je m'en remet à la communauté car je vais péter un plomb à force de tourner en rond.
J'essai d'utiliser Zend_Application et la classe Zend_Application_Bootstrap_Bootstrap.
Mon problème se situe au niveau de la session. Je n'arrive pas à la démarrer (Zend_Session::start()) sans avoir l'erreur:
Uncaught exception 'Zend_Session_Exception' with message 'Session must be started before any output has been sent to the browser; output started in "mon fichier index/1"
Pourtant je la demarre avant le reste juste après _initDb car ma session utilise Zend_Session_SaveHandler_DbTable
Merci pour votre aide
Voici mon bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { public function _initAcl() { $acl = new My_Acl_Ini( APPLICATION_PATH . '/configs/acl.ini'); return $acl; } public function _initSession() { $session = $this->getPluginResource('session'); Zend_Session::start(); } }
et le index.php
// Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Typically, you will also want to add your library/ directory // to the include_path, particularly if it contains your ZF installed set_include_path(implode(PATH_SEPARATOR, array( dirname(dirname(__FILE__)) . '/library', get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();
Mon fichier application.ini
[production] # php phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 # php includes path includePaths.library = APPLICATION_PATH "/../library" # bootstrap bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" # Autoload namespaces autoloadernamespaces[] = "My_" # resources resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" # Resources # db resources.db.adapter = "pdo_mysql" resources.db.params.host = "localhost" resources.db.params.username = "zend" resources.db.params.password = "" resources.db.params.dbname = "zend" resources.db.isDefaultTableAdapter = true # session resources.session.save_path = APPLICATION_PATH "/logs" resources.session.use_only_cookies = true resources.session.remember_me_seconds = 864000 resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable" resources.session.saveHandler.options.name = "session" resources.session.saveHandler.options.primary.session_id = "session_id" resources.session.saveHandler.options.primary.save_path = "save_path" resources.session.saveHandler.options.primary.name = "name" resources.session.saveHandler.options.primaryAssignment.sessionId = "sessionId" resources.session.saveHandler.options.primaryAssignment.sessionSavePath = "sessionSavePath" resources.session.saveHandler.options.primaryAssignment.sessionName = "sessionName" resources.session.saveHandler.options.modifiedColumn = "modified" resources.session.saveHandler.options.dataColumn = "session_data" resources.session.saveHandler.options.lifetimeColumn = "lifetime"
Dernière modification par lil-works (07-10-2009 16:43:23)
Hors ligne
Et avec ce code ?
public function _initSession() { $this->bootstrap('session'); $session = new Zend_Session_Namespace( 'xxxxx' ); /*Zend_Session_Namespace démarre la session PHP*/ }
Ami
Hors ligne
@lil-works :
le message "output started in "mon fichier index/1" " t'indique le fichier qui envoie des caractères avant que tu ne cherches à ouvrir ta session (et même le No de ligne je crois).
Va voir dans ce fichier si tu n'as pas :
- un retour à la ligne ou un espace avant "<?php" ou après "?>"
- regarde si tu n'as pas une erreur renvoyée (une notice, un warning ou un truc du genre).
(le principe est qu'un cookie est envoyé dans des headers http. Quand tu envoies un caractère vers le navigateur, PHP referme les headers HTTP et renvoie le caractère, tu ne peux plus modifier les headers => plus de cookie => plus d'ouverture de session possible)
A+, Philippe
Hors ligne
Merci pour vos réponses...
Philippe... Tu avais raisons c'etait un espace avant le <?php du index.php
Perdre autant de temps pour un ptit truc comme ça!
Un grand merci
Hors ligne