PHP页面显示在ubuntu上,而不是在Windows 7上

时间:2013-01-22 13:02:54

标签: php wamp xampp

我们继承了一个在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代码。

4 个答案:

答案 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)

嗯,很有意思。

如果这是一个大型应用程序,那么您可能必须检查所包含的所有文件。可能存在许多问题。

尝试执行以下步骤

  1. 设置error_reporting(E_ALL);
  2. 尝试使用debug_backtrace http://php.net/manual/en/function.debug-backtrace.php
  3. 检查输出缓冲状态。是打开还是关闭
  4. 另一方面,您是否已将整个项目从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