忘れないように記録しとこ

file_get_contents()でベーシック認証の掛かったコンテンツを取得する

動作環境

サーバー: さくら 1G SSD
OS: CentOS 6.5
PHP: 7.0.2
Codeigniter: 3.0.4

 

以前に書いた記事

以前、

外部サイトから画像をダウンロードする

という記事を掲載しました。

割りとアクセスがあるので、オプション機能を紹介しちゃいます。

 

http接続でのファイル取得

file_get_contents() は 第一引数にURLを設定することで、
外部サーバーにある画像等のファイルを取得することができます。

取得方法は、http接続になります。
そうなるととある問題がでてきます。

 

ベーシック認証付きのファイルが取得できない

file_get_contents() が http接続でファイルを取得してくるとうことは、
ブラウザでアクセスするとの原理は一緒です。

つまり、ページあるいは、ファイルに対してベーシック認証がかけられているとファイルが取得できないということです。

かと言って、一般の接続はお断りしたいような内容だったりする場合、ベーシック認証を外すのは難しいです。

 

できるよ! 僕はできた!

そもそもベーシック認証ってなに?
そんな方には以下のURLでわかり易く解説しています。

http://www.phppro.jp/school/security/vol3/1

つまり、file_get_contents() が http接続する時に、header値に認証情報を乗せてあげればいいのです。

やり方は以下の通りです。

$url = 'http://www.hoge.com/img.jpg';

$basic = array(
'User-Agent: My User Agent 1.0',    //ユーザエージェントの指定
'Authorization: Basic '.base64_encode('admin:pass'),//ベーシック認証
);

$options = array('http' => array(
header' => implode("\r\n", $basic )
));

file_get_contents($url, false, stream_context_create($options));

どうでしょう?
無事に取得できたでしょうか?

今日はこの辺で

この記事が気に入ったら
いいね ! しよう

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください