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

2016年6月3日

動作環境

サーバー: さくら 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('UserId:Password'),//ベーシック認証([ID]/[PASSWORD])
);

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

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

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

今日はこの辺で

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-PHP
-, , , ,