php连接到localhost上的mysql,来自远程的请求

时间:2013-11-25 22:21:26

标签: javascript php android

我的本​​地计算机上运行的wamp服务器暴露给外界。我有几个PHP脚本,允许Android应用程序访问与WAMP服务器在同一台机器上运行的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();
    }
?>

我几乎可以肯定它与我从外部世界引用localhost的事实有关,但是当我用内部网络上的IP地址或外部IP地址替换127.0.0.1时,它不会从任何地方工作。有什么建议吗?

编辑: 只是为了澄清,我可以从外部获取我的PHP脚本(我有一个静态IP地址)并从它们获得响应,只要该特定脚本不必查询MySQL。例如,我可以连接到XXX.XXX.XXX.XXX/myPHPscript.php就好了,一切看起来都不错。但是应该填充SQL数据的菜单是空的。

4 个答案:

答案 0 :(得分:0)

您是对的 - 地址127.0.0.1是您的本地IP地址,而不是您与外界联系的地址。

如果您有静态IP地址,则需要使用它。如果您没有固定的IP地址,或者您的防火墙阻止了您正在使用的端口,您可能会发现棘手的事情。

答案 1 :(得分:0)

您应该仍然使用127.0.0.1连接到数据库,因为据我所知,PHP脚本和数据库在同一服务器上运行。它不关心你的脚本是否从外部调用,如果脚本和数据库在同一服务器上,127.0.0.1是正确的地址。

答案 2 :(得分:0)

如果您确实希望从网络外部获取数据库(请注意,您的计算机需要始终打开电源才能使数据库可用),您需要配置一个所谓的数据库将路由器上的端口转发到您的内部地址。然后在您的应用程序中,确保使用您的外部IP地址,然后您的路由器会将请求重新路由到您的计算机。

另请注意,您的MySQL需要接受外部连接,默认情况下它会绑定到您的localhost并且不会侦听远程连接。这是因为localhost绑定到您操作系统的特殊loopback interface,并且实际上并未绑定到计算机中的网卡。您需要将MySQL绑定到绑定到网卡的IP地址,以便它可以与外界通信。

换句话说,你想要的是什么,但需要采取许多不同的步骤,主要是网络/访问相关以及如何配置这取决于你的设置。因此,没有现成的答案,它将需要一些试验和错误。但基本上归结为这些步骤:

  1. 在路由器上为您的MySQL端口配置一个前向端口(默认:tcp 3306)。
  2. 确保您的MySQL服务器绑定到您的“外部”(在大多数LAN中这是一个192.168.0.x地址)的IP地址,因此不是本地主机或127.0.0.1(这是我的设置)。 ini配置文件)。
  3. 确保您的应用尝试使用远程 IP地址(您从ISP获得的IP地址,而不是127.0.0.1或192.168.0.x地址!)。
  4. 最后一步,您的ISP为您提供静态IP地址也很重要。许多ISP使用DHCP地址,这意味着每次调制解调器重置时,您的IP地址在再次启动时可能会有所不同。您可以通过ISP验证这一点。永远记住,内部托管的东西通常不理想,微型项目或启动项目都可以,但如果事情变得严重,可以考虑异地托管。

答案 3 :(得分:0)

在你的PHP代码中它应该保持127.0.0.1,因为PHP和MySQL在同一台服务器上运行,这是你在该IP的本地主机。但是联系它要困难得多。

好的,所以您的本地主机正在您的计算机上正常运行,因此只能通过同一台计算机上的127.0.0.1联系到这一点。

如果您尝试从其他设备与其联系,则必须查找要联系的设备的私有IP地址。在大多数情况下,这可能类似于192.168.x.x.

现在从网络外部联系此计算机甚至更难,因为您将首先连接到您的路由器(通过其公共IP),并且该路由器应该将您转发到某个端口(可能是端口80)上的PC。您必须确保配置了路由器,以便它可以转发到网络中正确的计算机以及该计算机上的正确端口。

但等等,还有更多!出于安全原因,大多数ISP(互联网服务提供商)每隔几天更改一次您的公共IP地址,这使得维护对您尝试访问的此计算机的正确引用更加困难。

您可以通过访问http://www.whatismyip.com找到您的WAN IP(公共IP),并通过在shell中执行“ifconfig”或在Windows命令提示符中执行“ipconfig”来检查本地IP