2013-04-24 125 views
0

我很難過。我有一個login.php頁面,其中包含我的index.php頁面頂部包含的SQL登錄信息(主機名,數據庫,用戶名,密碼)(使用require_once)。登錄信息位於條件語句中,用於確定我是在遠程服務器還是在本地測試服務器上,並提供正確的登錄信息。現在,當它直接進入遠程服務器的index.php頁面時,它變得很奇怪,不起作用(因爲它不會與數據庫建立連接),但它在測試服務器上工作,如果我首先訪問遠程服務器上的login.php站點(它不迴應任何內容),然後訪問遠程服務器上的index.php頁面,則會起作用。我禁用了緩存。爲什麼會發生這種情況,我該如何解決?首先訪問http://distantfuturejosh.com/playground/pendingaxioms(它不會工作),然後訪問http://distantfuturejosh.com/playground/pendingaxioms/login.php(提供一個空白頁),然後返回http://distantfuturejosh.com/playground/pendingaxioms(它會工作,你會看到圖像出現)。SQL登錄僅在訪問登錄頁面後纔有效

這裏是的login.php頁面:

<?php 

    $requesturi = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
    $pos = strpos($requesturi, "www.distantfuturejosh.com"); 

    if ($pos === 0) 
    { 
     $db_hostname = "xxxxxxxx"; 
     $db_database = "xxxxxxxx"; 
     $db_username = "xxxxxxxx"; 
     $db_password = "xxxxxxxx"; 
    } 
    else 
    { 
     $db_hostname = "localhost"; 
     $db_database = "xxxxxxxx"; 
     $db_username = "root"; 
     $db_password = "root"; 
    } 

?> 
+0

首頁,當我第一次訪問對我來說工作正常,但這可能是持久狀態。試着迴應'$ requesturi'和'$ pos'的值,看看它們是否符合你的期望。 – jpmc26 2013-04-24 06:02:18

+0

請注意,每次運行php腳本時都必須建立一個新的數據庫連接。 – 2013-04-24 07:02:58

回答

1

嘗試使用

session_start(); 

你的文件的開頭。

+0

我在登錄文件的開頭添加了'session_start();'當然是<?php'後面,但它的行爲和以前完全一樣。我也嘗試將它添加到索引頁面(在'require_once'login.php';'之前),但沒有觀察到任何變化。 – wetjosh 2013-04-24 05:58:47

+0

只需在$ pos = strpos($ requesturi,「www.distantfuturejosh.com」)後打印$ pos的值; – 2013-04-24 06:04:54

+0

你知道嗎,我之前試過,我用echo代替它,它確實修復了它。爲什麼在變量可以在條件語句中使用之前,必須先回顯變量?現在我的頁面頂部有一個醜陋的「0」。 – wetjosh 2013-04-24 06:33:55

0

嘗試使用if ($pos === false)代替if ($pos === 0)這樣

<?php 

    $requesturi = $_SERVER['HTTP_HOST']; 
    $pos = strpos($requesturi, "distantfuturejosh"); 

    if ($pos === false) 
    { //local 
     $db_hostname = "localhost"; 
     $db_database = "xxxxxxxx"; 
     $db_username = "root"; 
     $db_password = "root"; 
    } 
    else 
    { //remote 
     $db_hostname = "xxxxxxxx"; 
     $db_database = "xxxxxxxx"; 
     $db_username = "xxxxxxxx"; 
     $db_password = "xxxxxxxx"; 
    } 

?> 

我想你檢查用戶登錄和包括login.php在其他PHP頁面與include /subfolder/login.php;

+0

我試過了,遠程工作,本地沒有。 – wetjosh 2013-04-24 07:20:45

+0

你的意思是,當你在本地運行時,它不會進入'else'語句嗎?或者它到達那裏,但無法連接到你的本地主機數據庫? – Amir 2013-04-24 07:25:04

+0

當我訪問http:// localhost/pendingaxioms頁面但我認爲,因爲它沒有連接到數據庫,因爲憑據是錯誤的。我的意思是如果我刪除if語句,只使用本地服務器的證書,它本地正常工作,但我試圖以避免不得不來回更改證書,而且,如果我先訪問login.php頁面,它會起作用嗎?我還想知道爲什麼... – wetjosh 2013-04-24 15:49:28