2011-09-27 29 views
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服務器上返回正確的響應代碼?

謝謝你的時間。

回答

0

好的,我找到了一個解決方案。不知道它的最優雅的(我寧願用一切捲曲),但它工作在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; 
     }} 

我希望這可以幫助其他人遇到了同樣的問題。

有關新功能的更多詳細信息可在以下頁面找到:http://hakre.wordpress.com/2011/09/17/head-first-with-php-streams/

相關問題