2013-01-22 40 views
10

我们继承了一个在Ubuntu上运行良好的PHP页面,但是将源代码转储到运行使用PHP 5.4的XAMMP或使用PHP 5.3的WAMP的Windows 7系统上的显示器上。在ubuntu上显示PHP页面,而不是在Windows 7上

转储发生的地方似乎是它试图解析“ - >”(对象属性)字符组合。当我将其更改为“[]”以作为数组元素进行访问时,它会越过该位置,但会将源代码转储到出现在“=>”(映射)字符组合之后的显示中。评论说这是行不通的,只有删除整条线才能到达那里。

最后,当它打印出带有“<”和“>”符号的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服务器

我试着改变短开放标签,但它没有区别。

该产品是由外包集团为我们编写的,它似乎基于某种框架。但是我找不到任何关于Google的任何类名的引用,所以也许他们在内部编写了所有的类名。

$_SESSION['admin_gid'] = Membership::getGroup($rUser['id']); 

在错误信息是::

会员”未找到

成员是

要去Apache日志在此线路上发生的实际错误类在稍后在与上面显示的点相同的文件中声明,所以出于某种原因PHP解析器不理解它从这一点阅读PHP代码。

+2

你能张贴最短的那一块的代码,在一个平台上工作,而不是其他? – Floris

+5

它似乎在Windows中关闭short-open-tag指令http://php.net/manual/en/ini.core.php#ini.short-open-tag –

+2

你可以得到一个'<?php phpinfo( ); ?>在Win7 Web服务器上工作? – halfer

回答

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你很好地尝试你的大代码,看看。

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

+0

这是最初在评论中提出的建议,但它的工作方式是通过右键单击服务器设置标志来设置它。 –

0

嗯,这很有趣。

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

尝试做以下步骤

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

另一方面,您是否将整个项目从linux复制到Windows?可能有一些文件在窗口以外的项目文件夹之外?我知道很多人确实创造了这样的漏洞,因此可以联系他们获取“支持”:)

0

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

$membership = new membership(); 

即使该类名为'Membership',反之亦然。尝试更改类名,也许类操作系统上的类文件名区分大小写。

相关问题