php - CakePHP 1.3 - 蛋糕库中的无限循环、Apache 崩溃、 session 助手和 __start()?

标签 php apache session cakephp infinite-loop

将 session 助手添加到应用程序 Controller 后,Apache 开始崩溃。我已经通过日志记录的方式跟踪了问题,发现在/CORE/cake/libs/controller/component/session 中,函数 check() 开始运行一次但没有完成。但是,它调用的函数 __start() 会无限运行(至少直到 Apache 崩溃为止)。无限运行是指整个 __start() 函数一直运行多次。同样,一旦我在应用程序 Controller 中添加 session 助手,就会发生这种情况。没有它,Cake 似乎运行良好,直到我达到在 View 中使用 session 助手的地步。该系统正在从 Cake 1.1 升级,在 Cake 1.1 中, session 助手被自动包含并运行良好。我在 Cake 1.3.7 和 Cake 1.3.15 上都尝试过,结果相同。我猜 session 设置与 Cake 1.3 做事的方式有冲突。下面是我的 config/core 文件,来自 Apache 的崩溃信息,以及崩溃前的 Apache 日志。如果任何其他信息有帮助,请在评论中告诉我。任何建议如何解决这个问题?谢谢!

编辑:我忘了包含相关的 discussion here .不幸的是,他们在这里没有明确的解决方案,但他们似乎想修复蛋糕中的错误,我很乐意更改我的代码以避免错误。

编辑 2:我最近发现这个项目的经理计划在未来停止使用数据库 session ,这样就完全解决了我的问题。当然,我会将这个问题留给 future 的访问者。

应用程序/配置/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 崩溃:

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 错误日志:

[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.

最佳答案

我找到了一个允许数据库版本的 session 工作的解决方法。这不是一个修复,但它可能适用于我的情况,尽管真正的修复仍然是首选。

解决方法是关闭代理检查:

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

关于php - CakePHP 1.3 - 蛋糕库中的无限循环、Apache 崩溃、 session 助手和 __start()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107483/

相关文章:

php - 用mysql数据替换函数中的数组

php - Laravel 5.3 中的搜索栏以过滤表格

php - php的垃圾回收能否删除启动脚本的session

php - !empty($x) 和@$x 的区别?

php - 如何使用 PHP 和 MySQL 从两个条件链接表中有效地求和和减去

apache - 在 Ubuntu 13.04 上更新 Apache 后出错(Raring Ringtail)

java - Apache 阿夫罗 : UnresolvedUnionException when using union data type

python - Django + mod_wsgi 如何影响 python 路径?

javascript - 在多个服务器上的 koa 中保持 session

Safari、Opera 和 IE 中的 PHP session 问题