2013-04-19 21 views
5

Oturum denetleyicisini uygulama denetleyicisine ekledikten sonra Apache kilitlenmeye başlar. Sorunu logging ile bir yoldan izledim ve/CORE/cake/libs/controller/component/session içinde check() fonksiyonunun bir kez çalışmaya başladığını ve tamamlanmadığını buldum. Ancak, çağıran işlev, __start(), sonsuz çalışır (en azından Apache çöker kadar). Ve sonsuza kadar koşarak, tüm __start() işlevinin tüm yol boyunca birden çok kez çalıştırıldığı anlamına gelir. Yine, bu uygulama denetleyicisinde oturum yardımcısı ekledikten sonra olur. Onsuz pasta, oturum yardımcısının bir görüşte kullanıldığı bir noktaya varana kadar iyi görünüyor. Bu sistem Cake 1.1'den yükseltiliyor ve Cake 1.1'de oturum yardımcısı otomatik olarak dahil edildi ve iyi çalıştı. Bunu aynı sonuçla hem Cake 1.3.7'de hem de Cake 1.3.15'te denedim. Pasta ayarları ile bir şeyler tahmin ediyorum. Aşağıda benim config/core dosyası, Apache'den gelen çökme bilgileri ve çökmeden hemen önceki Apache oturumu var. Başka bir bilgi yardımcı olacaksa lütfen yorumlarda bana bildirin. Herhangi bir öneri nasıl düzeltilir? Teşekkürler!CakePHP 1.3 - Pasta kütüphanelerinde sonsuz döngü, Apache çökmesi, Oturum yardımcısı ve __start()?

DÜZENLEME: İlgili bir discussion here'u eklemeyi unuttum. Ne yazık ki, burada net bir çözümü yok, ancak hatayı kekin içinde düzeltmek istiyorlar, bu da hatayı önlemek için kodumu değiştirmekten mutluluk duyarım.

DÜZEN 2: Yakın zamanda, bu projenin yöneticisinin gelecekte veritabanı oturumlarının kullanımını durdurmayı planladığını keşfettim, böylece durumu tamamen benim için düzeltir. Tabii ki bu soruyu gelecek ziyaretçiler için de bırakacağım.

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 kazası:

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

:

etrafında çalışma işaretlemeyi ajanı açmaktır. 2.x'e yükseltmek mümkün mü? –

+1

Bunu eninde sonunda umuyoruz. Ancak, öncelikle 1.3'e 2.x'e kadar iyi belgelenmiş geçiş yöntemlerini kullanabilmemiz için pastaya 1.3 yapmak istiyoruz. Aslında oldukça büyük (ve eski bir sistem), bu yüzden geçiş biraz zaman alabilir ve eğer 1,3'e çabucak ulaşabilirsek, ilk olarak şimdi sahip olduğumuz birçok konuya yardımcı olabiliriz, çünkü PHP'nin daha yeni bir sürümünü daha hızlı kullanmamıza izin verecektir. Bu yüzden, 2.x'e geçmek iyi bir seçimdir, ancak mümkünse, şimdilik 1.3'ün daha hızlı rotasını tercih ediyoruz. –

+0

Veritabanını kullanmamak için oturumları değiştirmeyi deneyebilir misiniz? http://book.cakephp.org/1.3/en/The-Manual/Core-Components/Sessions.html – systematical

cevap

0

Ben izin veren bir geçici çözüm buldum oturumların veritabanı sürümü çalışması. Bu bir çözüm değil, gerçek durum yine de tercih edilse de, durumum için muhtemelen işe yarayacak. Ben çaba için upvoted ettik

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

Oturum tablosu şemanızı paylaşabilir misiniz? Kullanıcı aracısını saklayacak bir sütun var mı? –

+1

@AdamBrett: Hayır, cake_sessions tablosundaki tek sütunlar id (VARCHAR), veriler (TEXT) ve sona eriyor (INT) –