邢彬 /* XingBin.net */
XING Bin, a Coder, Geek, Railfan, and Outdoors Fan
face

SAE异常导致PHP本地模拟环境出错及其解决方案

发布 / 2014-12-06 18:26   于 / Channel 8   文 / XingBin   浏览 / 3391  

在今年的4月份,SAE的本地PHP环境突然提示需要升级,而升级后却发现该模拟环境无法正常使用了。例如数据库无法正常访问,有些函数也出现运行出错。下面就来分析一下原因并找到解决方法。

本地环境出错,最初表现如图所示:

1455011wgzeue1wg4d10v9.png 

如上图所示,在自动升级的过程中,将以前的禁用函数和类改成了html代码的前两行。直觉判断是向SAE服务器通信出现了问题。通过Wireshark抓包分析,该数据来自http://sae.sina.com.cn网站站点首页的前两行。

<!DOCTYPE html>    
<html data-lang="zh-cn" data-template="simple">

继续,发现php.ini文件的384行和390行被改为上述代码,导致php.ini异常,使得php和sae运行时环境出现异常。

接着看一下问题是怎么出现的。

在本地运行init.cmd时,会进行一系列的初始化函数,主要的代码在本地目录的emulation中。较为容易地可以发现出现问题的地方来自core.function.php的267行,uploadDisabled()函数中。

该函数首先向SAE_CODE_DEPOSITION_ADDRESS.'?action=disabledfunc'查询最新的禁用函数和类,更新到本地的message.txt中,再更新php.ini。

SAE_CODE_DEPOSITION_ADDRESS预定义即http://deploy.sae.sina.com.cn/。即http://deploy.sae.sina.com.cn/?action=disabledfunc出现了异常。手动访问发现,的确跳转到sae.sina.com.cn首页。

至此原因查明,由于SAE服务器的异常,导致本地环境中禁用的函数和类出现更新错误,导致SAE本地模拟环境出现异常。

在SAE的http://deploy.sae.sina.com.cn/?action=disabledfunc不能正常使用之前,可以临时使用下面的办法解决这一问题。

1、修改emulation下的message.txt,将disable_functions和disabled_classes后面的值清空,或者修改为上图中被解禁的那些函数和类;

2、修改bin\php-5.3.8\php.ini,将384行和390行的disable_functions和disabled_classes的值清空,或者修改为上图中被解禁的那些函数和类;

3、修改emulation下的core.function.php,将1304行

$this->update->uploadDisabled();

临时注释掉,阻止自动升级禁用函数列表。

然后重启服务就好了。

等SAE的http://deploy.sae.sina.com.cn/?action=disabledfunc恢复正常之后,将core.function.php的1304行$this->update->uploadDisabled();解除注释即可,恢复自动升级禁用函数列表即可。

注:本文最初发表于http://saebbs.com/forum.php?mod=viewthread&tid=22923

关联阅读: 云计算 SAE PHP

请登录后留言

LOGIN
FOLLOW ME
CATEGORIES
COPYRIGHT
Creative Commons License
除特殊声明的页面外,本站作品采用 知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议 进行许可。