Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用外部URL时访问内部URL_Php_Vnc Server - Fatal编程技术网

Php 使用外部URL时访问内部URL

Php 使用外部URL时访问内部URL,php,vnc-server,Php,Vnc Server,我正在开发一个界面,以显示哪些VNC web站点处于活动状态,并提供指向该web界面的链接 示例:站1位于端口5800上 如果我在我的本地网络上运行它,它工作得很好,因为所有的计算机都在本地网络上,我需要的是一种从外部IP进行工作的方法 是否仍然可以将会话重定向到一个框架或使其保持本地的东西 下面是我做的一个测试,它在本地网络上运行良好,远程测试只能起到一半的作用: $station1=@fsockopen(“192.168.1.1”,5800) if($station1){ 回声“; 回声“

我正在开发一个界面,以显示哪些VNC web站点处于活动状态,并提供指向该web界面的链接

示例:站1位于端口5800上

如果我在我的本地网络上运行它,它工作得很好,因为所有的计算机都在本地网络上,我需要的是一种从外部IP进行工作的方法

是否仍然可以将会话重定向到一个框架或使其保持本地的东西

下面是我做的一个测试,它在本地网络上运行良好,远程测试只能起到一半的作用:


$station1=@fsockopen(“192.168.1.1”,5800)

if($station1){
回声“;
回声“
”; fclose(车站1); }否则{ echo“站1处于非活动状态。”; 回声“
”; }

“fsockopen”在“服务器端”执行后返回TRUE,但在“客户端”(如浏览器)执行后,单击结果链接失败

有办法解决这个问题吗?有什么想法吗?

尝试使用此代码进行测试,(您会收到一个错误,告诉您出了什么问题): 此外,使用WAN ip连接到internet的网络内部访问您的WAN ip也不能通过普通路由器完成。您必须确定其本地网络或WAN网络,然后相应地更改ip(加上将所有WAN流量路由到服务器)


您或许可以通过web调用并获取外部IP地址,然后使用该地址。。。但是,只有当您查询的是Web服务器时,这才有效。如果不是的话,它会变得棘手。。。根据路线的不同,它可能会变得非常棘手。。。因此,如果每个内部IP都有一个不同的外部IP,那么它可以正常工作,但如果没有,那么您必须控制请求的路由方式

所以说你有

192.168.1.1

192.168.1.2

192.168.1.3

它们连接到您的家庭无线路由器,该路由器连接到互联网。。。。如果说你的有线调制解调器,那么所有3个都将有相同的IP到你网络之外的人,事实上,你的路由器很可能不允许人们回拨到你的网络。您必须将路由器配置为将请求转发到各个端口,以转到特定的内部IP地址

因此,在不知道路由是如何设置的情况下,回答这个问题是非常困难的

您必须在路由器中进行设置,并让VNC在每台机器的不同端口上运行。最好将端口号映射到内部IP,例如:

 Port 5801 -> 192.168.1.1
 Port 5802 -> 192.168.1.2
 Port 5803 -> 192.168.1.3
 etc.
如果您随后从外部调用该页面(例如使用动态IP),则必须从PHP中找到您的动态IP(例如,请参阅如何做到这一点),然后链接到每个端口

<a href="123.123.123.123:5801">Station 1 active.</a>
<a href="123.123.123.123:5802">Station 2 active.</a>
<a href="123.123.123.123:5803">Station 3 active.</a>


如果不将VNC映射到不同的端口,就无法做到这一点。对于外部IP,只存在一个IP地址。LAN的内部IP毫无意义,外部呼叫方无法访问。

您使用的是什么web服务器?如果是apache,您是否启用了mod_代理?您不能使用具有公共IP的本地站点作为应用程序的“服务器”吗?$station1将始终返回true,如果您抑制错误@mway-感谢您在正确方向上的提示,我将查看我的apache服务器的mod_代理。非常感谢Pekka,这是解决这个问题的方法。
 Port 5801 -> 192.168.1.1
 Port 5802 -> 192.168.1.2
 Port 5803 -> 192.168.1.3
 etc.
<a href="123.123.123.123:5801">Station 1 active.</a>
<a href="123.123.123.123:5802">Station 2 active.</a>
<a href="123.123.123.123:5803">Station 3 active.</a>