ホリデープログラミング入門

ホリデーにプログラミングを楽しむための入門 by 船木信宏

全体表示

[ リスト ]


file_get_contents()を使いこなす


PHPには最初から用意されている関数が多数あります。その中でも特に便利なのがfile_get_contents。指定したURLの中身(HTML)をごそっと取ってきてくれるお手軽関数です。

関数の使い方はマニュアルを参照します。本家のphp.netのページ右上にある「search for テキストボックス」に関数名を入れて検索するか、Namazu による全文検索システムを利用するのがいいと思います。


PHPマニュアルの見方


ちょっと脱線してマニュアルの読み方。

file_get_contentsの場合、2行目に(PHP 4 >= 4.3.0, PHP 5)と書いてあります。これがこの関数の動作するバージョン。自分の使っているPHPのバージョンがわからないときは

<?php
echo phpversion();

この関数を使うとわかります。

動作しないバージョンのときはそんな関数ないよ、というエラーが出ると思います。例えばPHP5.1.6でjson_encode()を使おうとしても5.2以上でしか動かない(といってもマニュアルには新し過ぎるせいか書いてありませんが)ので以下のようなエラーが出ます。

PHP Fatal error: Call to undefined function json_encode() in /home/funaki/work/test/test.php on line 2

さて、続いて「説明」のすぐ下に書いてある、

string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] )

これが一番ややこしそうな記述ですが重要です。そもそも関数には「返り値」と「引数(ひきすう)」があってそれぞれ出るモノと入れるモノになります。出るモノが関数名の左側に書いてあります。

file_get_contentsの場合は、string、つまり文字列。括弧の中が入れるモノで、カンマで区切っていくつも入れられる場合があります。[]で囲まれているのはオプション、つまり入れなくてもいい引数です。string filenameは左が「型」で返り値と同じくいくつか種類があります。右は英語で説明。ファイル名を文字列で入れる必須の引数、他はオプションという意味になります。

引数の数など間違えると、
PHP Warning: file_get_contents() expects at least 1 parameter, 0 given in /home/funaki/work/test/test.php on line 2

こんな感じにparameter(引数)が間違ってるよ、と怒られます。

引数の中にboolとかresourceとかありますが、これらは型の種類で
PHP: 型 - Manual
に詳細が書いてあります。最初は意識しなくても大丈夫ですが、型はやっていくうちに注意が必要になるでしょう。

PHP: 関数の定義(プロトタイプ)を読むには - Manual
ここにもマニュアルの読み方は書いてあります。読んでいるうちに慣れると思います。

file_get_contentsを使う


マニュアルの「ティップ」のところに「fopen wrappers が有効の場合、この関数のファイル名として URL を使用することができます。」とあります。fopen wrappersはたいてい有効なので、URLを入れてみます。

<?php
$buf = file_get_contents('http://www.yahoo.co.jp/');
echo $buf;

返り値はstringなので変数$bufに代入すればURL先の中身が文字列として入ることになります。引数にはstringでファイル名の代わりにURLを指定。

実行してみるとYahoo!の中身がちょっと崩れて表示されるでしょうか。文字化けているかもしれません。そういったときにはfile_get_contentsと組み合わせて使うことが多い便利な関数、mb_convert_encodingを使います。

<?php
$buf = mb_convert_encoding(file_get_contents('http://www.yahoo.co.jp/'), 'UTF-8', 'auto');
echo $buf;

知らない関数が出てきたらすぐマニュアルで検索。このmb_〜関数はそのままでは使えないかもしれません。その場合、php.iniのmbstringの項目を変更するなど必要になります。ここでの説明は省きます。


実際のエンコーディングと表示しようとしているエンコーディングが違うと文字化けるので、この場合、表示しようとしているエンコーディングに変換します。

文字エンコーディングに関しての詳しい説明は省きますが、mb_convert_encodingは、3番目の引数でautoを指定すると1番目の引数で指定した文字列中のエンコーディングを自動で判別して2番目の引数のエンコーディングに変換してくれます。

なお最近は、UTF-8が主流になったように思います。

URLを変えて適当にいろいろなページを表示させてみてください。

後編に続く。

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

開く トラックバック(1)


.


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事