2013-11-25 86 views
0

我有一臺運行在本地機器上的wamp服務器,它暴露在外部世界。我有幾個PHP腳本允許android應用程序訪問與WAMP服務器運行在同一臺機器上的mySQL數據庫中包含的信息。當從我的本地網絡進行測試時,一切正常。但是,當我嘗試從本地網絡外部運行php腳本時,似乎連接到mySQL時出現錯誤。php連接到本地主機上的mysql,遠程請求

connect.php

<?php 
header('Access-Control-Allow-Origin: *'); 

/*** mysql hostname ***/ 
$hostname = '127.0.0.1'; 

/*** mysql username ***/ 
$username = 'chaosjr_user'; 

/*** mysql password ***/ 
$password = 'pass'; 

try { 
    $dbh = new PDO("mysql:host=$hostname;dbname=chaos_jr", $username, $password); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 
catch(PDOException $e) 
    { 
    echo $e->getMessage(); 
    } 
?> 

我幾乎可以肯定它是與我從外界引用本地主機的事實,但是當我更換127.0.0.1對IP地址我內部網絡或外部IP地址,它無法在任何地方工作。有什麼建議麼?

編輯: 只是爲了澄清,我可以從外部(我有一個靜態的IP地址)我的PHP腳本,並得到他們的迴應,只要該特定的腳本不必查詢MySQL。例如,我可以連接到XXX.XXX.XXX.XXX/myPHPscript.php就好,一切都很好。但是應該填充SQL數據的菜單是空的。

+0

你確定你使用的是正確的IP地址? –

回答

0

你是正確的 - 地址127.0.0.1是您的本地IP地址,而不是一個你將與來自外部世界的連接。

如果你有一個靜態的IP地址,你需要使用它。如果您沒有固定的IP地址,或者您的防火牆阻塞了您正在使用的端口,則可能會發現一些棘手的問題。

0

您應該仍然使用127.0.0.1連接到數據庫,因爲據我瞭解,PHP腳本和數據庫在同一臺服務器上運行。它不關心你的腳本是否從外部調用,如果腳本和數據庫在同一臺服務器上,則127.0.0.1是正確的地址。

0

如果你想你的數據庫可以從您的網絡之外(請注意,您的機器將需要在任何時候,以通電數據庫可用),您將需要配置一個這樣稱爲端口轉發到您的路由器到您的內部地址。然後在您的應用程序中,確保使用您的外部IP地址,然後路由器會將請求重新路由到您的機器。

另外請注意,您的MySQL將需要接受外部連接,默認情況下它會綁定到您的本地主機,並且不會監聽遠程連接。這是因爲localhost綁定到您的操作系統的特殊loopback interface,並且實際上並未綁定到計算機中的網卡。您需要將MySQL綁定到綁定到網卡的IP地址,以便與外部世界進行通信。

換句話說,你想要什麼是可能的,但需要許多不同的步驟來工作,主要是網絡/接入相關的,以及如何配置這取決於你的設置。所以沒有現成的答案,這需要一些試驗和錯誤。但基本上歸結爲這些步驟:

  1. 在您的路由器上爲您的MySQL端口(默認:tcp 3306)配置一個端口轉發。
  2. 確保你的MySQL服務器綁定到你的「外部」(在大多數局域網中這是一個192.168.0.x地址)IP地址,所以不能到localhost或127.0.0.1(這是我的設置。 ini配置文件)。
  3. 確保您的應用嘗試使用您的遠程 IP地址(您從ISP獲得的地址,而不是您的127.0.0.1或192.168.0.x地址!

對於最後一步,您的ISP爲您提供靜態IP地址也很重要。許多ISP使用DHCP地址,這意味着每次您的調制解調器重置時,您的IP地址在重新啓動時可能會有所不同。你可以通過你的ISP來驗證。請記住,內部託管東西通常並不理想,對微型項目或啓動項目來說沒問題,但如果情況變得嚴重,請考慮非現場託管。

+0

因此,即使調用php myphpscript.php和connect.php在同一臺機器上,我需要在connect.php中使用外部IP地址? – AndyS

+0

如果您的應用只是直接調用您的PHP腳本而不是您的數據庫,那麼您需要將TCP端口80轉發到您的機器而不是3306.然後,您可以繼續使用本地主機連接,因爲沒有來自外部的直接連接需要。 – Oldskool

0

在你的PHP代碼中,它應該保持爲127.0.0.1,因爲PHP和MySQL運行在同一臺服務器上,這是你的本地IP地址。但聯繫起來要困難得多。

好的,所以您的本地主機正在您的計算機上運行,​​因此只能通過聯繫同一臺計算機上的127.0.0.1來訪問。

如果您嘗試從其他設備聯繫它,則必須查找要聯繫的設備的專用IP地址。在大多數情況下,這可能與192.168.x.x類似。

現在接觸來自外部網絡就更難了這臺電腦,因爲你將連接到路由器第一(通過其公網IP),以及路由器應該轉發您在PC某個端口(可能是80端口)上。您必須確保您配置了路由器,以便它可以轉發到網絡中正確的計算機以及該計算機上正確的端口。

但是等等,還有更多!大多數ISP(互聯網服務提供商)出於安全原因每隔幾天就更改一次公共IP地址,這使得維護對您試圖訪問的計算機的正確引用變得更加困難。

您可以通過訪問http://www.whatismyip.com找到你的廣域網IP(公網IP),並通過在Windows運行在殼「的ifconfig」,或「IPCONFIG」檢查你的本地IP命令提示符

+0

因此即使connect.php與SQL服務器位於同一臺計算機上,它也需要使用WAN IP地址? – AndyS

+0

不,你的php文件應該使用127.0.0.1。我剛看到你的編輯。您應該嘗試檢查您的PHP代碼並查找連接到msyql的錯誤 – dumazy

相關問題