2013-04-19 8 views
5

Dopo aver aggiunto l'helper di sessione al controller dell'app, Apache inizia a bloccarsi. Ho rintracciato il problema con la registrazione e trovato che in/CORE/cake/libs/controller/component/session la funzione check() inizia a funzionare una volta e non viene completata. Tuttavia, la funzione che chiama, __start(), viene eseguita all'infinito (almeno finché Apache non si blocca). E correndo all'infinito intendo che l'intera funzione __start() viene eseguita più volte fino in fondo. Ancora una volta, ciò accade quando aggiungo l'helper di sessione nel controller dell'app. Senza di esso, Cake sembra funzionare bene fino a quando non raggiungo un punto in cui l'helper di sessione viene utilizzato in una vista. Questo sistema è stato aggiornato da Cake 1.1 e in Cake 1.1 l'helper di sessione è stato incluso automaticamente e ha funzionato correttamente. Ho provato su Cake 1.3.7 e Cake 1.3.15 con lo stesso risultato. Sto indovinando qualcosa con le impostazioni della sessione in conflitto con il modo in cui Cake 1.3 fa le cose. Di seguito è riportato il mio file config/core, le informazioni sugli arresti anomali di Apache e il registro di Apache subito prima del crash. Se qualche altra informazione sarebbe utile per favore fammelo sapere nei commenti. Qualche suggerimento su come risolvere questo problema? Grazie!CakePHP 1.3 - Ciclo infinito nelle librerie di dolci, arresto di Apache, aiuto di sessione e __start()?

MODIFICA: Ho dimenticato di includere uno discussion here rilevante. Sfortunatamente, non hanno una soluzione chiara qui, ma sembrano voler correggere l'errore nella torta, dove sarei felice di alterare il mio codice per evitare il bug.

MODIFICA 2: Recentemente ho scoperto che il gestore di questo progetto prevede di interrompere l'utilizzo delle sessioni del database in futuro, in modo tale da risolvere completamente la situazione per me. Ovviamente lascerò questa domanda per i futuri visitatori.

app/config/core.php:

<?php 
/** 
* This is core configuration file. 
* 
* Use it to configure core behavior of Cake. 
* 
* PHP versions 4 and 5 
* 
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) 
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) 
* 
* Licensed under The MIT License 
* Redistributions of files must retain the above copyright notice. 
* 
* @copyright  Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) 
* @link   http://cakephp.org CakePHP(tm) Project 
* @package  cake 
* @subpackage cake.app.config 
* @since   CakePHP(tm) v 0.2.9 
* @license  MIT License (http://www.opensource.org/licenses/mit-license.php) 
*/ 

/** 
* CakePHP Debug Level: 
* 
* Production Mode: 
* 0: No error messages, errors, or warnings shown. Flash messages redirect. 
* 
* Development Mode: 
* 1: Errors and warnings shown, model caches refreshed, flash messages halted. 
* 2: As in 1, but also with full debug messages and SQL output. 
* 
* In production mode, flash messages redirect after a time interval. 
* In development mode, you need to click the flash message to continue. 
*/ 
    //Configure::write('debug', 2); 

/** 
* CakePHP Log Level: 
* 
* In case of Production Mode CakePHP gives you the possibility to continue logging errors. 
* 
* The following parameters can be used: 
* Boolean: Set true/false to activate/deactivate logging 
* Configure::write('log', true); 
* 
* Integer: Use built-in PHP constants to set the error level (see error_reporting) 
* Configure::write('log', E_ERROR | E_WARNING); 
* Configure::write('log', E_ALL^E_NOTICE); 
*/ 
    //Configure::write('log', true); 

/** 
* Application wide charset encoding 
*/ 
    //Configure::write('App.encoding', 'UTF-8'); 

/** 
* To configure CakePHP *not* to use mod_rewrite and to 
* use CakePHP pretty URLs, remove these .htaccess 
* files: 
* 
* /.htaccess 
* /app/.htaccess 
* /app/webroot/.htaccess 
* 
* And uncomment the App.baseUrl below: 
*/ 
    //Configure::write('App.baseUrl', env('SCRIPT_NAME')); 

/** 
* Uncomment the define below to use CakePHP prefix routes. 
* 
* The value of the define determines the names of the routes 
* and their associated controller actions: 
* 
* Set to an array of prefixes you want to use in your application. Use for 
* admin or other prefixed routes. 
* 
* Routing.prefixes = array('admin', 'manager'); 
* 
* Enables: 
* `admin_index()` and `/admin/controller/index` 
* `manager_index()` and `/manager/controller/index` 
* 
* [Note Routing.admin is deprecated in 1.3. Use Routing.prefixes instead] 
*/ 
    //Configure::write('Routing.prefixes', array('admin')); 

/** 
* Turn off all caching application-wide. 
* 
*/ 
    //Configure::write('Cache.disable', true); 

    define('DEBUG', 2); 
    define('DEBUG_AJAX', true); 
/** 
* Enable cache checking. 
* 
* If set to true, for view caching you must still use the controller 
* var $cacheAction inside your controllers to define caching settings. 
* You can either set it controller-wide by setting var $cacheAction = true, 
* or in each action using $this->cacheAction = true. 
* 
*/ 
    Configure::write('Cache.check', false); 

/** 
* Defines the default error type when using the log() function. Used for 
* differentiating error logging and debugging. Currently PHP supports LOG_DEBUG. 
*/ 
    define('LOG_ERROR', 2); 

/** 
* The preferred session handling method. Valid values: 
* 
* 'php'   Uses settings defined in your php.ini. 
* 'cake'  Saves session files in CakePHP's /tmp directory. 
* 'database' Uses CakePHP's database sessions. 
* 
* To define a custom session handler, save it at /app/config/<name>.php. 
* Set the value of 'Session.save' to <name> to utilize it in CakePHP. 
* 
* To use database sessions, run the app/config/schema/sessions.php schema using 
* the cake shell command: cake schema create Sessions 
* 
*/ 
    Configure::write('Session.save', 'database'); 

/** 
* The model name to be used for the session model. 
* 
* 'Session.save' must be set to 'database' in order to utilize this constant. 
* 
* The model name set here should *not* be used elsewhere in your application. 
*/ 
    Configure::write('Session.model', 'Session'); 

/** 
* The name of the table used to store CakePHP database sessions. 
* 
* 'Session.save' must be set to 'database' in order to utilize this constant. 
* 
* The table name set here should *not* include any table prefix defined elsewhere. 
* 
* Please note that if you set a value for Session.model (above), any value set for 
* Session.table will be ignored. 
* 
* [Note: Session.table is deprecated as of CakePHP 1.3] 
*/ 
    Configure::write('Session.table', 'cake_sessions'); 

/** 
* The DATABASE_CONFIG::$var to use for database session handling. 
* 
* 'Session.save' must be set to 'database' in order to utilize this constant. 
*/ 
    Configure::write('Session.database', 'default'); 

/** 
* The name of CakePHP's session cookie. 
* 
* Note the guidelines for Session names states: "The session name references 
* the session id in cookies and URLs. It should contain only alphanumeric 
* characters." 
* @link http://php.net/session_name 
*/ 
    Configure::write('Session.cookie', 'CAKEPHP'); 

/** 
* Session time out time (in seconds). 
* Actual value depends on 'Security.level' setting. 
*/ 
    Configure::write('Session.timeout', '120'); 

/** 
* If set to false, sessions are not automatically started. 
*/ 
    Configure::write('Session.start', true); 

/** 
* When set to false, HTTP_USER_AGENT will not be checked 
* in the session. You might want to set the value to false, when dealing with 
* older versions of IE, Chrome Frame or certain web-browsing devices and AJAX 
*/ 
    Configure::write('Session.checkAgent', true); 

/** 
* The level of CakePHP security. The session timeout time defined 
* in 'Session.timeout' is multiplied according to the settings here. 
* Valid values: 
* 
* 'high' Session timeout in 'Session.timeout' x 10 
* 'medium' Session timeout in 'Session.timeout' x 100 
* 'low' Session timeout in 'Session.timeout' x 300 
* 
* CakePHP session IDs are also regenerated between requests if 
* 'Security.level' is set to 'high'. 
*/ 
    Configure::write('Security.level', 'low'); 

/** 
* A random string used in security hashing methods. 
*/ 
    Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi'); 

/** 
* A random numeric string (digits only) used to encrypt/decrypt strings. 
*/ 
    Configure::write('Security.cipherSeed', '76859309657453542496749683645'); 

/** 
* Apply timestamps with the last modified time to static assets (js, css, images). 
* Will append a querystring parameter containing the time the file was modified. This is 
* useful for invalidating browser caches. 
* 
* Set to `true` to apply timestamps, when debug = 0, or set to 'force' to always enable 
* timestamping. 
*/ 
    //Configure::write('Asset.timestamp', true); 
/** 
* Compress CSS output by removing comments, whitespace, repeating tags, etc. 
* This requires a/var/cache directory to be writable by the web server for caching. 
* and /vendors/csspp/csspp.php 
* 
* To use, prefix the CSS link URL with '/ccss/' instead of '/css/' or use HtmlHelper::css(). 
*/ 
    //Configure::write('Asset.filter.css', 'css.php'); 

/** 
* Plug in your own custom JavaScript compressor by dropping a script in your webroot to handle the 
* output, and setting the config below to the name of the script. 
* 
* To use, prefix your JavaScript link URLs with '/cjs/' instead of '/js/' or use JavaScriptHelper::link(). 
*/ 
    //Configure::write('Asset.filter.js', 'custom_javascript_output_filter.php'); 

/** 
* The classname and database used in CakePHP's 
* access control lists. 
*/ 
    Configure::write('Acl.classname', 'DbAcl'); 
    Configure::write('Acl.database', 'default'); 

/** 
* If you are on PHP 5.3 uncomment this line and correct your server timezone 
* to fix the date & time related errors. 
*/ 
    //date_default_timezone_set('UTC'); 

/** 
* 
* Cache Engine Configuration 
* Default settings provided below 
* 
* File storage engine. 
* 
* Cache::config('default', array(
*  'engine' => 'File', //[required] 
*  'duration'=> 3600, //[optional] 
*  'probability'=> 100, //[optional] 
*  'path' => CACHE, //[optional] use system tmp directory - remember to use absolute path 
*  'prefix' => 'cake_', //[optional] prefix every cache file with this string 
*  'lock' => false, //[optional] use file locking 
*  'serialize' => true, [optional] 
* )); 
* 
* 
* APC (http://pecl.php.net/package/APC) 
* 
* Cache::config('default', array(
*  'engine' => 'Apc', //[required] 
*  'duration'=> 3600, //[optional] 
*  'probability'=> 100, //[optional] 
*  'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string 
* )); 
* 
* Xcache (http://xcache.lighttpd.net/) 
* 
* Cache::config('default', array(
*  'engine' => 'Xcache', //[required] 
*  'duration'=> 3600, //[optional] 
*  'probability'=> 100, //[optional] 
*  'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string 
*  'user' => 'user', //user from xcache.admin.user settings 
*  'password' => 'password', //plaintext password (xcache.admin.pass) 
* )); 
* 
* 
* Memcache (http://www.danga.com/memcached/) 
* 
* Cache::config('default', array(
*  'engine' => 'Memcache', //[required] 
*  'duration'=> 3600, //[optional] 
*  'probability'=> 100, //[optional] 
*  'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string 
*  'servers' => array(
*   '127.0.0.1:11211' // localhost, default port 11211 
*  ), //[optional] 
*  'compress' => false, // [optional] compress data in Memcache (slower, but uses less memory) 
* )); 
* 
*/ 
    Cache::config('default', array('engine' => 'File')); 

/** 
* This is the URL at which your working copy 
* is accessed -- no trailing forward slash 
*/ 
     define('BIRT_REPORT_BASE_URL', ''); 

/** 
* This is the directory to which BIRT has 
* permission to write files during graphing 
*/ 
     define('BIRT_REPORT_WRITABLE_IMAGE_DIR', ''); 

Apache incidente:

Problem signature: 
    Problem Event Name: APPCRASH 
    Application Name: httpd.exe 
    Application Version: 2.2.11.0 
    Application Timestamp: 493f5d44 
    Fault Module Name: php5ts.dll 
    Fault Module Version: 5.2.9.9 
    Fault Module Timestamp: 49a56925 
    Exception Code: c00000fd 
    Exception Offset: 001a049d 
    OS Version: 6.1.7601.2.1.0.768.3 
    Locale ID: 1033 
    Additional Information 1: 8278 
    Additional Information 2: 82782538381a8681201b9137311ac754 
    Additional Information 3: 9f8d 
    Additional Information 4: 9f8d09670f894d997bbbca5236befa87 

Apache error.log:

[Fri Apr 19 10:52:01 2013] [notice] Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9 configured -- resuming normal operations 
[Fri Apr 19 10:52:01 2013] [notice] Server built: Dec 10 2008 00:10:06 
[Fri Apr 19 10:52:01 2013] [notice] Parent: Created child process 7024 
[Fri Apr 19 10:52:02 2013] [notice] Digest: generating secret for digest authentication ... 
[Fri Apr 19 10:52:02 2013] [notice] Digest: done 
[Fri Apr 19 10:52:03 2013] [notice] Child 7024: Child process is running 
[Fri Apr 19 10:52:03 2013] [notice] Child 7024: Acquired the start mutex. 
[Fri Apr 19 10:52:03 2013] [notice] Child 7024: Starting 250 worker threads. 
[Fri Apr 19 10:52:03 2013] [notice] Child 7024: Starting thread to listen on port 443. 
[Fri Apr 19 10:52:03 2013] [notice] Child 7024: Starting thread to listen on port 80. 
+0

ho upvoted per lo sforzo. È possibile eseguire l'upgrade alla torta 2.x? –

+1

Speriamo che alla fine. Ma ci piacerebbe arrivare a cake 1.3 prima di poter utilizzare i metodi di transizione ben documentati da 1.3 a 2.x. In realtà è un sistema abbastanza grande (e vecchio) in modo che la transizione potrebbe richiedere del tempo e se potessimo arrivare a 1.3 rapidamente prima sarebbe utile con molti problemi che abbiamo ora perché ci permetterà di utilizzare rapidamente una versione più recente di PHP. Quindi l'aggiornamento a 2.x è una buona scelta, ma ci piacerebbe il percorso più veloce di 1.3 per il momento, se possibile. –

+0

Puoi provare a cambiare le sessioni per non utilizzare il database? http://book.cakephp.org/1.3/en/The-Manual/Core-Components/Sessions.html – systematical

risposta

0

ho trovato una soluzione che permette di versione del database delle sessioni per funzionare. Non è una correzione, ma probabilmente funzionerà per la mia situazione, anche se la soluzione reale sarebbe comunque preferibile.

Il lavoro attorno è quello di trasformare l'agente spuntare:

Configure::write('Session.checkAgent', false); 
+0

Puoi condividere lo schema della tua tabella di sessione? Ha una colonna per memorizzare l'agente utente? –

+1

@AdamBrett: No, le uniche colonne della tabella cake_sessions è id (VARCHAR), i dati (testo), e scade (INT) –

Problemi correlati