質問: file_get_contents($url, false, stream_context_create($options)); ``` 上記のコードを実行し、「$contents」をvar_dumpすると、バイナリデータ(この場合取得先のPDFデータ)が入ってくるのですが、このPDFはブラウザでアクセスしても見ることができます。 ■実現したいこと 上記のプログラム結果から、「ブラウザアクセス時のURL」を取得したい ■試したこと var_dumpの結果を元に、URLを取得しようとしましたが、 手がかりになるものが無く、途方にくれています。 上記のfile_get_contentsをする際、取得先のURLを取得することについて お教えいただけますでしょうか。 どうぞよろしくお願い致します。
回答: httpやhttpsで始まるURLに対し`file_get_contents`を実行すると、`$http_response_header`という変数に自動でレスポンスヘッダが格納されています。`$http_response_header`は配列で、その中にレスポンスヘッダが1行ずつ入っているはずです。リダイレクトされたリクエストである場合、そのレスポンスヘッダには`Location`というヘッダが含まれていると思います。 ``` $contents = file_get_contents($url, false, stream_context_create($options)); foreach($http_response_header as $index => $header) { // レスポンスヘッダを1行ずつ探す if(preg_match('/^Location: (.*?)$/', $header, $match)){ // Location:で始まるヘッダを見つける $redirectUrl = $match[1]; // マッチ結果の1つめのグループがリダイレクト先のURLにあたる } } ```