如何在 Linux 服务器上使用 PHP CURL 获取图像的有效响应代码?
我正在尝试检测图像的 URL 在防火墙后面或经过身份验证的区域后面是否有效。下面是我编写的函数:
private function pingImg($img){
$found = FALSE;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $img);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 7);
$result = curl_exec($curl);
if($result !== false){
if(curl_getinfo($curl, CURLINFO_HTTP_CODE) == "401"){
$found = TRUE;
$this->_httpBasicAuthImages = TRUE;
}
//now check for invalid cert
if(stripos($img, "https") !== FALSE){
curl_close($curl);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $img);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_TIMEOUT, 7);
$result = curl_exec($curl);
if(!$result) {
$found = TRUE;
$this->_invalidSSL = TRUE;
}
}
} else {
//stalled ping, probably behind a firewall
$found = TRUE;
$this->_firewallImg = TRUE;
}
curl_close($curl);
return $found;
}
该代码在我们的开发 Windows 服务器上运行良好(返回所有正确的响应代码),但不幸的是它在我们的生产 Linux 服务器上不起作用。当图像位于经过身份验证的区域后面时(即 401 状态代码),Linux 服务器上基本上不会返回响应代码。响应是空白的。
有人遇到过同样的问题吗?如果是这样,我该如何修复它以便在我们的 Linux 服务器上返回正确的响应代码?
感谢您抽出时间。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好的,我找到了解决方案。不确定它是最优雅的(我宁愿使用 CURL 来完成所有事情),但它可以在 Linux 服务器上运行:
我希望这可以帮助其他遇到同样问题的人。
有关新功能的更多详细信息,请访问以下页面:http://hakre.wordpress.com/2011/09/17/head-first-with-php-streams/
OK, I found a solution. Not sure its the most elegant (I would rather use CURL for everything) but it works on the Linux server:
I hope this helps anyone else encountering the same issue.
More details about the new functionality can be found on the following page: http://hakre.wordpress.com/2011/09/17/head-first-with-php-streams/