2010-07-31 56 views
0

我有這個問題與我的代碼,頁面重定向,並不會停止..瀏覽器停止它,因爲它的重定向所有的時間,我有一個global.php文件,其中包括在所有的PHP頁面,所以我的推杆此代碼爲會話和它去像我所說的包括在的login.phpphp eregi()問題

if (!session_is_registered('username')) { 
    if(!eregi('login.php', $PHP_SELF)) header('Location: login.php'); 
} 

而且global.php,但是當我開始它在Web服務器上我的網站,它做我以前說過的,但在我的基於服務器上的計算機上,它工作正常,所以請快速幫我快速

和我的英語抱歉..

+1

posix正則表達式「模塊」已棄用。 http://docs.php.net/eregi說:'這個函數從PHP 5.3.0開始已經被拒絕了。依靠這個特性是非常令人沮喪的。「 - 使用pcre來代替,參見http://docs.php.net/preg_match – VolkerK 2010-07-31 08:42:14

回答

2

試試這個:

session_start(); 
if (!isset($_SESSION['username']) && stripos($_SERVER['PHP_SELF'], 'login.php') === false) { 
    header('Location: login.php'); 
} 

兩個session_is_registered()eregi()被廢棄的函數,不應該被使用。另外,正則表達式對於你正在做的事情無論如何都是矯枉過正的。

+2

由於OP使用'eregi',可能'stripos'應該用來代替'strpos'。 – kennytm 2010-07-31 08:49:10

+0

@KennyTM:好點。現在更新。 – 2010-07-31 09:01:37

+0

非常感謝隊友..這工作得很好 – Sayed 2010-07-31 09:18:07

0

嘗試:

if (!isset($_SESSION('username'))) { 
    if(FALSE === strpos($_SERVER['PHP_SELF'], 'login.php')) { 
     header('Location: login.php'); 
     exit(); 
    } 
} 

幾點建議:

  • 請確保您有session_start()放在你的腳本
  • 使用頂部isset($_SESSION.......
  • 使用strpos而不是廢棄的eregi
  • 不要使用過時session_is_registered
  • 使用exit/die頭之後重定向
  • 這是$_SERVER['PHP_SELF']$PHP_SELF
  • 使用錯誤處理,把這些線在你的腳本的頂部:

    • ini_set('display_errors', true);
    • error_reporting(E_ALL);
+0

'display_errors'不應該被硬編碼爲true。使用'php.ini'進行設置,以便在生產環境和開發環境之間移動時輕鬆更改。 – 2010-07-31 08:34:26

+0

@Daniel EgebergL它將在那裏測試他當前的腳本:) – Sarfraz 2010-07-31 08:35:41