2013-11-25 84 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

相关问题