[PHP-users 30622] copy()後に一時的にファイルへアクセスできなくなる

Seiki Sugawara Sugawara-S @ mail.dnp.co.jp
2006年 10月 31日 (火) 09:11:03 JST


菅原と申します。お世話になります。

Windows Server 2003 の IIS 6.0 + PHP 4.4.4 (ISAPI) の Web システムにて、
サーバー内で複製したファイルに対してアクセスしようとすると、アクセス側
のプログラムで以下のシステムエラーが発生する場合があります。

エラーNo:32
プロセスはファイルにアクセスできません。別のプロセスが使用中です。

ファイルの複製処理には PHP の copy() 関数を利用しており、戻り値には
上記エラー発生の有無に関係なく TRUE を返してきます。

ファイルアクセス解析ツール Filemon にて copy() 関数実行時のログを解析
したところ、複製元と複製先ファイル共に CLOSE されない場合があることを
確認しました。CLOSE されないと上記エラーが発生するようです。

IIS 6.0 + PHP 5.1.6 (ISAPI) でも再現しています。
エラー発生後しばらく待てばファイルへのアクセスが可能になります。
また、サーバーの負荷を掛けるとエラーの発生率は高くなる傾向にあります。

一方、以下のサーバー構成の場合では、エラーは発生しておりません。
・Apache 2.0.58 + PHP 4.4.4
・IIS 6.0 + PHP 4.4.4 (CGI版)

上記現象を見たことがある方がいらっしゃいましたら
発生の原因と回避方法をご教授いただきたく思います。

以上、宜しくお願いいたします。



PHP-users メーリングリストの案内