【发布时间】:2013-01-05 17:19:44
【问题描述】:
我们继承了一个在 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 代码。
【问题讨论】:
-
您能否发布在一个平台上运行而不在另一个平台上运行的最短代码?
-
在 windows php.net/manual/en/ini.core.php#ini.short-open-tag 中似乎关闭了 short-open-tag 指令
-
你能得到一个
<?php phpinfo(); ?>在 Win7 网络服务器上工作吗? -
如果您能准确地向我们展示您遇到的错误以及触发错误的代码,将会很有帮助。这不太可能是 Windows/Linux 转换问题,因为 PHP 被设计为可移植的。你运行的是什么软件?它是内部编写的代码还是第三方产品?您所做的更改(例如用
[]替换->)听起来不可信;在上下文中查看代码会很有用。此外,您还没有提到它在 Ubuntu 下运行的 PHP 版本(即使您已经告诉我们您在 Windows 中尝试过的 PHP 版本)。这也会有所帮助。 -
发布了带有回复的编辑。谢谢。