2011-11-17 18 views
0

我在IIS上的WebMatrix中開發了一個php項目。在這個項目中,我無意中初始化了兩次相同的「會話變量」。當從IIS轉移到Apache服務器時,PHP項目中的錯誤

 Example: File - a.php 

    <?php 
    $_Session['one']; 
    include 'b.php'; 
    ........... 
    ........... 
    ........... 
    ........... 
    ?> 

    Example: File - b.php 

    <?php 
    $_Session['one']; 
    ........... 
    ........... 
    ........... 
    ........... 
    ?> 

當我運行從WebMatrix中(IIS服務器)沒有顯示這個錯誤這個項目,但是當我跑在Apache這個項目是顯示這個錯誤,我糾正了我的缺陷。

Warning on Apache: 
    Notice: A session had already been started - ignoring session_start() in D:/path/. 

我的問題是,爲什麼這個錯誤沒有顯示出來?它與IIS服務器或WebMatrix有關嗎?我總是需要知道代碼中的錯誤或警告,以便我可以擺脫它們,並且代碼的效率得以持續,請給我建議一些理想的php開發工具,這些工具可以在我的代碼中發現甚至微小的錯誤。

+0

請將錯誤消息添加到您的問題中,以清楚您說的是哪個錯誤。否則很難發出指示。 – hakre

+0

對不起編輯,實際上問題是與會議功能,而不是包含功能...完整的細節上面張貼。 – user1043972

+0

在這兩個文件中,'a.php'和'b.php'都是在執行'session_start()'? –

回答

0

確保顯示錯誤,然後嘗試在應用程序開始時一直向上調整error_report。

ini_set('display_errors', 1); 
error_reporting(E_ALL); 


此外,要知道,Windows是區分大小寫。你可以說include 'A.php'include 'a.php'它不會在意。但是,如果將它放在基於Linux的服務器上(區分大小寫),它可能無法找到文件A.php,如果它實際上是a.php

0

這可能會導致錯誤,因爲第一臺服務器運行的是PHP 4,第二臺服務器是PHP 5.雙重包含包含函數的文件將在這些版本中得到不同的結果。請參閱此鏈接中示例6之前的文本:http://php.net/manual/en/function.include.php

編輯:我相信在您編輯的帖子中生成的錯誤消息表明某種不同的性質。

對於要確保只包含一次的文件,請使用include_once()http://www.php.net/manual/en/function.include-once.php

在某些情況下,您可能合法地想要從文件中刪除兩次include()。但是由於這些情況很少,所以最好使用include_once()

0
Warning on Apache: 
    Notice: A session had already been started - ignoring session_start() in D:/path/. 

您無法再次啓動已經啓動的會話。

當你包含b.php時,你需要在a.php啓動1個會話,它可以使用啓動會話。

它的警告和警告意味着它不好,但PHP可以解決這個錯誤,並繼續工作。

它的所有關於錯誤報告級別。

0

很難判斷錯誤是否在IIS上沒有發生。僅僅因爲它沒有顯示或記錄,並不意味着它沒有發生。請比較兩個系統之間的配置error reportingphp.ini

您應該在配置中比較的另一件事是,如果session auto-start已在舊系統或新系統上啓用或未啓用。這可能會觸發你的錯誤,但這只是一個猜測。正如所寫的,這個錯誤可能已經在舊系統上了,但卻沒有被注意到。

+0

是會話auto_start已啓用兩次 – user1043972

+0

當您已經使用會話自動啓動時不要調用'session_start' 。這是你的錯誤。從代碼中刪除它,你應該沒問題。 – hakre

+0

當我在Webmatrix上運行a.php時,沒有警告顯示,反之亦然Wamp – user1043972

相關問題