use*_*758 16 php file-get-contents
在将我的网站移动到新域后,我遇到了一些奇怪的问题,即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');
Run Code Online (Sandbox Code Playgroud)
给出"无法打开流:HTTP请求失败!找不到HTTP/1.1 404"
file_get_contents('http://www.google.com');
Run Code Online (Sandbox Code Playgroud)
工作正常
在另一台服务器上
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');
Run Code Online (Sandbox Code Playgroud)
工作良好.
我试过关闭ssl,我仍然遇到同样的问题.
当我在家里使用一台小型测试服务器时,我也遇到过这个问题.域名将解析为您的外部IP地址,并发送请求.但由于请求来自您的网络,路由器不会将其识别为正常请求.它可能有一个用于配置它的Web界面,并尝试从其自己的管理系统返回一个页面,然后在您指定的路径中找不到该页面.
在那种情况下,我在Windows PC上工作,我可以通过将我正在测试的域添加到我的hosts文件中来解决它,指定127.0.0.1作为IP地址(或者服务器的IP地址,如果是同一网络内的另一台机器).在Linux中,我认为应该有类似的解决方案.
问题不是PHP或您的服务器,而是您的路由器.
如果您只需要在找不到 URL 时处理警告(就像我所做的那样),您可以这样做将警告转换为异常:
set_error_handler(
function ($err_severity, $err_msg, $err_file, $err_line, array $err_context) {
// do not throw an exception if the @-operator is used (suppress)
if (error_reporting() === 0) return false;
throw new ErrorException( $err_msg, 0, $err_severity, $err_file, $err_line );
},
E_WARNING
);
try {
$contents = file_get_contents($your_url);
} catch (Exception $e) {
echo $e->getMessage();
}
restore_error_handler();
Run Code Online (Sandbox Code Playgroud)
基于此线程/问题的解决方案。
| 归档时间: |
|
| 查看次数: |
73014 次 |
| 最近记录: |