我有一个PHP脚本,该脚本使用cURL访问也位于服务器(已安装的电子邮件营销程序)上的文件.我编写了一个快速脚本来测试我的cURL安装,当指向我自己的服务器上的文件时,该脚本失败.脚本是:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.mysite.com/test.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
if($contents) {
echo $contents;
} else {
$err = curl_error($ch);
echo $err;
}
curl_close($ch);
当我运行此代码时,它返回错误:无法连接到主机
如果我将网址更改为http://www.google.com或任何其他网站,则可以正常工作.另外,当我尝试通过另一台服务器上的cURL打开特定页面时,它的工作方式应该像应该的那样.我从这些测试中得出的假设是,已经安装了PHP cURL,并且可以(某种程度上)正常工作,并且问题不在试图打开的页面中.
我认为这可能是端口问题,因此我尝试指定具有相同结果的端口(未连接到主机).我尝试了curl_setopt和http://www.mysite.com:80/来指定我知道要打开的端口.
这使我相信问题出在我的apache安装中,但是我不是apache专家,而且我整天都在与Google争执不下.任何想法可能导致这种特定的cURL失败吗?
解决方法:
尝试在网络浏览器中打开http://www.mysite.com/test.php.如果可行,则问题出在cURL.如果不是,则问题可能出在您的网络或apache配置上.
您可以通过确保Apache配置在系统上运行来检查它.然后尝试telnet< apache服务器ip>.从命令行80.连接后,尝试执行以下操作:
GET /test.php HTTP/1.1
Host: www.mysite.com
<2 line breaks>
如果您收到来自Apache的回复,则听起来像是网络问题.确保mysite.com解析为您的apache服务器的IP地址,并且端口80流量可以到达您的服务器.这也可能是路由器尝试向其自己的IP地址发出请求的环回路由问题(假设您的apache盒位于路由网络连接的后面,即您所在的连接).