ファイルの作成

TEXT 形式のデータをファイルに書き出します。

プログラムの作成-1

File_Put.php のソースコードを utf-8(BOM 無し)でタイプして C:\DATA\PHP\ に格納して下さい。
TEXT 形式のデータをカレントフォルダーのファイル(test.txt)に書き出します。
ファイル名は環境によって、大文字/小文字を区別します。
「die」関数は「exit」関数のエイリアスで、スクリプトの実行を終了します。
他の言語に慣れた方は exit の方が解り易いかも知れません。
<?php
    if (!($fp = fopen("test.txt","w")))
    {
        die('test.txt write open error');
    }
    fputs($fp,"りんご\n");
    fputs($fp,"バナナ\n");
    fputs($fp,"パイナップル\n");
    fputs($fp,"いちご\n");
    fclose($fp);
    print "test.txt Complete\n";
?>

【実行画面】
コマンドプロンプトを起動して File_Put.php をコンパイルします。
Microsoft Windows [Version 10.0.18363.836]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\maeda>CD C:\DATA\PHP

C:\DATA\PHP>php File_Put.php
test.txt Complete
C:\DATA\PHP>

プログラムの説明

  1. if (!($fp = fopen("test.txt","w"))) でファイルをオープンします。
    $fp はファイルハンドル(File Handle)で、"w" はファイルサイズをゼロにして、書き込み用にオープンします。
    die 関数は exit 関数のエイリアスで、オープンに失敗したときメッセージを表示して終了します。
  2. fputs は Text Data のファイルへの出力で \n は改行コードです。
        fputs($fp,"りんご\n");
        fputs($fp,"バナナ\n");
        fputs($fp,"パイナップル\n");
        fputs($fp,"いちご\n");
    
  3. 出力が終われば fclose して下さい。
    これでカレントフォルダー(実行中のディレクトリ)にファイルが作成されます。
        fclose($fp);
        print "test.txt Complete\n";
    
  4. コマンドプロンプトから type コマンドで "test.txt" を印字してみました。
    所が type コマンドで印字すると文字化けします。
    C:\DATA\PHP>type test.txt
    繧翫s縺・繝舌リ繝・繝代う繝翫ャ繝励Ν
    縺・■縺・
    
  5. type コマンドを w にリダイレクトして調べてみました。
    C:\DATA\PHP>type test.txt > w
    
  6. w を調べると BOM 無しの utf-8 で改行コードは fputs() で指示した \n(0A) で書き込まれていました。
    type コマンドは、全角文字(日本語)が記録されている utf-8 のファイルには使えないようです。
    りんご
    バナナ
    パイナップル
    いちご
    

プログラムの作成-2

File_Put2.php のソースコードを utf-8(BOM 無し)でタイプして c:\DATA\PHP\ に格納して下さい。
ファイル(test.txt)に 0~100 の乱数で発生した数値データ(数字)を書き出します。
<?php
    // test.txt に 0~100 の乱数を書き出す
    if (!($fp = fopen("test.txt","w")))
    {
        die('test.txt write open error');
    }
    for($i=0; $i<10; $i++)
    {
        fputs($fp, rand(0,100)."\r\n");
    }
    fclose($fp);
    print "test.txt Complete\n";
?>

【実行画面】
コマンドプロンプトを起動して File_Put2.php をコンパイルします。
C:\DATA\PHP>php file_put2.php
test.txt Complete

C:\DATA\PHP>type test.txt
2
86
70
94
16
92
83
96
28
5

C:\DATA\PHP>

プログラムの説明

  1. if (!($fp = fopen("test.txt","w"))) でファイルをオープンします。
    $fp はファイルハンドル(File Handle)で、"w" はファイルサイズをゼロにして、書き込み用にオープンします。
    die 関数は exit 関数のエイリアスで、オープンに失敗したときメッセージを表示して終了します。
  2. 0~100 の乱数を10件発生して TEXT 形式(数字)で書き出します。
    一般的に改行コードは "\r\n" なので、これを設定してみました。
    \n だけにするか \r\n にするかは、このファイルを入力するプログラムの問題です。
        for($i=0; $i<10; $i++)
        {
            fputs($fp, rand(0,100)."\r\n");
        }
    
  3. アプリケーションによっては、改行コードが邪魔になる場合があります。
    改行コード(\r\n)を削除するソースコードです。
    $str の前の「''」は、シングルクオーテーションが二個です。
    $str = str_replace(array("\r", "\n"), '', $str);
    \r だけを削除するときは次のように書きます。
    $str = str_replace("\r", '', $str);
  4. 出力が終われば fclose して下さい。
    これでカレントフォルダー(実行中のディレクトリ)にファイルが作成されます。
        fclose($fp);
        print "test.txt Complete\n";
    
  5. コマンドプロンプトの type コマンドで "test.txt" を印字してみました。
    全角文字(日本語)が使われていないので、文字化けせずに印字されました。
    C:\DATA\PHP>type test.txt
    2
    86
    70
    94
    16
    92
    83
    96
    28
    5
    

フォルダーを指定

  1. カレントディレクトリから相対的にディレクトリ(フォルダー)を指定して書き出すことも出来ます。
    <?php
        // test.txt に 0~100 の乱数を書き出す
        if (!($fp = fopen("../../tmp/test.txt","w")))
        {
            die('test.txt write open error');
        }
        for($i=0; $i<10; $i++)
        {
            fputs($fp, rand(0,100)."\r\n");
        }
        fclose($fp);
        print "test.txt Complete\n";
    ?>
    
  2. また \tmp フォルダーは c:\tmp に存在するので、次のように書くことも出来ます。
    <?php
        // test.txt に 0~100 の乱数を書き出す
        if (!($fp = fopen('c:\tmp\test.txt',"w")))
        {
            die('test.txt write open error');
        }
        for($i=0; $i<10; $i++)
        {
            fputs($fp, rand(0,100)."\r\n");
        }
        fclose($fp);
        print "test.txt Complete\n";
    ?>
    
  3. ファイルを追加モードでオープンするときは "a+" を使います。
    $fp = fopen("test.txt","a+");
    
    ファイルをロックするときは LOCK_EX を設定します。
    これ以降、他のプロセスからはアクセスできません。
    flock($fp, LOCK_EX);
    
    ファイルをアンロックするときは LOCK_UN を設定します。
    ロックしたときは他のプログラムから参照出来なくなるので、処理が終わり次第アンロックして下さい。
    flock($fp, LOCK_UN);
    
  4. ファイルの削除は unlink() を使います。
    <?php
    if (unlink($file))
    {  echo $file.'の削除に成功しました。';  }
    else
    {  echo $file.'の削除に失敗しました。';  }
    ?>
    

前田稔の超初心者のプログラム入門
PHP Program