2012-03-05 179 views
12

将网站移动到新域后,我遇到了file_get_contents的一些奇怪问题。我必须建立一个新的域和IP地址(使用Plesk)来获得一个新的SSL证书。现在我的file_get_contents在同一个域上调用脚本给我这个:file_get_contents - 无法打开流:HTTP请求失败! HTTP/1.1 404 Not Found

未能打开流:HTTP请求失败! HTTP/1.1 404未找到

如果我把使用它工作正常,另一台服务器上的file_get_contents相同的URL,如果我叫www.google.com从服务器这就是失败的作品,所以它只是似乎是如果我在同一台服务器上调用一个url!

我有一种感觉,它可能有两个IP在一台服务器上有两个不同的SSL证书,当我从服务器的服务器的file_get_contents /(索引页)我得到的Plesk'这是一个新域名“页面,所以它像apache一样不会在从它自己的服务器调用时查找正确的虚拟主机。

为了澄清(希望!):

在托管域名服务器:

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,我仍然遇到同样的问题。

+2

发布完整的代码将帮助您更好地得到正确的答案 – 2012-03-05 21:20:27

+0

ňEW乙EE是正确的,我我不知道我明白这一点。 – Jack 2012-03-05 21:34:21

+0

你可以在脚本中测试echo gethostbyname('mydomain.com');'吗?并向我们​​展示您的虚拟主机conf。 – soju 2012-03-06 08:00:12

回答

5

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

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

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

+0

这似乎是这个问题(在我的情况相同),运行echo gethostbyname('mydomain.com');并从我的电脑ping了2个不同的IP地址 – Jonathan 2012-03-22 23:48:07

4

大多数主机提供了现在阻止furl_open参数,它允许您使用file_get_contents()从外部URL加载数据。

可以使用CURLPHP客户端库像Guzzle

0

尝试这样做:

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')); 
相关问题