我有一个PHP应用程序,它是在Ubuntu虚拟机上使用CakePHP 2.4.6开发的,其上安装了PHP 5.3.10-1ubuntu3.11(使用Apache2)。我的问题是我想将它部署到真正的服务器,它有PHP 5.4.16,我得到以下错误:
Warning (2): Illegal string offset 'session.cookie_lifetime' [CORE/Cake/Model/Datasource/CakeSession.php, line 482]
Warning (2): Illegal string offset 'session.name' [CORE/Cake/Model/Datasource/CakeSession.php, line 485]
Warning (2): Illegal string offset 'session.gc_maxlifetime' [CORE/Cake/Model/Datasource/CakeSession.php, line 491]
Warning (2): Illegal string offset 'session.cookie_httponly' [CORE/Cake/Model/Datasource/CakeSession.php, line 494]
Warning (2): Illegal string offset 'session.cookie_lifetime' [CORE/Cake/Model/Datasource/CakeSession.php, line 482]
Warning (2): Illegal string offset 'session.name' [CORE/Cake/Model/Datasource/CakeSession.php, line 485]
Warning (2): Illegal string offset 'session.gc_maxlifetime' [CORE/Cake/Model/Datasource/CakeSession.php, line 491]
Warning (2): Illegal string offset 'session.cookie_httponly' [CORE/Cake/Model/Datasource/CakeSession.php, line 494]
Warning (2): Illegal string offset 'session.cookie_lifetime' [CORE/Cake/Model/Datasource/CakeSession.php, line 482]
Warning (2): Illegal string offset 'session.name' [CORE/Cake/Model/Datasource/CakeSession.php, line 485]
Warning (2): Illegal string offset 'session.gc_maxlifetime' [CORE/Cake/Model/Datasource/CakeSession.php, line 491]
Warning (2): Illegal string offset 'session.cookie_httponly' [CORE/Cake/Model/Datasource/CakeSession.php, line 494]
Warning (2): Illegal string offset 'session.cookie_lifetime' [CORE/Cake/Model/Datasource/CakeSession.php, line 482]
Warning (2): Illegal string offset 'session.name' [CORE/Cake/Model/Datasource/CakeSession.php, line 485]
Warning (2): Illegal string offset 'session.gc_maxlifetime' [CORE/Cake/Model/Datasource/CakeSession.php, line 491]
Warning (2): Illegal string offset 'session.cookie_httponly' [CORE/Cake/Model/Datasource/CakeSession.php, line 494]
我已经读过这个错误,(如果我没弄错的话)这意味着你想要将一个字符串用作一个数组,但是它有一些与CakePHP核心有关的东西而不是我的PHP应用程序。
它向我的所有页面提供了这些错误(警告),并且未加载内容,因此我实际上只看到这些消息而没有任何css或html布局。
它在我的虚拟机上运行正常,所以我可以假设它必须对服务器上安装的较新版本的PHP做一些事情。
我还尝试使用较新版本的CakePHP,版本2.5.1,但它也导致了这些错误。
更新1:以下是CakeSession.php文件中的相关PHP代码段:
if (!isset($sessionConfig['ini']['session.cookie_lifetime'])) {
$sessionConfig['ini']['session.cookie_lifetime'] = $sessionConfig['cookieTimeout'] * 60;
}
if (!isset($sessionConfig['ini']['session.name'])) {
$sessionConfig['ini']['session.name'] = $sessionConfig['cookie'];
}
这些是变量,DebugKit显示:
$sessionConfig = array(
'cookie' => 'CAKEPHP',
'timeout' => '240',
'ini' => 'C / 14400 CAKEPHP 14400 1',
'defaults' => 'php',
'cookieTimeout' => '240'
)
$defaults = array(
'cookie' => 'CAKEPHP',
'timeout' => (int) 240,
'ini' => array(
'session.use_trans_sid' => (int) 0,
'session.cookie_path' => '/'
)
)
更新2:我试图从Git中放一个干净的CakePHP(也有app文件夹)并且它可以工作。所以我的申请似乎有些问题......但我应该在哪里看?
有什么建议吗?提前谢谢。
答案 0 :(得分:0)
我找到了问题的根源。我创建了一个配置页面,从j_config.php文件中读取配置详细信息。我还创建了Session变量,可在此配置页面上修改,但我没有意识到Configure :: read(' Session.ini')是一个数组,而不是一个字符串,我有只需将其放入输入字段,它就会自动转换为字符串。所以简而言之,因为我在Session中有这个数组到字符串:
array (
'cookie' => 'CAKEPHP',
'timeout' => 240,
'ini' => 'C / 14400 CAKEPHP 14400 1',
'defaults' => 'php',
'cookieTimeout' => 240,
),
而不是:
array (
'cookie' => 'CAKEPHP',
'timeout' => 240,
'ini' =>
array (
'session.use_trans_sid' => 0,
'session.cookie_path' => '/',
'session.cookie_lifetime' => 14400,
'session.name' => 'CAKEPHP',
'session.gc_maxlifetime' => 14400,
'session.cookie_httponly' => 1,
),
'defaults' => 'php',
'cookieTimeout' => 240,
),
由于它在PHP 5.3中工作,它在PHP 5.4中不起作用,因为我将数组转换为字符串,我应该将它转换回数组(或更准确地说:使用我之前创建的数组中的字符串作为数组),它在PHP 5.4中提供此错误/警告。