Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux服务器上使用PHP CURL获取图像的有效响应代码?_Php_Linux_Curl - Fatal编程技术网

如何在Linux服务器上使用PHP CURL获取图像的有效响应代码?

如何在Linux服务器上使用PHP CURL获取图像的有效响应代码?,php,linux,curl,Php,Linux,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_NOBO

我试图检测图像的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服务器上返回正确的响应代码


谢谢您的时间。

好的,我找到了一个解决方案。不确定它是否是最优雅的(我宁愿在所有方面都使用CURL),但它可以在Linux服务器上工作:

@file_get_contents($img, NULL, stream_context_create(array('http'=>array('method' => "HEAD",'follow_location' => 0,'timeout'=>7))));
    if (!empty($http_response_header)){
        $code = "";
        sscanf($http_response_header[0], 'HTTP/%*d.%*d %d', $code);
        if($code == "401"){ 
            $found = TRUE;
            $this->_httpBasicAuthImages = TRUE;
        }}
我希望这能帮助其他遇到同样问题的人

有关新功能的更多详细信息,请参见以下页面: