PHPでWeb上にあるファイルを読み込む4つの方法(file_get_contents/file/fgets/readfile)

今回はPHPでWeb上にあるファイルを読み込む4つの方法について解説します。

PHPはWebアプリケーション開発によく使われる言語ですので、Web上に存在するファイルにアクセスしなければいけない場面がよくあります。用途に応じた4つの方法がありますので、しっかり学んでプログラム開発に役立ててください。

ざっくりPHP入門(初心者〜中級者向け)

今回の目的

今回の目的はPHPで用意されている関数を使って、Web上のファイルを読み込むことにあります。以下のHTMLファイル(index.htmlというファイル名で保存したとします)をWebサーバーに置いているという前提で以降の説明をしたいと思います。

 

file_get_contentsで一括で読み込む

file_get_contents関数はたった1行でWeb上のファイルを全文を文字列として読み込むことができます。以下が例となります。(ドメイン名を省略して「…」と表記しています)

 

出力結果は以下の通り、index.htmlのソースコードを出力することができました。

file関数で1行ごと配列化する

file関数はファイルの中身を1行ごと配列化してくれる関数です。出力する場合はforeach処理を使います。

phpのfor文とforeach文で配列(array)を操作する方法を解説

出力結果は以下の通りです。file_get_contentsのようにファイルの中身をすべて文字列化するのに対しfile関数では行ごとに分解されているので、例えば特定の文字列を探す際に効果的です。

 

fgets関数で1行ごと読み込む

fgets関数の使用例は以下のとおりです。fgets関数はfile関数同様1行ごとにファイルを読み込んでくれます。同じく行ごとに文字検索などの処理をさせるのに有利です。

【初心者向け】PHPのwhileを使ったループの仕方は?基本構文や他の制御文との違いを分かりやすく解説します。

出力結果は以下のとおりです。行単位でファイルにアクセスするのでアクセス回数が多いことが欠点ですが、行ごとに変数に格納するためメモリ消費量を抑えられるという利点があります。

 

例えば以下のように「title」という文字列が含まれていたら処理を中断するような場合は、その行までしかファイルを読み込みません。

 

出力結果は以下のとおりです。全文読み込む必要のないケースではfgets関数が有利になる場合があります。

 

readfile関数で出力までを1行で行う

最後にreadfile関数を紹介します。ファイル読み込みから出力まで以下のように1行で実現できます。

 

結果はご覧のとおりです。readfile関数の利点は変数に格納しない分メモリ消費量が少なくて済みます。しかし何の処理もなく出力してしまうreadfile関数にどんな用途があるのでしょうか。

 

一般的に使われるのはファイルダウンロードです。ダウンロードは巨大なファイルを扱う場合が多いのでその中身を変数に入れるようなことは禁じ手です。以下のようにzipファイルを指定することで変数を介さずともダウンロードが可能になるわけです。

 

但し、readfile関数を使ったダウンロードを行う場合は、出力バッファリングを無効化する処理が必要となります。今回の趣旨からは外れるので説明は省略しますがファイルダウンロードを実装する場合は覚えておいてください。

まとめ

いかがでしょうか。今回はPHPでWeb上にあるファイルを読み込む4つの方法について解説しました。

PHPはWebアプリケーション開発によく使われる言語ですので、外部サーバー上のファイルを読み込むケースはよくあります。今回4つの方法について解説しましたが、用途に応じて使い分け効率的なプログラム開発を目指してください。

 

 

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?