PHP fopen()関数

定義と用法

fopen()関数はファイルまたはURLを開きます。

ファイルを開けない場合、この関数はFALSEを返します。

構文

fopen(filename,mode,include_path,context)
パラメータ 説明
filename 必需。開くファイルまたはURLを指定します。
mode 必需。ファイル/ストリームへのアクセスを指定します。以下の表の値が可能です。
include_path オプション。include_pathでファイルを検索する必要がある場合、このパラメータを1またはTRUEに設定できます。
context オプション。ファイルハンドルの環境を指定します。Contextは、ストリームの動作を変更できるオプションのセットです。

modeパラメータの可能な値

mode を説明します
"r" 読み取りモードで開き、ファイルポインタをファイルの先頭に移動します。
"r+" 読み書きモードで開き、ファイルポインタをファイルの先頭に移動します。
"w" 書き込みモードで開き、ファイルポインタをファイルの先頭に移動し、ファイルサイズを0にします。ファイルが存在しない場合、作成を試みます。
"w+" 読み書きモードで開き、ファイルポインタをファイルの先頭に移動し、ファイルサイズを0にします。ファイルが存在しない場合、作成を試みます。
"a" 書き込みモードで開き、ファイルポインタをファイルの末尾に移動します。ファイルが存在しない場合、作成を試みます。
"a+" 読み書きモードで開き、ファイルポインタをファイルの末尾に移動します。ファイルが存在しない場合、作成を試みます。
"x"

ファイルを書き込みモードで開き、ファイルポインタをファイルの先頭に移動します。ファイルが既に存在する場合、fopen()の呼び出しは失敗しFALSEを返し、E_WARNINGレベルのエラーメッセージを生成します。ファイルが存在しない場合、作成を試みます。

これは、底層のopen(2)システムコールにO_EXCL|O_CREATマークを指定することと等価です。

このオプションはPHP 4.3.2以降のバージョンでサポートされており、ローカルファイルにのみ使用できます。

"x+"

を作成し、読み書きモードで開き、ファイルポインタをファイルの先頭に設定します。ファイルが既に存在すれば、fopen()の呼び出しが失敗しFALSEを返し、E_WARNINGレベルのエラーメッセージを生成します。ファイルが存在しなければ、作成を試みます。

これは、底層のopen(2)システムコールにO_EXCL|O_CREATマークを指定することと等価です。

このオプションはPHP 4.3.2以降のバージョンでサポートされており、ローカルファイルにのみ使用できます。

を説明します

fopen()は filename 指定された名前リソースがストリームにバインドされます。もし filename は"scheme://...のフォーマットであれば、URLとして処理され、PHPはこのモードを処理するプロトコルプロセッサ(もしくはエンキャッププロトコル)を検索します。そのプロトコルがエンキャッププロトコルとして登録されていない場合、PHPはスクリプト内の潜在的な問題をチェックするためのメッセージを出力し、 filename 通常のファイル名として処理します。

PHPが filename 指定されたのはローカルファイルであり、そのファイル上にストリームを開くことを試みます。このファイルはPHPがアクセスできる必要があり、そのためにはファイルアクセス権限がこのアクセスを許可する必要があります。セキュリティモードまたはopen_basedirが有効であれば、さらなる制限が適用されます。

PHPが filename 指定されたのは登録されたプロトコルであり、そのプロトコルはネットワークURLとして登録されています。PHPはallow_url_fopenが有効であることを確認し、それが無効であれば警告を発し、fopenの呼び出しが失敗します。

context のサポートはPHP 5.0.0で追加されました。

ヒントとコメント

注釈:異なるオペレーティングシステムファミリーには異なる行終了の習慣があります。テキストファイルに書き込む際に新しい行を挿入したい場合、そのオペレーティングシステムに適した行終了シンボルを使用する必要があります。Unixベースのシステムでは\nを使用し、Windowsベースのシステムでは\r\nを使用し、Macintoshベースのシステムでは\rを使用します。 ファイルに書き込む際に、誤った行終了シンボルを使用すると、他のアプリケーションがこれらのファイルを開いたときに奇妙な動作をすることがあります。

Windows では、テキスト変換マーク("t")が提供されており、\nを\r\nに透明に変換することができます。これに対して、データを変換しないように強制的に二進模式を使用するために"b"を使用することもできます。これらのマークを使用するには、"b"または"t"をmodeパラメータの最後の文字として使用する必要があります。

デフォルトの変換モードは SAPI と使用している PHP 版に依存しており、移植性を考慮して適切なマークを常に指定することを推奨します。纯テキストファイルを操作し、スクリプトで \n を行終了シーケンスとして使用して、他のアプリケーション(例えば Notepad)で読み取れるようにする場合は、mode で "t" を使用します。他のすべての場合は "b" を使用します。

バイナリファイルを操作する際に "b" マークが指定されていないと、壊れた画像ファイルや \r\n 文字に関する奇妙な問題が発生する可能性があります。

注釈:移植性を考慮して、fopen() を使用してファイルをオープンする際には常に "b" マークを使用することを強くお勧めします。

注釈:再び、移植性を考慮して、"t" モードに依存しているコードを正しい行終了シーケンスを使用して書き換え、"b" モードに変更することを強くお勧めします。

<?php
$file = fopen("test.txt","r");
$file = fopen("/home/test/test.txt","r");
$file = fopen("/home/test/test.gif","wb");
$file = fopen("http://www.example.com/","r");
$file = fopen("ftp://user:password@example.com/test.txt","w");
?>