Closer
发表于 2015-4-22 09:20:55
你的開發環境是?Windwos / Linux?
燃雲
发表于 2015-4-22 10:11:44
估計是判斷PHP環境出錯,執行環境應該是版本5.4以下,但不知因何原因判為5.4或以上。也許是執行環境的PHP版本號不按規定。
可参考PHP手冊中的version_compare()函數。
v阿杰
发表于 2015-4-22 10:22:47
燃雲 发表于 2015-4-22 10:11
估計是判斷PHP環境出錯,執行環境應該是版本5.4以下,但不知因何原因判為5.4或以上。也許是執行環境的PHP版 ...
的确是5.4以上的php
燃雲
发表于 2015-4-22 13:49:04
參考CodeIgnter 3.0.0 system/libraries/Session/session.php源碼
$class = new $class($this->_config);
if ($class instanceof SessionHandlerInterface)
{
if (is_php('5.4'))
{
session_set_save_handler($class, TRUE);
}
else
{
session_set_save_handler(
array($class, 'open'),
array($class, 'close'),
array($class, 'read'),
array($class, 'write'),
array($class, 'destroy'),
array($class, 'gc')
);
session_set_save_handler($class, TRUE);句報錯!
執行前的檢測不單是PHP是5.4或更高,還有必須"$class instanceof SessionHandlerInterface"為真。
再参看system/libraries/Session/drivers/Session_files_driver.php中
class CI_Session_files_driver extends CI_Session_driver implements SessionHandlerInterface {
var_dump()顯示$class是CI_Session_files_driver,完全正確!即是說,$class應該是SessionHandler!
但執行session_set_save_handler時卻認為$class並非SessionHandler!相當奇怪!
若系統中PHP的session extension無出錯,可能是session_set_save_handler使用$class內容時出錯,故此認為$class並非SessionHandler。
参看var_dump()的$class內涵,"save_path"的確相當可疑,3.0手冊指明要求絕對路徑,但var_dump()出來是相對路徑。
PHP 5.4及5.5自動加載session我剛試過,完全無問題。若非這些問題,估計是其它環境設定引致。
至於為何自動加載才見到問題,可能非自動加載時亦有,但一閃而過。可打開log功能看看是否如此。
v阿杰
发表于 2015-4-22 14:50:05
本帖最后由 v阿杰 于 2015-4-22 14:53 编辑
燃雲 发表于 2015-4-22 13:49
參考CodeIgnter 3.0.0 system/libraries/Session/session.php源碼
环境设置有关吧!
5.4.0RC4版本的
现在换成5.4.40没提示了!
FCPATH.'public/sess_save_path';
必须要绝对路径,
相对路径有警告
342210020
发表于 2015-7-20 18:40:34
我也遇到这个问题,什么解决?
呒名ぁ指的等待
发表于 2015-8-16 13:59:46
大概是在哪些文件中修改什么?
sloan
发表于 2015-11-21 11:36:52
阅读手册也没找到原因,自动加载session就是出错。
sloan
发表于 2015-11-21 11:56:09
把session.php的107行注释了
if (is_php('5.4'))
{
#session_set_save_handler($class, TRUE);
}
else
{
session_set_save_handler(
array($class, 'open'),
array($class, 'close'),
array($class, 'read'),
array($class, 'write'),
array($class, 'destroy'),
array($class, 'gc')
);
register_shutdown_function('session_write_close');
}
page2page
发表于 2015-12-14 14:15:51
我正在用一个codeignitor 3.0写的erp的软件eacherp, http://www.Eacherp.net ,也碰到这个问题,后来
把config文件中改为如下就正常了:
$config['sess_save_path'] = 'C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\eacherp\session_dir'
其实ci的config文件中已经注明:“使用文件方式保存session,必须使用绝对路径”。