10

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

4

4 回答 4

2
I tried changing the short-open-tag but it made no difference.

在这种情况下,您可以做的是编写一个小脚本并运行它,看看它是否有效。尝试短标签和以下方法。请记住,如果您弄乱了您php.ini的服务器,则必须重新启动服务器。最好通过右键单击任务栏上的服务器图标来更改设置。这可能是由于php 短标签。尝试启用和禁用并运行脚本。还要更改以下脚本,看看这对您更改的设置有何影响。

例如:

<?php
echo "hi";
// phpinfo(); <-- preferred if you can
?>

然后您可以查看您的服务器是否按预期工作。如果它是 O/P hi,那么您最好尝试一下您的大代码并查看。

顺便说一句,您提供的代码似乎没有错误。

于 2013-01-26T10:36:36.613 回答
0

嗯,很有趣。

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

尝试执行以下步骤

  1. error_reporting(E_ALL);
  2. 尝试使用debug_backtrace http://php.net/manual/en/function.debug-backtrace.php
  3. 检查输出缓冲状态。是开还是关

另一边,你有没有把整个项目从linux复制到windows?可能有些文件在项目文件夹之外,而在 Windows 中不存在?我知道很多人确实制造了这样的漏洞,因此可以联系他们以获得“支持”:)

于 2013-01-28T06:07:27.583 回答
0

PHP 对类命名不区分大小写。你通常可以做

$membership = new membership();

即使班级被命名为“会员”,反之亦然。尝试更改类名,可能类文件名在操作系统上区分大小写。

于 2013-01-29T08:05:10.677 回答
0

它真的很奇怪..虽然你可以检查会员类是否已加载或未使用函数:

array get_declared_classes ( void )


<?php
print_r(get_declared_classes());
?>

它将返回一个包含已定义类名称的数组。

参考: http: //php.net/manual/en/function.get-declared-classes.php

于 2013-01-31T12:37:45.770 回答