【備忘録】PHPでPharDataで作ったtarを消すと「Text file busy」になる現象

どうもお久しぶりです。
ゴエです。

なんかこのブログ1年に1回更新ってレベルになってきたんで、開発してた時に詰まった所とか
備忘録として残そうかなぁって思ったんで記事にしましたw

今回は、ログファイルやバックアップCSVを作成する時に容量を極力減らそう作成したファイルをtar.gzに圧縮する際に使った
「PharData」クラスで躓いた所があったので備忘録として残しておく。

起こった現象

今回バックアップ系ファイルを圧縮するために初めて「PharData」クラスを使ってtar.gzファイルを作成した。
PharDataクラスを使ってtar.gzファイルを作成する際にtarファイルも一緒に作成されるらしい。
tarは不要なので他のサイトを参考にunlink関数を使って消そうとしたら「Text file busy」という警告が出て消えなかった。
以下が実際に行って警告が出た記述。

環境はvagrantで構築したcentOS、PHP7.3
以下、試したサンプルソース

        // ファイルのパスを設定
        $file = "./sample.csv";
        $gzFile = "./sample.tar";
        // PhareDataを初期化
        $pd = new PharData($gzFile);
        try {
            $pd->addFile( $file, "sample.csv" );
            $pd->compress( Phar::GZ );
        }catch (Exception $e){
            echo $e->getMessage();
        }
        // 不要なファイルを削除する
        unlink($gzFile); // Text file busy警告が出て消えない

対策

色々試した結果、どうやらPharDataを初期化した変数を解放しないと内部ロックがかかるらしいので
unlinkでファイルを削除する前に変数を削除するようにした。

        // ファイルのパスを設定
        $file = "./sample.csv";
        $gzFile = "./sample.tar";
        // PhareDataを初期化
        $pd = new PharData($gzFile);
        try {
            $pd->addFile( $file, "sample.csv" );
            $pd->compress( Phar::GZ );
        }catch (Exception $e){
            echo $e->getMessage();
        }
        // 不要なファイルを削除する
        unlink($pd); // PharDataを初期化した変数を削除
        unlink($gzFile); // tarファイルが消せる

これでtarが消せた。

書いた人
ゴエ

書いてくれた人:みお。さん(@61167)
時々お江戸(東京)に出没する熱血系作品が好きな人。
なんか47都道府県に居るらしい(友人談)。
PHPをちょくちょく弄る人。

ゴエをフォローする
PHP 開発
スポンサーリンク
ゴエをフォローする
スポンサーリンク
ゴエぶろ
タイトルとURLをコピーしました