![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
関数flock();について調べてたのですが、
結局、イマイチ使い所がわかりませんでした。
とりあえずCGIを手本として以下のロックを作ってみたのですが、
もし、flockを使うとしたらどのように使うのかアドバイスして欲しいと思っています。
↓参考プログラム(echo部は進行を表示するためのもの)
<?php
define ("LOCK_FILE","./lock/lock.txt");
Lock();
Unlock();
//ロック
function Lock(){
if(file_exists(LOCK_FILE)){
if(date(U) - filemtime(LOCK_FILE) > 30){
unlink(LOCK_FILE);
echo("古いロック削除<br>");
}
}
$retry = 5;
while(file_exists(LOCK_FILE)){
if($retry <= 0){
echo ("error<br>");
exit;
}
$retry--;
sleep(1);
}
$lockfile = fopen(LOCK_FILE,"w");
fclose($lockfile);
echo("ロック完了<br>");
}
//アンロック
function UnLock(){
unlink(LOCK_FILE);
echo("ロック解除<br>");
}
?>
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> ということは、このfilenameにロック用ファイルの、上の例で言うlock.txtを参照させればいいんですね。
> そしてその後、排他ロックとロック解除の間で操作したい対象ファイルを弄ればいいと?
> 特にロック用ファイル中に記述する必要はないって事ですよね。
いいえ、間違っています。
flockはファイルをオープンしたときのファイルポインタを設定します。
つまり、ロック用のファイルを自分で用意する必要はありません。PHP側でロック処理をしてくれます。
参考URL:http://php.s3.to/man/function.flock.html,http:// …
この回答への補足
少し出かけていたので返事が遅れました。
ということは、filenameに対象ファイルを当てはめるわけですか?
しかしそれだと、排他ロックエラーの際に、
データが真っ白になってしまう可能性が出てきますよね。
その場合は、エラー時の対処のif部分で、
再度書き直すのが常套ということになるのでしょうか?
質問ばかりでスミマセン。
No.1
- 回答日時:
flock()は開いたファイルに対して排他制御を行う関数です。
ですので使い方としては、
$fp = fopen(filename,"wt") ;
if ( !flock( $fp, LOCK_EX ) )
{
//エラー処理&ファイルクローズ
return ;
}
//ファイルに対する操作
if ( !flock( $fp, LOCK_UN ) )
{
//エラー処理&ファイルクローズ
return ;
}
fclose($fp) ;
という感じになります。
複数の人がほぼ同時にこの処理が動くページにアクセスしたら、先にアクセスした人がファイルに対してロックをかけてしまうので、後にアクセスした人は最初のflockでfalseが返されてエラー処理が実行されます。
この回答への補足
ということは、このfilenameにロック用ファイルの、上の例で言うlock.txtを参照させればいいんですね。
そしてその後、排他ロックとロック解除の間で操作したい対象ファイルを弄ればいいと?
特にロック用ファイル中に記述する必要はないって事ですよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tmpファイルが消えない
-
PHPのif文でその処理を途中で抜...
-
フォントの色を変えるには?
-
CFileDialogの最初のディレクト...
-
Pear::QuickFormの代わりにな...
-
FTPコマンドでディレクトリごと...
-
.phpと.incファイルの違いはな...
-
VB.NETのFTPダウンロードについて
-
拡張子php画像をjpg画像等に変...
-
onedrive にexcelファイルをア...
-
透過PNGが透過されない!!
-
WordPressでテーマのヘッダー画...
-
バッチを用いたフォルダの自動移動
-
phpMyAdminはSSL下でアクセスす...
-
初心者で数当てゲームを作って...
-
SmartyでHTMLソースの変更が反...
-
さくらサーバーにて、phpからメ...
-
「@$変数」の「@の意味は?」
-
C# Excelファイルへの画像挿入。
-
ループの中で mailItemObj.Disp...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
is_fileでファイルが存在してい...
-
文字コードが混在するテキスト...
-
$_GETについて
-
phpファイルを作成するには!!
-
大きいファイルのオープンでエ...
-
PHPのファイルロックについて
-
シムシティDSのファイルについて
-
readfileによる外部HTMLのCSS
-
PHPのメールフォームから別ペー...
-
tmpファイルが消えない
-
Smartyのテンプレート作成方法
-
IE6で拡張子.phpのローカルファ...
-
file()を使う時のファイルロック
-
ログイン認証機能には、どんな...
-
futaba.phpでレス削除のテスト...
-
onedrive にexcelファイルをア...
-
PHPのif文でその処理を途中で抜...
-
フォントの色を変えるには?
-
違法アップロードについて
-
.phpと.incファイルの違いはな...
おすすめ情報