[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/
*********************************************