0

以下のコードが正しく書かれているか知りたいです。ファイル内に書き込み、問題が発生する可能性があることを予測しようとする安全な重要部分を作成しようとしています。

注意すべきことはありますか?つまり、群れで何か問題が発生した場合に備えて、try-catch ステートメントを作成して、ファイルを閉じてロックを解除できるようにしました。他に注意すべきことはありますか?

        /*
         * Write to file
         */
        if ( file_exists($sPath) )
        {
            //CRITICAL PART (start)
            $oFile = fopen($sPath, "a");

            //If could not open file then just return
            if ( $oFile == false ) return;

            try{
                //Acquire lock
                if ( flock($oFile, LOCK_EX) )
                {
                    //Append a new line
                    fwrite($oFile, "\n"."sometext");
                }
            }catch(Exception $e){
                //Release lock before exiting
                fclose($oFile);
                return;
            }
            //Release lock
            fclose($oFile);
            //CRITICAL PART (end)
        }
4

3 に答える 3

2
file_put_contents($sPath,"\n"."sometext", FILE_APPEND);

追加にはロックは必要ないと思います。ファイルシステムはそれをすべて正しく処理します。
しかし、私は間違っている可能性があります

于 2013-03-13T08:49:18.330 に答える
1

このfopen関数は成功時またはエラー時にファイルポインタリソースを返すため、FALSEトリプル比較===を使用できます。

if ( $oFile === false ) return;
于 2013-03-13T08:51:35.787 に答える
1

ネイティブphp関数は例外をスローしません(少なくとも大多数は例外をスローしません... OOPネイティブコードの新しい関数は例外をスローDateTimeしますtry/catch. すべての関数の戻り値を確認し、そうでないことを確認する必要がありfalseます。それ以外は、かなりうまく管理されていると思います。

補足として、ファイルのロックはLinuxでは推奨されるため(他のプラットフォームではわかりません)、ファイルの実際のロックを取得していません。つまり、他のプロセスが、「ロック」しているファイルを変更/上書き/削除する可能性があります。

于 2013-03-13T08:49:14.850 に答える