[PHP-users 14388]Re: requireとflockについて

WADA Masashi wada @ hh.iij4u.or.jp
2003年 3月 31日 (月) 13:45:26 JST


 和田です。

いちろう たこす wrote:
>画面共通で頻繁に呼び出すcommon.incファイルをrequireで呼
>び出して使っている場合に、common.inc自体をflockを使って
>下記のように修正した場合、例えば書き込んでる最中にrequir
>eされたりしたらどうなるんでしょうか?

 実際に試してみたらどうでしょう?
 例えばサーバー側に次のようなスクリプトを用意します。クライアン
ト側では、Webブラウザで test1.php にアクセスし、続けて(以下の例
では10秒以内に)別ウィンドウから test2.php にアクセスします。

--- test1.php
<?php
  $fp = fopen("dummy.inc", "r+");
  flock($fp, LOCK_EX);
  print "sleep...";
  sleep(10);
  flock($fp, LOCK_UN);
  fclose($fp);
  print "end.";
?>

--- test2.php
<?php
  print "require...";
  require("dummy.inc");
  print "end.";
?>

--- dummy.inc
<?php
  //dummy
?>

 手元で試したら、Windows2000/PHP4.3.1 の環境では test2.php の結
果は次のようになりました。

require...
Fatal error: input in flex scanner failed in c:\www\htdocs\dummy.inc on line 1

 また NetBSD1.6/PHP4.2.2 の環境では、test2.php の結果は、
test1.php の結果が表示される前に

require...end.

と出てきます。結局のところ、require する前に、何らかの処理が必要
になるでしょう。


----
和田雅志 (WADA Masashi)
wada @ hh.iij4u.or.jp



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