2013-01-22 96 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',反之亦然。嘗試更改類名,也許類操作系統上的類文件名區分大小寫。

相關問題