我们继承了一个在 Ubuntu 上运行良好的 PHP 页面,但将源代码转储到 Windows 7 系统的显示器上,该系统运行使用 PHP 5.4 的 XAMMP 或使用 PHP 5.3 的 WAMP。
转储发生的地方似乎是它试图解析“->”(对象属性)字符组合时。当我将其更改为“[]”以作为数组元素访问时,它会通过它,但随后会将源代码转储到出现在“=>”(映射)字符组合之后的显示器上。注释掉是行不通的,只有删除整行才能让它过去。
最后,当它只是打印带有“<”和“>”符号的html时,也会导致屏幕转储。如果我用 html 实体替换这些字符,源代码不会再转储,但程序不会显示菜单并且根本无法运行。请注意,我可以通过它的登录页面成功登录应用程序,尽管在用户名字段中显示“POST”和其他一些“<”和“>”字符。
我试过在整个应用程序上运行 unix2dos,但这没有任何效果。还尝试将其中一个有问题的页面的文本转换为 UTF-8,但仍然没有运气。
在回答提出的一些问题时:
工作的 ubuntu 版本是 PHP 版本 5.3.10-1ubuntu3.1
在 Ubuntu 而不是 Windows 中工作的第一段代码是这样的:
public function __construct($gid)
{
$this->id = $gid;
return $this->retrieve();
}
代码转储到显示屏的位置以:
id = $gid; return $this->retrieve(); }
是的,PHPInfo 确实有效,显示为 PHP 版本 5.3.13 的 WAMP 服务器
我尝试更改short-open-tag,但没有任何区别。
该产品是由一个外包团队为我们编写的,它似乎基于某种框架。但是我在 Google 上找不到任何对任何类名的引用,所以也许他们在内部编写了整个内容。
转到 apache 日志,实际错误发生在这一行:
$_SESSION['admin_gid'] = Membership::getGroup($rUser['id']);
错误消息是:
未找到会员
Membership 是一个类,它稍后在同一个文件中声明,与上面显示的那个在显示器上转储的文件相同,所以由于某种原因,PHP 解析器不理解它正在从那个点读取 PHP 代码。