题 file_get_contents - 无法打开流:HTTP请求失败!找不到HTTP / 1.1 404


在将我的网站迁移到新域后,我遇到了一些奇怪的问题,即file_get_contents。我必须设置一个新域和IP地址(使用Plesk)才能获得新的ssl证书。现在我的file_get_contents在同一个域上调用脚本给了我这个:

无法打开流:HTTP请求失败!找不到HTTP / 1.1 404

如果我在另一台服务器上使用file_get_contents调用相同的url它工作正常,如果我从服务器调用www.google.com失败,那么它似乎只是在同一个服务器上调用url!

我觉得它可能与在一台服务器上有两个不同的ssl证书的两个IP有关,当我从服务器获取服务器的file_get_contents /(索引页面)时我得到了plesk'这是一个新的域'页面所以当它从自己的服务器调用它时,它就像查找正确的虚拟主机一样。

澄清(希望!):

在托管域的服务器上:

file_get_contents('https://mydomain.com?limit=4&offset=0&s_date=2012-02-05&e_date=2012-03-13&order=release_date&dir=desc&cid=12');

给出“无法打开流:HTTP请求失败!找不到HTTP / 1.1 404”

file_get_contents('http://www.google.com');

工作正常

在另一台服务器上

file_get_contents('https://mydomain.com?limit=4&offset=0&s_date=2012-02-05&e_date=2012-03-13&order=release_date&dir=desc&cid=12');

工作正常。

我试过关闭ssl,我仍然遇到同样的问题。


13
2018-03-05 21:18


起源


发布完整代码将帮助您更好地获得正确答案 - Zaffar Saffee
N e w B e e是对的,我不确定我理解这一点。 - Jack
你能测试吗? echo gethostbyname('mydomain.com'); 在你的脚本?并向我们​​展示您的虚拟主机conf。 - soju
您可以在托管域的服务器上发出ping或某种DNS解析吗? 404表示无法找到该文件,它与SSL无关。此外,您是否可以访问网络服务器的访问日志?也许你会在那里找到一些线索。此外,如果您尝试从自己的浏览器访问URL,结果是什么? - Yaniro
我在Windows legaccy Windows服务器上遇到同样的问题 - Jonathan


答案:


当我在家里使用一台小型测试服务器时,我也遇到了这个问题。域名将解析为您的外部IP地址,并发送请求。但由于请求来自您的网络,路由器不会将其识别为正常请求。它可能有一个用于配置它的Web界面,并尝试从其自己的管理系统返回一个页面,然后在您指定的路径中找不到该页面。

在那种情况下,我正在使用Windows PC,我可以通过添加我正在测试的域来解决它 hosts 文件,指定127.0.0.1作为IP地址(或服务器的IP地址,如果它是同一网络中的另一台机器)。在Linux中,我认为应该有类似的解决方案。

问题不是PHP或您的服务器,而是您的路由器。


5
2018-03-06 08:10



这似乎是问题(在我的相同情况下),运行echo gethostbyname('mydomain.com');从我的电脑ping并给出了2个不同的IP地址 - Jonathan


大多数托管提供现在阻止 furl_open 允许你使用的参数 file_get_contents() 从外部URL加载数据。

您可以使用 卷曲  或者a PHP 客户端库就像 喝酒失控 


4
2018-03-06 08:20





尝试这样做:

file_get_contents('https://mydomain.com?'.urlencode('limit=4&offset=0&s_date=2012-02-05&e_date=2012-03-13&order=release_date&dir=desc&cid=12'));

0
2018-04-03 14:20