タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

PHPと排他制御に関するxnightsのブックマーク (7)

  • flock(), fcntl() - ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

    Xhwlayとか、YakiBikiで使おうと思ってたチケットトークンの扱いで気になってたものの一つに、flockの範囲の扱いがあった。つまるところ、ファイルをどうロックしてどこでアンロックするのが良いのか?という話。 例えば、次に示すPHPコードはチケットの扱いに問題が発生する。 <?php // チケットIDを取得。ここの部分は話題の範囲外なので省略。 $tickt_id = ... ; // 現在時刻の取得 $now = time(); // チケットファイル名を返却する関数。同様に実装省略 $ticket_file = get_ticket_file($ticket_id); // チケットの最終更新時刻を取得 $mtime = filemtime($ticket_file); // (A1) if ($mtime === false) { // 存在しない場合は無効なチケットIDと

    flock(), fcntl() - ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)
  • http://testwiki.xn--xnq.jp/index.php?PHP%2F%A5%D5%A5%A1%A5%A4%A5%EB%A5%ED%A5%C3%A5%AF%2F%C0%DF%B7%D7

  • PHP/ファイルロック - TestWiki - PukiWiki Plus!

    flockはアドバイザリロック flockはプロセス間の共同掲示板のように動作します。すなわち、flockで排他ロックしても、他のプロセスがflockでロックを行わずに同じファイルにアクセスすることが出来てしまいます。 同じファイルにアクセスしうる、全てのプロセスがflockを確認して初めて、flockはロックとして機能します。 ▲ ▼ 組み込み関数でのロック ファイルポインタを使わずに、ファイル名でアクセスできる組み込み関数が多くあります。 file() file_get_content() これらの関数でアクセスする際にも、ロックを必要とすることが在るかも知れません。 この場合、flockを直接使うことは出来ませんが、flockがアドバイザリロックである性質を利用して、次のように安全なロックを実現できます。 この時、fileが新たに開くファイルポインタに対しては、flockを使わず

  • @ITのPHPの記事が突っ込みどころ満載 - 暴言満載

    サンプルで理解! フォームデータの受け渡し 1ページ目 menu.phpは、排他処理を扱ったようですが、早速ひどいです。 「一般的なオンラインシステムでは同時処理に対するデータの矛盾が発生しないよう留意する必要があります。」と書いているので、単にファイルが壊れなければいいという考えではないみたいなのに。 (1)flockするまえにデータを読むな (2)file_existsのあとでwモードでファイルを開くな (3)set_file_bufferはOSのバッファリングは関係ない (4)fcloseの前にflock解除するな (1)について。ファイルにはあらかじめ 1000000004 と書いてあるとします。 ユーザー1が4行目でファイルを開く ↓ ユーザー1が5行目で $order_no に 1000000005 を代入 ↓ ユーザー2が4行目でファイルを開く ↓

  • 排他処理に stream_set_write_buffer は不要じゃね? - 暴言満載

    PHPの話。 「set_file_buffer (stream_set_write_buffer) でバッファを0にしないと排他処理が正常に行われない」なんて感じの記述がgoogleで見つかったり、PHPのユーザーの間で常識のように語られたりするんですが、なんなんでしょうかこれ。 stack*の連載PHP set_file_buffer という関数では、書き込みバッファを 0 にするという操作をしています。なぜこんなことをするかというと、通常、あるファイルに書き込みをする際には、「バッファ」...

  • http://www.res-system.com/weblog/item/359

  • 関数とファイルロック 【PHP講座】

    print test($a,"D");では、関数test()を実行しその結果が出力されます。returnが返される結果です。 test内の$bは中身が宣言されていないので空になります。 test内の$cはグローバル宣言されているので、元の$cの中身が格納されています。 test内の$dは引数として渡された$aの中身が格納されています。 test内の$eは引数として渡された"D"が格納されています。 インターネットでは、同じCGIが同時に実行されることがあります。この時、同時にファイルに書き込もうとしたときにファイルが壊れたり、内容がおかしくなることがあります。それを防ぐためにファイル処理は同時に行わせずに、順番に処理を行うようにする必要があります。 ロック処理の流れとしては、 1.ファイル処理が実行されていないか確認する 2.実行されていれば、それが終わるのを待つ。 3.実

  • 1