Php 使用<;时如何从远程界面查看本地网络的图像;img src=”等&引用/>;?

Php 使用<;时如何从远程界面查看本地网络的图像;img src=”等&引用/>;?,php,html,networking,browser,Php,Html,Networking,Browser,我有以下网络设置: ___________> [Remote IP] * can access anything from 192.168.1.2. | * it has a public static ip to access as 8x.8x.2xx.1x | ^ [WAN] | [Router] | |

我有以下网络设置:

         ___________> [Remote IP] * can access anything from 192.168.1.2.
        |                         * it has a public static ip to access as 8x.8x.2xx.1x
        |
        ^
      [WAN]
        |
     [Router]
        |
        |---[LAN]
        |
   [HTTP WEB SERVER]@192.168.1.2
        |
        |
  --------------------------------------------------- (LAN)
    |             |               |
  [PC1]         [PC2]           [PC3]
  |             |               |
  192.168.1.3   192.168.1.4     192.168.1.5
案例示例:

[确定]:PC1、PC2的图像格式为192.168.1.3:7007/picture1.jpeg和192.168.1.4:7007/picture1.jpeg

[确定]:PC3如果我从192.168.1.2打开站点,我可以看到图1和图2。因为我的HTML代码是:

<img src="http://192.168.1.3:7007/picture1.jpeg?1323809545000?1323809546000?1323809547000" class="monitor_realtime" />

<img src="http://192.168.1.4:7007/picture1.jpeg?1323809545000?1323809546000?1323809547000" class="monitor_realtime" />

[不正常]:但是如果我现在从公共位置远程打开页面,我就看不到图片


当我远程打开它时,如何才能看到图片(本地浏览工作)?

192.168.1.4的上下文因您是在Web服务器(本地)网络还是远程计算机上而不同。远程计算机将在其自己的网络(而不是您的网络)上查找该图像您需要使用公共IP地址或其他远程公开的地址才能使图片正常工作。或者您可以使用某种奇怪的服务,将图片从本地网络中提取出来,并将其缓存到web服务器或其他什么东西上

您是说PC1和PC2都有一个运行在端口7007上的Web服务器吗?如果是这样,路由器大概不会将请求转发给这些Web服务器。如果您计划访问局域网上承载的内容,那么路由器必须知道如何将这些请求转发到相关服务器


编辑:根据您对m4tt1mus答案的评论中提供的上下文,您需要选择第二个选项。您可以将路由器设置为将端口81转发到PC1的端口7007,将端口82转发到PC2的端口7007。

我遇到类似问题,但无法更改路由器配置。所以我为这种情况想出了另一种解决办法。我没有设置从一个网络到另一个网络的路由,而是在不改变位置的情况下改变了图像的服务方式。描述了我的解决方案。 这些代码片段是针对我的堆栈(Asp.NET/Nancy/Razor)的,但其思想与技术无关。 简而言之,您可以将图像“动态”转换为base64字符串,并从公共服务器提供嵌入页面中的图像。它使用以下代码(C#)非常适合我:

然后将转换后的图像作为@Model属性之一(Base64Image)传递给视图:



首先,如何远程打开网站?你没有公共地址或动态主机名吗?您的
引用在html页面源代码中是什么样子的?我认为他的web服务器已经公开,但计算机没有。他正在使用本地ip地址加载图像。至少我是这样读的。继续搜索类似的主题。(先搜索!但如果你想把你的问题移到那个里,并可能在那个里得到回答,那么就标记你的问题以引起主持人的注意。)PC1、PC2、PC3、服务器都有自己的:7007/picture1.jpeg。目的是远程查看所有图片。(它总是在本地工作)。要么您需要在服务器上托管所有内容,要么您需要将路由器设置为将请求转发到LAN上的每个不同服务器。您可能会通过为每台服务器使用不同的端口来实现这一点。请记住,您仍然需要使用URL的外部地址,以便可以在外部查看它们,这可能会停止其内部工作(由于环回问题)。+1并勾选答案。你解释的好处是不改变嵌入式设备端口,因为在那里我不能做任何事情。另一方面,它解决了我的问题,因为在路由器中,我实际上可以做端口映射。非常感谢。这个奇怪的服务可能是Apache和mod_proxy;将筛选的请求从公开可用的Web服务器转发到两个内部映像服务器。显然,监听不同的端口,或利用可识别的图像路径,以及
而不是硬编码的内部IP URL。这不是HTML或浏览器错误吗?他们在
中错过了它?PC1,PC2是我的IPCAmeras,它每3秒发送一次实时预览。(它们是嵌入式设备,我无法修改端口,就像注入一样固定)。@Google不,这不是HTML或img标记中的错误。它的设计从未允许您查看无法访问的内容。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。-@谢谢你的课。我根据你的建议更正了我的答案。
private string convertToBase64(string imageURL)
{
    var request = WebRequest.Create(imageURL);

    using (var response = request.GetResponse())
    {
        using (var stream = response.GetResponseStream())
        {
            using (Image image = Image.FromStream(stream))
            {
                using (MemoryStream m = new MemoryStream())
                {
                    image.Save(m, image.RawFormat);
                    byte[] imageBytes = m.ToArray();
                    string base64String = Convert.ToBase64String(imageBytes);
                    return string.Format("data:image/png;base64,{0}", base64String);
                }
            }
        }
    }
}
<img id="photo" src="@Model.Base64Image" title="@Model.Description" />