2017-09-24 411 views
1

我正在完成一個項目,但我需要比較一下HTTP狀態碼是否與另一個相同。我有一個大的算法,我減少了他們,我發現問題: 我有一個名爲「$ file_headers」的數組,並在[「狀態」]位置保存「HTTP/1.1 301永久移動」,並在if條款我比較「HTTP/1.1 301永久移動」(顯然是相同的),但我的代碼並不像我說的一樣。我使用cURL檢測HTTP狀態碼。我的PHP代碼如下:將數組字符串與字符串進行比較

<?php 
// create curl resource 
$ch = curl_init(); 

// set url 
curl_setopt($ch, CURLOPT_URL, "fb.com"); 

//return the transfer as a string 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
//enable headers 
curl_setopt($ch, CURLOPT_HEADER, 1); 
//get only headers 
curl_setopt($ch, CURLOPT_NOBODY, 1); 
// $output contains the output string 
$output = curl_exec($ch); 

// close curl resource to free up system resources 
curl_close($ch); 

$data = explode("\n",$output); 
$headers_one = $data; 
$headers_two = array(); 

$headers_two['Status'] = $data[0]; 
array_shift($data); 
foreach($data as $part){ 
    $middle = explode(":",$part); 

    $msg = null; 
    if(sizeof($middle) > 2){ 
     if(strpos($middle[0],"Location") === false){ 
      for($i = 1; $i <= sizeof($middle)-1;$i++){ 
      $msg .= $middle[$i]; 
      } 
     } else { 
      for($i = 1; $i <= sizeof($middle)-1;$i++){ 
      if($i == 1){ 
       $msg .= $middle[$i] . ":"; 
      } else { 
       $msg .= $middle[$i]; 
      } 
      } 
     }  
    } else if(isset($middle[1])){ 
     $msg = $middle[1]; 
    } 
    $headers_two[trim($middle[0])] = trim($msg); 
} 

array_pop($headers_one); 
array_pop($headers_one); 
array_pop($headers_two); 

$file_headers = $headers_two; 
if($file_headers["Status"] === ("HTTP/1.1 301 Moved Permanently") || $file_headers["Status"] === ("HTTP/1.1 301")){ 
    echo "OK!"; 
} else { 
    echo "NO!"; 
} 

//print all headers as array 
/*echo "<pre>"; 
print_r($headers_one); 
echo "</pre><br />";*/ 
echo "<pre>"; 
echo $file_headers["Status"]; 
echo "</pre>"; 
?> 

如果有人可以幫助我,我將不勝感激。感謝,並有一個很好的日子開發!

+0

爲什麼你在字符串像'(「HTTP/1.1 301永久移動」)'和'(「HTTP/1.1 301」)''上添加了額外的'括號',請記住你正在比較'==='不是'=='? –

+0

正在陽光下,我忘了在我簡化的算法中刪除它,但在我的原始代碼中是這樣的:(「HTTP /」。$ HTTPversions [$ y]。「」。$ StatusURL [$ x] - >代碼。 「」。$ StatusURL [$ x] - >名稱) –

回答

1

$headers_two['Status']是您不是trim() ing的唯一元素,所以它周圍有一些空白,這會導致比較失敗。這樣做:

$headers_two['Status'] = trim($data[0]); 

它會工作得很好。

+0

工作!非常感謝! –