0
我試圖檢測圖像的URL是否有效,位於防火牆後面或驗證區域後面。下面是我寫的函數:如何在Linux服務器上使用PHP CURL獲取圖像的有效響應代碼?
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服務器上返回正確的響應代碼?
謝謝你的時間。