繁体   English   中英

PHP连接到本地主机上的MySQL,从远程请求

[英]php connecting to mysql on localhost, request from remote

我在暴露于外界的本地计算机上运行着一个垃圾服务器。 我有几个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();
    }
?>

我几乎可以肯定这与我从外部引用本地主机有关,但是当我将127.0.0.1替换为内部网络或外部IP地址上的IP地址时,它将无法在任何地方使用。 有什么建议么?

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

您是正确的-地址127.0.0.1是您的本地IP地址,而不是您与外界连接的地址。

如果您有一个静态IP地址,则需要使用该地址。 如果您没有固定的IP地址,或者您的防火墙阻止了您正在使用的端口,则可能会感到棘手。

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

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

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

换句话说,您想要的是可能的,但是需要执行许多不同的步骤,主要是与网络/访问相关的,以及如何配置取决于您的设置。 因此,对此没有现成的答案,这将需要反复试验。 但基本上可以归结为以下步骤:

  1. 在路由器上为MySQL端口配置端口转发(默认值:tcp 3306)。
  2. 确保您的MySQL服务器绑定到您的“外部”(在大多数LAN上是192.168.0.x地址)IP地址,而不是本地主机或127.0.0.1(这是my.ini配置文件中的设置) )。
  3. 确保您的应用尝试在您的远程 IP地址(从ISP获得的数据库,而不是您的127.0.0.1或192.168.0.x地址!)上尝试数据库。

对于最后一步,ISP提供给您静态IP地址也很重要。 许多ISP使用DHCP地址,这意味着每次调制解调器重置时,您的IP地址在重新启动时都可能不同。 您可以通过ISP进行验证。 永远记住,内部托管通常不是理想的选择,对于微型项目或启动项目来说还可以,但是如果情况严重,请考虑使用异地托管。

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

好的,您的本地主机正在您的计算机上运行,​​因此可以通过仅从同一台计算机联系127.0.0.1来实现。

如果尝试从另一台设备联系它,则必须查找要联系的设备的专用IP地址。 在大多数情况下,这可能类似于192.168.xx。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM