我在Opencart 1.5.2.1上运行RestAPI,服务器在Apache上运行PHP版本7.1.19和服务器API FPM / FastCGI。我遇到了会话问题,我安装了VQMOD xml文件,用于向Opencart的系统会话添加某些功能。
请先让我分享整个会话代码:
<file name="system/library/session.php">
<operation>
<search position="before"><![CDATA[
if (!session_id()) {
]]></search>
<add><![CDATA[
$token_array = json_decode(file_get_contents("php://input"),true);
if (isset($token_array['ic_token'])) {
$ic_token = $token_array['ic_token'];
} elseif(isset($_POST['ic_token'])){
$ic_token = $_POST['ic_token'];
}
if (isset(getallheaders()['ic_token'])) {
$ic_token = getallheaders()['ic_token'];
} elseif (isset(getallheaders()['Ic-Token'])) {
$ic_token = getallheaders()['Ic-Token'];
}
if (isset($ic_token) && $ic_token != 'Session_Not_Loggin') {
session_id($ic_token);
session_start();
}
]]></add>
</operation>
</file>
使用Postman调用函数时,我首先收到错误消息
致命错误:未捕获错误:调用未定义函数 getallheaders()在 /var/www/vhosts/example.com/httpdocs/vqmod/vqcache/vq2-system_library_session.php:15 堆栈跟踪:#0 /var/www/vhosts/example.com/httpdocs/admin/index.php(110): 会话-> __ construct()#1 {main}被抛出 /var/www/vhosts/example.com/httpdocs/vqmod/vqcache/vq2-system_library_session.php 在第15行
我在Google上搜索后发现PHP-FPM不支持getallheaders(),我尝试了一种变通方法,但没有成功。我已经从xml代码中删除了代码,变得像这样:
<file name="system/library/session.php">
<operation>
<search position="before"><![CDATA[
if (!session_id()) {
]]></search>
<add><![CDATA[
$token_array = json_decode(file_get_contents("php://input"),true);
if (isset($token_array['ic_token'])) {
$ic_token = $token_array['ic_token'];
} elseif(isset($_POST['ic_token'])){
$ic_token = $_POST['ic_token'];
}
==> the getallheaders() code has been removed
if (isset($ic_token) && $ic_token != 'Session_Not_Loggin') {
session_id($ic_token);
session_start();
}
]]></add>
</operation>
</file>
这导致了一个新错误:
注意:会话已经开始-忽略session_start() 在 /var/www/vhosts/example.com/httpdocs/vqmod/vqcache/vq2-system_library_session.php 在第19行
请不要尝试这种解决方法
if (!function_exists('getallheaders'))
{
function getallheaders()
{
if (isset(getallheaders()['ic_token'])) {
$ic_token = getallheaders()['ic_token'];
} elseif (isset(getallheaders()['Ic-Token'])) {
$ic_token = getallheaders()['Ic-Token'];
};
};
};
这使我无法获得503服务“意外的<<”
请提供任何帮助,高度赞赏。