WEBデザイン・開発講義WEB Design&Development Lecture

PHPのファイルシステムのプログラミング

PHPのファイルシステムのプログラミング

PHPファイルシステムの仕組みとプログラミング方法

PHPファイルシステムの仕組み※画像クリックで拡大表示

※アイコンの機能:表示   実行  ダウンロード

  • PHPのファイルシステムの概要
    ファイル構造の特徴とOPENモード、ファイル制御の処理
    1. ファイルは、記録媒体に保存された一固まりのデータやプログラムで、OSはファイル単位で格納場所、サイズ、更新日時等の管理をしています。
      ファイル構造の特徴として、1件ごとのレコードとそのレコードの各項目(フィールド)から構成され、ファイル一括、レコード、フィールドのデータ格納単位で入出力処理が可能です。
    2. 一般的なファイル処理のプログラミングは、
      1. ファイルを開く…fopen 関数でファイルポインタのセット
      2. ファイルを読む…fgetc 関数(文字単位)、fgets 関数(行単位)で、現在のファイルポインタの位置からファイルを読み込む
      3. ファイルを書く…fwrite(fputs) 関数(行単位)でファイルを書き込む
      4. ファイルを閉じる…fclose 関数でファイル閉じて、ファイルポインタの解放
      の手順で作成します。
    3. ファイルポインタとは、
      現在ファイルをどこまで読んだか、書いたかを示し、ファイルオープン時に設定されます。(初期状態でのファイルポインタは、ファイルの先頭位置)
    4. ファイル・オープンのモードは、
      読み込み(read)、書き込み(write)、追加書き込み(append)、読み書き(+マーク付き)などのモードがあり、ファイルの先頭や終了位置の指定をオープン・モードで設定されます。
      指定ファイル・オープンモードの内容
      r読み込みのみ
      r+読み込みして、書き込み
      w書き込みのみ(ファイルがない場合は、作成)
      w+読み込み / 書き込みのみ(ファイルがない場合は、作成)
      a追加書き込みのみ
      a+読み込み / 追加書き込みのみ(ファイルがない場合は、作成)
      x書き込みのみ(ファイルの先頭のファイルポインタから)ファイルが既に存在する場合は、エラーとなる
      x+読み込み / 書き込みのみで、他は'x'モードの振る舞い
      c書き込みのみで、ファイルが存在しない場合には新規作成(PHP5.2.6以降)
      c+読み込み / 書き込みのみで、他は'c'モードの振る舞い(PHP5.2.6以降)
    5. フィールド区切りの処理は、
      フィールドの固定長、可変長があり、日本語処理上では可変長が一般的で、「コンマ(CSV形式)区切り」又は「tab区切り」を利用します。fgetcsv 関数(読み込み)、fputcsv 関数(書き込み)によりフィールド単位の配列処理が可能です。
    6. ファイル制御の仕組みと指定方法
      あるプロセスと別のプロセスが同時書き込みによりデータの破損を防ぐ方法として、flock 関数による「ファイルロック」があります。
      ロック方法には他のプロセスからの読み込み・書き込みの両方を禁止する「排他ロック(LOCK_EX)」と書き込みのみ禁止の「共有ロック(LOCK_SH)」があり、「LOCK_UN」でロックを解除します。また、ロック中ブロックモードとしないノンブロックモード「LOCK_NB」もあります。
    PHPファイルシステムの関数一覧(PDF)

ファイルシステムのプログラミング

  • ディレクトリ・ファイル操作の主な関数は、
    命令/関数説明
    プログラム内容
    mkdir
    rmdir
    is_dir
    getcwd
    chdir
    mkdir:ディレクトリの作成
    rmdir:ディレクトリの削除
    is_dir:ディレクトリ存在有無
    getcwd:現在のディレクトリ位置
    chdir:ディレクトリ移動
    「ディレクトリ作成・削除、位置・移動の操作」
    opendir
    closedir
    readdir
    file_exists
    is_file
    filemtime
    filesize
    opendir:ディレクトリのオープン
    closedir:ディレクトリのクローズ
    readdir:ディレクトリ読み込み
    file_exists:ファイル/ディレクトリ存在
    is_file:ファイル判断
    filemtime:ファイル/ディレクトリ更新日時
    filesize:ファイル容量
    「ディレクトリのオープン・クローズ、読み込み処理で一覧表示」
    glob
    basename
    glob:パターン指定でディレクトリ・ファイルの抽出
    basename:ファイル名のみの抽出
    「globによるファイル/ディレクトリを抽出して、一覧表示」
    fopen
    fclose
    fgetcsv
    fputcsv
    fopen:ファイルのオープン
    fclose:ファイルのクローズ
    fgetcsv:CSV形式の読み込み(配列)
    fputcsv:CSV形式の書き込み(配列)
    mb_convert_encoding:コード変換
    「ファイルのオープン・クローズ、CSV形式読み込み処理で一覧表示、コード変換(Shift-JIS→UTF-8)」
    「CSV形式読み込み(fgetcsv)・コード変換処理のサブルーチン」
    「CSV形式読み込み(fgetcsv)・コード変換処理のサブルーチンの利用処理」
    「CSV形式書き込み(fputcsv)・コード変換処理(UTF-8→Shift-JIS)」
    flock
    fgets
    fread
    fwrite,fputs
    rewind
    flock:ファイルをロック制御
    fgets:ファイルの文字列の読み込み
    fread:ファイル(バイナリ)読込
    fwrite:ファイルの文字列の書き込み
    rewind:ファイルポインタを最初に戻す
    「flockによるファイル排他制御して、件数カウントアップ」
    「バイナリーファイル読込して画像を表示処理:fread」
    file
    file_get_contents
    file_put_contents
    unlink
    file:ファイル全体読込配列格納
    file_get_contents:ファイル全体文字列読込
    file_put_contents:ファイル文字列書込
    unlink:ファイルを削除
    「画像ファイルを読み込んで、画像内容を表示の処理:file_get_contents」
    「WEBサイトを読み込んでデータ表示の処理:fileとfile_get_contents」
    「データの書き込み:file_put_contentsとファイル削除の処理」
    readfile
    stat
    readfile:ファイルを出力
    stat:ファイルに関する情報を取得
    「readfile関数を利用したファイルのダウンロード処理」
    「stat関数を利用したファイルの状態取得」
  • ファイル・メンテナンスの処理は、
    変更指示データを読み込んで、マスターデータの内容を更新するプログラムでは、windows環境の「ShiftJIS」コードを考慮する必要がありますが、ファイルデータを表示しない場合はスルーすることで、「コード変換」は不要となります。
    マスタと変更指示のファイル形式と処理
    ※このファイルメンテナンスのプログラム→
  • ZIPファイルの圧縮・解凍処理は、
    ZipArchiveクラスを利用しますので、PHPクラス・オブジェクトの内容の習得が必要になります。
    事例として、ユーザー関数の「ZIPファイル圧縮」と「ZIPファイル解凍」を利用したプログラム内容を確認して下さい。

ファイルシステム補足説明

PHPリファレンス

参考資料の表示

pagetopへ