PHP のフロック ファイル lock_php の基本の詳細な紹介
flock
(PHP 4、PHP 5)
flock — 軽量の勧告ファイル ロック
説明
bool flock ( int $handle , int $operation [, int &$wouldblock ] )
PHP は、勧告的な方法ですべてのファイルをロックする軽量の方法をサポートしています (つまり、アクセスするすべてのプログラムが同じ方法でロックする必要があります。そうしないと機能しません)。
注:
Windows では flock() が強制されます。
flock() オペレーションのハンドルは、開いているファイル ポインタである必要があります。
共有ロック (プログラムの読み取り) を取得するには、operation を LOCK_SH に設定します (PHP 4.0.1 より前のバージョンでは 1 に設定)。
排他ロック(プログラムの書き込み)を取得するには、操作を LOCK_EX に設定します(PHP 4.0.1 より前のバージョンでは 2 に設定)。
ロック (共有または排他) を解放するには、操作を LOCK_UN に設定します (PHP 4.0.1 より前のバージョンでは 3 に設定)。
ロック時に flock() をブロックしたくない場合は、操作に LOCK_NB を追加します (PHP 4.0.1 より前のバージョンでは 4 に設定)。
flock() を使用すると、任意のプラットフォーム (ほとんどの Unix 派生製品や Windows も含む) で使用できる単純な読み取り/書き込みモデルを実装できます。ロックがブロックされる場合 (EWOULDBLOCK エラー コードの場合)、オプションの 3 番目のパラメーターは TRUE に設定されます。ロック操作は fclose() によって解放することもできます (コードの実行が完了すると自動的に呼び出されます)。
成功した場合は TRUE を返し、失敗した場合は FALSE を返します。
例 #1 flock() の例
$fp = fopen("/tmp/lock.txt", "w "); if (flock($fp, LOCK_EX)) { // 排他的ロックを実行
fwrite($fp, "ここに何かを書き込む ");
flock($fp, LOCK_UN); // ロックを解放} else {
echo "ファイルをロックできませんでした!";
}
fclose($fp);
?>
注:
flock() にはファイル ポインタが必要なため、書き込みモードで開くファイルへのアクセスを保護するために特別なロック ファイルを使用する必要がある場合があります (fopen() に「w」を追加します)関数 " または "w ")。
警告
flock() は、NFS およびその他の一部のネットワーク ファイル システムでは使用できません。詳細については、オペレーティング システムのマニュアルを確認してください。
一部のオペレーティング システムでは、flock() がプロセス レベルで実装されます。マルチスレッド サーバー API (ISAPI など) を使用する場合、ファイルを保護するために flock() に依存することができない場合があります。これは、ファイルが同じサーバー インスタンス内の他の並列スレッドで実行されている PHP スクリプトによって処理される可能性があるためです。
flock() は、FAT やその派生物などの古いファイル システムをサポートしません。したがって、この環境では常に FALSE が返されます (特に Windows 98 ユーザーの場合)。
PHP でのファイル ロック関数 flock 関数の使用法の概要:
構文:
bool flock (int $handle, int $オペレーション [, int &$wouldblock ])
flock() オペレーションのハンドルは、開いているファイル ポインタでなければなりません。
1. 共有ロック (リーダー) を取得するには、operation を LOCK_SH に設定します (PHP 4.0.1 より前のバージョンでは 1 に設定)
2. 排他ロックを取得するには(ライター)、操作を LOCK_EX に設定します (PHP 4.0.1 より前のバージョンでは 2 に設定)
3. ロック (共有または排他) を解放するには、操作を LOCK_UN に設定します (PHP 4.0.1 より前のバージョンでは)
4. ロック時に flock() をブロックしたくない場合は、操作に LOCK_NB を追加します (PHP 4.0.1 の以前のバージョンでは 4 に設定)
以下を参照してください。コード:
a.php
$file = "temp.txt";
$fp = fopen($file, 'w');
if(flock($fp, LOCK_EX)){
fwrite( $fp, "abc");
sleep(10);
fwrite($fp, "123");
flock($fp, LOCK_UN);
}
fclose($ fp);
?>
b.php
$file = "temp.txt";
$fp = fopen($file, 'r');
エコー fread($fp, 100);
fclose($fp);
?>
a.php を実行した後、すぐに b.php を実行すると、次の出力が表示されます。
abc
a.php が実行されるまで待ってから、b.php を実行すると、次の出力が表示されます。
abc
>123
明らかに、a.php がファイルを書き込むとき、データが大きすぎて時間がかかります。このとき、b.php は不完全なデータを読み取ります。b.php を修正した後、
b.php を次のように変更します:
$file = " temp.txt";
$fp = fopen($file, 'r');
if (flock($fp, LOCK_EX)) {
echo fread( $fp, 100);
flock($fp, LOCK_UN);
} else{
echo "ファイルのロックに失敗しました...";
}
fclose($fp); ?>
a.php を実行した後、すぐに b.php を実行します。b.php は a.php が完了するまで (つまり 10 秒後) 待機することがわかります。表示中:
abc
123
読み取り データは完了しましたが、時間が長すぎます。b.php に変更を加える前に、書き込みロックが解放されるまで待つ必要があります。
b.php を次のように変更します。
php
$file = "temp.txt";
$fp = fopen($file, 'r');
if (flock($fp, LOCK_SH | LOCK_NB)) {
echo fread ($fp, 100);
flock ($fp, LOCK_UN);
} else{
echo “ファイルのロックに失敗しました…”;
}
fclose ($fp) ;
?>
a.php を実行した後、すぐに b.php を実行すると、次の出力が表示されます:
ファイルのロックに失敗しました...
ロックが行われたことを証明します上記のように待ち時間が長くなりますが、代わりにファイル障害ステータスを返すこともできます。
Script House 編集者の結論:
ファイルをキャッシュするときは、関連するロックを選択することをお勧めします。そうしないと、読み取られたデータが不完全になったり、データが繰り返し書き込まれたりする可能性があります。
file_get_contents はロックを選択できないようです。デフォルトでどのようなロックを使用しているのかわかりません。とにかく、ロックしないと得られる出力は不完全なデータと同じです。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

Go 言語で同時ファイルを処理する際のファイル システム ファイル ロックとプロセス間ファイル共有の問題の概要: Go 言語では、ファイル システム ファイル ロックやプロセス間ファイル共有など、ファイルへの同時アクセスに対処する必要があることがよくあります。この記事では、Go 言語を使用してこれらの問題に対処する方法と、具体的なコード例を紹介します。 1. ファイル システム ファイル ロック 複数の並行プログラムが同じファイルに同時にアクセスする場合、競合状態やデータの不整合を避けるために、同期にファイル システム ファイル ロックを使用できます。 Go 言語が提供するのは

Linux では、flock、fcntl、lockfile、flockfile など、一般的に使用されるファイル ロック コマンドがいくつかあります。これらのコマンドは、マルチプロセスまたはマルチスレッド環境でファイルへの相互排他的アクセスを提供するために使用されます。これらのコマンドの詳細なチュートリアルは次のとおりです。 flock コマンド: flock コマンドをシェル スクリプトで使用して、ファイルの排他的ロックを実行できます。ファイルをロックするには、次の構文を使用します。 flock [options] filename コマンド たとえば、file.txt という名前のファイルをロックしてコマンドを実行するには、次のコマンドを実行します。 flockfile.txtls - lflock コマンドは、実行中にファイルをロックします。ロックはコマンドの実行完了後に自動的に解除されます。 fcnt

PHP は、ファイル処理を含む多数の Web アプリケーションの開発に使用される、広く使用されているプログラミング言語です。これらの Web アプリケーションでは、データの競合を防ぐために、同じファイルへの同時アクセスを避けることが必要な場合があります。ファイルのロックは、同時アクセスに対する解決策です。ファイル ロックは、複数のプロセスまたはスレッドが同じファイルに同時にアクセスすることを防ぐために使用されるメカニズムです。プロセスがファイルをロックすると、ロックを解除するまで他のプロセスはファイルにアクセスできなくなります。このロックを使用すると、ファイルが

Golang におけるファイル ロックの原理と応用: オペレーティング システムにおいて、ファイル ロックは、複数のプロセスによって同時にファイルまたはリソースがアクセスまたは変更されないように保護するために使用されるメカニズムです。 Golang では、同期パッケージが提供する Mutex ロックを使用してメモリ内のデータ構造をロックできますが、複数のプロセスが同じファイルの読み取りと書き込みに関与する場合、データのセキュリティを確保するためにファイル ロックを使用する必要があります。安全。 Golang のファイル ロックの種類には、os パッケージによって提供されるファイル構造の F を使用できます。

1. 効率的なファイル読み取りでは、BufferedReader/BufferedWriter を使用して読み取りと書き込みの効率を向上させます。BufferedReader と BufferedWriter は、一度に 1 行のテキストを読み取りまたは書き込みできる効率的な文字ストリームです。これは、InputStream または OutputStream を直接使用するよりも効率的です。 BufferedReaderreader=newBufferedReader(newFileReader("file.txt"));BufferedWriterwriter=newBufferedWriter(newFileWriter("

Golang プログラミングにおけるファイル ロックの重要性と使用法 マルチスレッド プログラミングでは、ファイルの読み取りおよび書き込み操作が非常に一般的です。並行プログラムでは、複数のゴルーチンが同時にファイルの読み取りと書き込みを行うと、ファイルの内容の混乱やデータの損失が容易に発生する可能性があります。この状況を回避するには、ファイル ロックを使用して、ファイル操作の原子性と安全性を確保します。この記事では、Golang プログラミングにおけるファイル ロックの重要性と具体的な使用方法を、いくつかのコード例を示しながら紹介します。書類

Golang を使用してファイル ロックを実装するためのベスト プラクティス: 開発中、複数の goroutine またはプロセスによって同時にアクセスされたときにファイルが正しく動作できるようにするために、ファイルをロックする必要がある状況によく遭遇します。 Golang では、ファイル ロックの実装は複雑ではありません。この記事では、Golang を使用してファイル ロックを実装する方法のベスト プラクティスを、具体的なコード例を含めて紹介します。ファイル ロックの役割 ファイル ロックは、オペレーティング システム レベルでファイルをロックするメカニズムであり、ファイルが確実に同時にアクセスされるようにするのに役立ちます。

タイトル: Golang でファイル ロックを使用してデータ セキュリティを確保する方法 プログラミング プロセスにおいて、データ セキュリティの確保は重要な部分です。 Golang では、データ操作の原子性とスレッドの安全性を確保するために、ファイル ロックを使用して共有リソースへのアクセス制御を実装することがよくあります。ファイル ロックにより、オペレーティング システム レベルでのプロセス間の相互排他的アクセスが確保され、データ競合状態やリソースの競合が回避されます。この記事では、Golang でファイル ロックを使用してデータのセキュリティを確保する方法と、具体的なコード例を紹介します。 1.書類
