|
実際に使うときは、RSSやAPIのURLを対象にすることが多いでしょう。アクセスのたびにそれらからfile_get_contentsで中身を取得していると、 ・重い(取得に時間がかかる) ・相手のサーバに負荷をかける場合がある ので「キャッシュ」を使うのがベターです。キャッシュの仕組みはPHPの標準ライブラリであるPEARのCache_Liteを使います。 PHPの公式サイトと同じような作りなので右上の「Search for テキストボックス」にcache_liteで検索すれば出てきます。 PEARのライブラリはPHPのプログラムなので、普通のファイルで構成されています。導入しやすいようにコマンドラインから入れることもできますが、ここでは直接ダウンロードしてみます。 現時点では1.7.2が最新です。tgzという圧縮形式ですので解凍には何かしらソフトが必要です。自分はeoを使っています。 解凍するとCache_Lite-1.7.2というフォルダができていろいろ入っていますが、使うのは ・Lite.php ・Lite/ フォルダの中身 だけです。docsとかtestsフォルダの中身は違うな、というのは経験的にわかるようになると思います。上記ファイルをCacheというフォルダに入れて、実際使いたいプログラムのあるフォルダにコピーします。 <?php
// Cache_Liteのプログラムを読み込む require_once 'Cache/Lite.php'; // 設定項目 $cacheOptions = array ( 'cacheDir' => '/tmp/', // キャッシュが保存される場所 'lifeTime' => 3600, // 指定した秒数はキャッシュを使う、nullにすると無期限 ); $url = 'http://www.yahoo.co.jp/'; $cacheId = $url; $objCache = new Cache_Lite($cacheOptions); if ($cache = $objCache->get($cacheId)) { $buf = $cache; // キャッシュが見つかったときはここで代入 } else { // キャッシュがなかったとき、lifeTimeより古くなっているときはここで処理 $buf = mb_convert_encoding(file_get_contents($url), 'UTF-8', 'auto'); $objCache->save($buf, $cacheId); // キャッシュとして保存 } echo $buf; ちょっと長くなりましたがこれが基本形です。非常によく使うので、僕はこのプログラムをいつでもコピーしやすい場所に書いてあります。 キャッシュが保存される場所のパーミッションは(多くの場合)777である必要があります。パーミッションも多少ややこしい仕組みですが、検索エンジンで調べてみてください。 このCache_Liteを使うと、2回目のアクセスから、取得したYahoo!の中身をファイルに保存したキャッシュから取り出すので表示が速くなります。 外部のサーバに無意味なアクセスを大量に送り込むのはお行儀が悪いのでキャッシュの仕組みは必須と言えます。 ちょっとアドバンスなfile_get_contentsの使い方。僕も最近知りました。 <?php
$context = array('http' => array('header' => "Accept: text/xml,application/xml,application/xhtml+xml,text/html\\r\\nUser-Agent: zuzara")); $xcontext = stream_context_create($context); echo file_get_contents(適当なURL, false, $xcontext); PHP5から3番目の引数にHTTPのヘッダーを指定できるようになったようです。上記のようにすれば画像や動画のURLを指定しても取得しないようになります。(サーバによってはダメですが) PHP Warning: file_get_contents(画像のURL): failed to open stream: HTTP request failed! HTTP/1.1 406 No acceptable objects were found in /home/funaki/work/test.php on line 19
If-Modified-Sinceなども指定できるので便利になりました。 |

- >
- コンピュータとインターネット
- >
- インターネット
- >
- その他インターネット





