関数・クラス解説

fopen

version:PHP 4, PHP 5, PHP 7 (公式)

ファイルまたは URL をオープンする

公式リファレンス

書式

fopen ( string $filename , string $mode [, bool $use_include_path = FALSE [, resource $context ]] ) : resource

説明

fopen() は、filename で指定されたリソースをストリームに結び付けます。

パラメータ

filename
filename が "スキーム://..." の形式である場合、 それは URL とみなされ、PHP はそのプロトコルのハンドラ (ラッパーともいいます) を探します。 もしもそのプロトコルに対するラッパーが登録されていない場合、 PHP はスクリプトに潜在的な問題があることを示す NOTICE を発行したうえで、 filename を通常のファイルとみなしてオープンすることを試みます。 PHP は、filename がローカルのファイルを示しているとみなすと、 そのファイルへのストリームをオープンします。 そのファイルはPHPからアクセスできるものでなければなりません。 ファイルのパーミッションが (パラメータで指定された) アクセスを許可されているかどうか確認する必要があります。 open_basedir を有効にしている場合は、更なるアクセス制限が加えられることがあります。 filename が登録されているプロトコルを示していると PHP が判断し、かつそのプロトコルがネットワーク URL として登録されていれば、 PHP は allow_url_fopen が有効となっているかどうかチェックします。 もしこれがオフになっていると、PHP は warning を発行し fopen は失敗します。
注意: サポートされているプロトコルのリストは サポートするプロトコル/ラッパー にあります。 いくつかのプロトコル (wrappersにも関連する) は context かつ/または php.ini のオプションをサポートします。 使用するプロトコルについてセットされるオプションのリストについては、 それぞれのページを見てください (例えば、 php.ini 上の user_agent の値は http ラッパーが使用します)。
Windows 環境では、ファイルパスで用いる全てのバックスラッシュを エスケープするかフォワードスラッシュを使用することに注意してください。
$handle = fopen("c:\\folder\\resource.txt", "r");
mode
パラメータ mode は、 そのストリームに要するアクセス形式を指定します。 この指定は、下表のうちのどれかとなります。
fopen() で使用可能な mode のリスト
mode 説明
'r' 読み込みのみでオープンします。ファイルポインタをファイルの先頭に置きます。
'r+' 読み込み/書き出し用にオープンします。 ファイルポインタをファイルの先頭に置きます。
'w' 書き出しのみでオープンします。ファイルポインタをファイルの先頭に置き、 ファイルサイズをゼロにします。ファイルが存在しない場合には、 作成を試みます。
'w+' 読み込み/書き出し用でオープンします。 ファイルポインタをファイルの先頭に置き、 ファイルサイズをゼロにします。 ファイルが存在しない場合には、作成を試みます。
'a' 書き出し用のみでオープンします。ファイルポインタをファイルの終端に置きます。 ファイルが存在しない場合には、作成を試みます。 このモードは、fseek() では何の効果もありません。 書き込みは、常に追記となります。
'a+' 読み込み/書き出し用でオープンします。 ファイルポインタをファイルの終端に置きます。 ファイルが存在しない場合には、作成を試みます。 このモードは、fseek() では読み込み位置のみに影響します。 書き込みは、常に追記となります。
'x' 書き込みのみでオープンします。ファイルポインタをファイルの先頭に置きます。 ファイルが既に存在する場合には fopen() は失敗し、 E_WARNING レベルのエラーを発行します。 ファイルが存在しない場合には新規作成を試みます。 これは open(2) システムコールにおける O_EXCL|O_CREAT フラグの指定と等価です。 このオプションはPHP4.3.2以降でサポートされ、また、 ローカルファイルに対してのみ有効です。
'x+' 読み込み/書き出し用でオープンします。 それ以外のふるまいは 'x' と同じです。
'c' 書き込みのみでオープンします。ファイルが存在しない場合には新規作成を試みます。 ファイルが既に存在する場合でもそれを ('w' のように) 切り詰めたりせず、 また ('x' のように) 関数のコールが失敗することもありません。 ファイルポインタをファイルの先頭に置きます。これは、アドバイザリ・ロック (flock() を参照ください) を確保してからファイルを変更したい場合に便利です。 'w' を使うと、ロックを取得する前にファイルを切り詰めてしまいます (もしファイルを切り詰めたいのなら、ロックを要求した後で ftruncate() を使うこともできます)。
'c+' 読み込み/書き出し用でオープンします。 それ以外のふるまいは 'c' と同じです。
'e' オープンされたファイル記述子に close-on-exec フラグを設定します。 POSIX.1-2008 準拠のシステムでコンパイルされた PHP でのみ利用可能です。
注意: オペレーティングシステムファミリが異なると行末も異なります。 テキストファイルに書き出し、そこに改行を加えたいとき、 オペレーティングシステムにあわせた正しい改行コードを使用する必要があります。 Unix ベースのシステムでは改行に \n キャラクタを使用します。 Windows ベースのシステムでは \r\n を使用します。 マッキントッシュベースのシステム (Mac OS Classic) では \r を使用します。 間違った改行コードでファイルに書き込むと、 他のアプリケーション上でそのファイルを開いた際に変な風に見えてしまいます。 Windows上では、\nを\r\nに透過的に変換する text-mode変換フラグ('t')が提供されます。 それに対し、'b'を使って強制的にバイナリモードにすることもできます。 その場合データの変換はされません。 このフラグを使用するには、'b' または 't'を mode引数の最後に追加してください。 デフォルトの変換モードは 'b' です。 plain-text ファイルを使用する場合には 't' モードを指定できますし、 改行に \n を使用すると、 古いバージョンのメモ帳のようなアプリケーションで読めることを期待できます。 それ以外のケースでは 'b' を使うべきです。 バイナリファイルを扱っている際に 't' フラグを指定した場合、 画像ファイルが壊れたり、\r\n キャラクタがおかしくなる等の問題を抱えてしまうでしょう。
注意: 互換性維持のために、't' モードを使用または依存しているコードを書き直し、 正しい改行コードと 'b' モードを代わりに使用することが、 強く推奨されます。
use_include_path
オプションの3番目の引数use_include_pathに'1'又は TRUE を設定することにより、include_path のファイルの検索も行うこともできます。
context
注意: コンテキストのサポートは、PHP 5.0.0 で追加されました。contexts の説明に関しては、ストリーム を参照してください。

返値

成功した場合にファイルポインタリソース、 失敗した場合に FALSE を返します

エラー

失敗したときは E_WARNING が発生します。

注意

警告IIS のような、いくつかの標準に対応してない Web サーバーは、PHP に警告を発生させるような手順でデータを送信します。このようなサーバーを使用する場合は、error_reporting を警告を発生しないレベルまで小さくする必要があります。PHP では、https:// ラッパーでストリームをオープンする際にバグがある IIS サーバーソフトウエアを検出することができ、この警告を抑制することができます。あなたが ssl:// ソケットを作成するために fsockopen() を使用している場合、自らこの警告を検出し、抑制する必要があります。

注意: ファイルの読みこみ・書きこみ時に問題が発生し、 サーバーモジュール版のPHPを使用している場合、 使用するファイル・ディレクトリがサーバープロセスからアクセス可能かどうかを確認してください。
注意: この関数は、filename がディレクトリの場合でも成功することがあります。 filename がファイルなのかディレクトリなのかがはっきりしない場合は、 まず is_dir() を使ってから fopen() を呼ぶようにしましょう。
警告IIS のような、いくつかの標準に対応してない Web サーバーは、PHP に警告を発生させるような手順でデータを送信します。このようなサーバーを使用する場合は、error_reporting を警告を発生しないレベルまで小さくする必要があります。PHP では、https:// ラッパーでストリームをオープンする際にバグがある IIS サーバーソフトウエアを検出することができ、この警告を抑制することができます。あなたが ssl:// ソケットを作成するために fsockopen() を使用している場合、自らこの警告を検出し、抑制する必要があります。

更新履歴

バージョン 説明
7.0.16, 7.1.2 'e' が追加されました。

サンプル

例1 fopen() の例

$handle = fopen("/home/rasmus/file.txt", "r"); $handle = fopen("/home/rasmus/file.gif", "wb"); $handle = fopen("http://www.example.com/", "r"); $handle = fopen("ftp://user:password@example.com/somefile.txt", "w");

参考

  • サポートするプロトコル/ラッパー
  • fclose() - オープンされたファイルポインタをクローズする
  • fgets() - ファイルポインタから 1 行取得する
  • fread() - バイナリセーフなファイルの読み込み
  • fwrite() - バイナリセーフなファイル書き込み処理
  • fsockopen() - インターネット接続もしくは Unix ドメインソケット接続をオープンする
  • file() - ファイル全体を読み込んで配列に格納する
  • file_exists() - ファイルまたはディレクトリが存在するかどうか調べる
  • is_readable() - ファイルが存在し、読み込み可能であるかどうかを知る
  • stream_set_timeout() - ストリームにタイムアウトを設定する
  • popen() - プロセスへのファイルポインタをオープンする
  • stream_context_create() - ストリームコンテキストを作成する
  • umask() - 現在の umask を変更する
  • SplFileObject
  • ワード検索


    ※入力キーワードが、関数名・説明文・タグに含まれるものを検索

    関数名アルファベット別

    A B C D E F G H I J
    K L M N O P Q R S T
    U V W X Y Z _

    最終更新一覧

    stristr
     大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

    stripslashes
     バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

    stripos
     大文字小文字を区別せずに文字列が最初に現れる位置を取得する

    stripcslashes
     addcslashes() でクォートされた文字列をアンクォートする

    strip_tags
     文字列から HTML と PHP のタグを除去して返却

    strcspn
     指定した文字が最初に現れる位置を調べる

    strcoll
     ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

    strcmp
     2つの文字列を比較し同じか(あるいは大小)を判定する

    strchr
     strstr() のエイリアス

    strcasecmp
     2つの文字列を比較(大文字小文字を区別せず同じとみなす)

    カテゴリー一覧

    PHP の振る舞いの変更
    音声フォーマットの操作
    認証サービス
    コマンドライン関連
    圧縮およびアーカイブ
    暗号
    データベース関連
    日付および時刻関連
    ファイルシステム
    自然言語および文字エンコーディング
    画像処理および作成
    メール関連
    数学
    テキスト以外の MIME 型
    プロセス制御
    その他の基本モジュール
    その他のサービス
    検索エンジン用の拡張モジュール
    サーバー固有のモジュール
    セッション関連
    テキスト処理
    変数・データ型関連
    ウェブサービス
    Windows 用のモジュール
    XML 操作
    GUI用の拡張モジュール