作成日:2018-02-15, 更新日:2021-04-24
基本
やりたいことは・・・「取得しようとしたURLがリダイレクトしたのか、リダイレクト先のステータスはどうなっているのか?」ってのが欲しい。
▼色々と省略しているけど・・・下記のような感じ。
$viewHeader = true; // ヘッダを出力させるなら「true」 curl_setopt($ch, CURLOPT_HEADER, $viewHeader); $source = curl_exec($ch); $curlInfo = curl_getinfo($ch); if ( $viewHeader ) { // ヘッダを一緒に出力したときは分割させる $headerSize = 0; if ( isset($curlInfo["header_size"]) && $curlInfo["header_size"]!="" ) { $headerSize = $curlInfo["header_size"]; } $strHead = substr($source, 0, $headerSize); // ヘッダ部 $strBody = substr($source, $headerSize); // ボディ部 } else { // ヘッダを出力しないときはそのまま使う $strBody = $source; }
ヘッダを1行ずつ配列に変換
上記で分割したヘッダは文字列なので、分割させて配列にしたい。
※最終的にはステータスコードが欲しい・・・。
$tmpHeader = explode("\n\n", str_replace("\r", "", trim($strHead))); if ( is_array($tmpHeader) ) { $aryHeader = array(); foreach ( $tmpHeader as $rowHeader ) { $aryHeader[] = explode("\n", $rowHeader); } } // var_dump($aryHeader);
▼こっちのほうが良いかも?(配列にキー・バリューの形で保存)
$_header = str_replace("\r", '', $strHead); $tmp_header = explode("\n", $_header); $ary_header = array(); foreach ($tmp_header as $row_data) { $tmp = explode(': ', $row_data); $key = trim($tmp[0]); if ( $key == '' ) { continue; } $val = str_replace($key.': ', '', $row_data); $ary_header[$key] = trim($val); }
関連項目
・PHPでHTTPリクエストのレスポンスヘッダの取得(get_headers()、$http_response_header、cUrl)