2017-09-24 24 views
1

私はプロジェクトを終了していますが、HTTPステータスコードが別のものと同じかどうか比較する必要があります。"$ file_headers"という配列があり、["Status"]の位置に "HTTP/1.1 301 Moved Permanently"とif節に保存されています私は "HTTP/1.1 301 Moved Permanently"(これは明らかに同じです)と比較しますが、私のコードは私と同じことを言っていません。私は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>"; 
?> 

誰かが私に感謝します。感謝し、素晴らしい日DEV!

+0

'(" HTTP/1.1 301 Moved Permanently ")'と '(" HTTP/1.1 301 ")のような文字列に余分な'括弧 'を追加した理由は、 '===' '=='ではなく? –

+0

Sunnyということで、単純化されたアルゴリズムで消去するのを忘れていましたが、私の元のコードでは、次のようなものです: "$ HTTPversions [$ y]。" "。$ StatusURL [$ x] - > code。 "" $ StatusURL [$ x] - > name) –

答えて

1

$headers_two['Status']は、あなたがtrim()ではない唯一の要素です。そのため、その周囲に空白があり、比較が失敗します。このようにしてください:

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

これはうまくいくでしょう。

+0

WORKED!本当にありがとう! –

関連する問題