作成日: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)