[PHP-users 2342] Re: php3 で10人同時にファイルアップロードすると異常。
KIM
php-users@php.gr.jp
Sat, 29 Sep 2001 15:34:44 +0900
木村です。
早速の回答、ありがとうございます。
Sat, 29 Sep 2001 14:45:23 +0900 頃の、
"[PHP-users 2341] Re: php3 で10人同時にファイルアップロードすると異常。" において、
"Hidenori GOTO <hidenorigoto@feynwalker.com>"さんは書きました:
> 何も動作検証しておりませんので、はずしている可能性が大きい
> ですが。
> > // 一意のID生成
> > $queryMessage = "EXEC GETUNIQID";
> > $resultMessage = pg_exec($connection, $queryMessage);
> > $maxMessageId = pg_result($resultMessage, 0 , 0);
> >
>
> 上記のあたりの処理は、テーブルのロックを行わないと、スク
> リプトが同時に実行された場合、重複する $maxMessageId が発生
> するはずです。
>
> $maxMessageId が同じだと、格納先パスが同一になってしまうん
> ですよね、おそらく。
格納先は、固有に割り振られているようです。
CREATE PROCEDURE GETUNIQID ()
AS
BEGIN TRANSACTION
SELECT id FROM UNIQID WITH (TABLOCKX) WHERE keyid = 0
UPDATE UNIQID SET id = id + 1 WHERE keyid=0
COMMIT TRANSACTION
UNIQIDテーブルは、keyid INTEGER,id INTEGER です。初期値は両方0です。
テーブルの排他ロックを指定しますので、大丈夫かと思われます。
また、返却されている値をlogに吐き出して、一意のIDが返却されていることも
確認済です。
*********************************************
木村正人[kim] E-Mail kim@ist.fujitsu.com
(株)富士通インフォソフトテクノロジ 沼津事業所
private Web http://www.izu.co.jp/~kim/
*********************************************