我们继承了一个在Ubuntu上运行良好的PHP页面,但是将源代码转储到运行使用PHP 5.4的XAMMP或使用PHP 5.3运行WAMP的Windows 7系统的显示器上。
转储发生的时间似乎是它试图解析“ - >” (对象属性)字符组合。当我将其更改为“[]”以作为数组元素进行访问时,它会超过该数组,但随后将源代码转储到“=>”之后的显示中(映射)字符组合。如果注释掉它不起作用,只有删除整行才能使它过去。
最后,当它只用“<”打印html时和“>”标志,这也导致屏幕转储。如果我用html实体替换这些字符,源代码不再转储,但程序不显示菜单,根本不起作用。请注意,我可以通过它的登录页面成功登录应用程序,尽管即使显示“POST”和其他一些“<”和“>”用户名字段中的字符。
我尝试在整个应用上运行unix2dos,但这没有任何效果。还尝试将其中一个违规页面的文本转换为UTF-8,但仍然没有运气。
回答提出的一些问题:
工作的ubuntu版本是PHP Version 5.3.10-1ubuntu3.1
在Ubuntu中而不是在Windows中运行的第一段代码是:
public function __construct($gid)
{
$this->id = $gid;
return $this->retrieve();
}
代码转储到显示器上的地方是:
id = $gid; return $this->retrieve(); }
是的,PHPInfo确实有效,显示的是带有PHP Version 5.3.13的WAMP服务器
我尝试更改短开标签,但没有区别。
该产品是由外包集团为我们编写的,它似乎是基于某种框架。但我找不到任何关于Google上任何类名的引用,所以也许他们在内部编写了整个内容。
转到apache日志,实际错误发生在这一行:
$_SESSION['admin_gid'] = Membership::getGroup($rUser['id']);
错误信息为:
未找到会员资格
成员资格是一个类,它稍后在与上面显示的点上显示的转储器相同的文件中声明,因此由于某种原因,PHP解析器不理解它从那时开始读取PHP代码。
答案 0 :(得分:2)
I tried changing the short-open-tag but it made no difference.
在这样的场景中,你可以做的就是编写一个小脚本并运行它,看它是否有效。尝试短标签和以下方法。请记住,如果您弄乱了php.ini
,则必须重新启动服务器。最好通过右键单击任务栏上的服务器图标来更改设置。这可能是由于php short tags。尝试启用和禁用并运行脚本。同时更改以下脚本,看看它对您更改的设置有何影响。
EG:
<?php
echo "hi";
// phpinfo(); <-- preferred if you can
?>
然后你可以看到你的服务器是否按照你的意愿工作。如果它是O / P hi
,那么您可以尝试使用大代码并查看。
顺便提一下,您提供的代码似乎没有错误。
答案 1 :(得分:0)
如果这是一个大型应用程序,那么您可能必须检查所包含的所有文件。可能存在许多问题。
尝试执行以下步骤
error_reporting(E_ALL);
debug_backtrace
http://php.net/manual/en/function.debug-backtrace.php 另一方面,您是否已将整个项目从linux复制到Windows?可能有些文件在项目文件夹之外,在Windows中没有?我知道很多人确实创造了这样的漏洞,所以可以联系他们“支持”:)
答案 2 :(得分:0)
PHP对类命名不区分大小写。你通常可以做
$membership = new membership();
即使该类被命名为“Membership”,反之亦然。尝试更改类名,也许类文件名在操作系统上区分大小写。
答案 3 :(得分:0)
它真的很奇怪..虽然您可以检查已加载的成员类或不使用函数:
array get_declared_classes ( void )
<?php
print_r(get_declared_classes());
?>
它将返回一个具有已定义类名称的数组。
REF: http://php.net/manual/en/function.get-declared-classes.php