カレンダー
<< November 2024 >>
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
最近のエントリー
最近のコメント
最近のトラックバック
カテゴリー
月別アーカイブ
リンク
その他

ブログの開発始めちゃった
ブログの開発、始めちゃった。
まあ、最低3ヶ月はかかるなあ。途中で挫折するかもしれんが、、、
名前は、なんにしよう。
1.まっすぐに、
 餓飢魂ブログ
2.どっかの2番煎じだが、
 gakiblo
3.2とあまり変わらんが、ちいと下品に、
 餓鬼風呂 (ガキブロ、読みます)
4.あと、
 魂風呂 (タマブロ、と読みます)

全部くだらねえが、3か4の路線か。
ちなみに、soapbox(石鹸箱)って、英語で、「街頭演説する際に台にする、石鹸出荷用の箱」、という意味があるんだよね。だから、「風呂」とかで、下品だと思ってしまうのは、私が下品なだけ。
というか、それでうなずいた、あなたも、下品(笑)。

で、続きを読むを押すと、コンピュータチックは話。 以下のPHPのプログラムは、意図したとおりに動きません。(これで、長い時間はまった。)
少なくとも、PHPの4.4.2では。
なぜか分る?>見てる人。

main.php
    require('sub.php');
  writelock();
 /* ここで、ロックがかかってることを前提に処理する。
 ?>
sub.php
    function writelock(){
  $fp = fopen( 'lock.dat');
  flock( $fp, LOCK_EX );
  }
 ?>

ちなみに、こういう目的で、flockが使えない場合もあることも分った。(prefork使ってないと使えないとか。)
でも、これは、別の理由。
解答は、、、コメントを待つ!>某後輩
コメント#63

↓とかマニュアルに書いてありますけど…

&gt;いくつかのオーペレーティングシステムでflock() はプロセスレベルで
&gt;実装されています。ISAPIのようなマルチスレッド 型のサーバーAPIを
&gt;使用している場合、同じサーバーインスタンスの並 列スレッドで実行
&gt;されている他のPHPスクリプトに対してファイルを保 護する際に
&gt;flock()を使用することはできません!

違いますかね~(汗)
|某後輩| Wed,Feb- 8 22:17|
コメント#64

違う。
&gt; ちなみに、こういう目的で、flockが使えない場合もあることも分った。
&gt; (prefork使ってないと使えないとか。)
って書いたよね。あくまで、flockが、使えない環境があるという話。

今回は、このプログラミング自体が間違ってるという、ことなんだが。

あともう一個ヒント。
「リソース」
ヒント出しすぎかな?
|たなか| Wed,Feb- 8 22:58|
コメント#65

しゃあないなあ。
もうひとつ、ヒント。
以下のようなプログラムなら、動きます。
main.php
 &lt;?php
  require(\'sub.php\');
  $lock = writelock();
 /* ここで、ロックがかかってることを前提に処理する。
unlock($lock);
 ?&gt;
sub.php
 &lt;?php
  function writelock(){
    $fp = fopen( \'lock.dat\');
    flock( $fp&#44; LOCK_EX )
    return $fp;
  }
  function unlock($fp)}
    fclose($fp);
  }
 ?&gt;
|たなか| Thu,Feb- 9 12:13|
コメント#66

ようやくわかりました。
↓とかでも動きますよね。

&lt;?PHP
writelock();
/* ここで、ロックがかかってることを前提に処理する。*/

function writelock(){
global $fp;
$fp = fopen( \'lock.dat\'&#44;\'a+\');
flock( $fp&#44; LOCK_EX );
}
?&gt;

使わないリソースは(ロックを含めて)即開放するという大前提があったとは…
「リソース」ってヒントは、マニュアルの↓を見ろって事だったんですね。

&gt;リソースの開放
&gt;PHP4のZendエンジンに導入されたリファレンスカウンティングシステム
&gt;のおかげで、あるリソースがもう参照されなくなった場合に(Javaと全く
&gt;同様に)、そのリソースは自動的に削除されます。この場合、このリソ
&gt;ー スが作成した全てのリソースはガーベッジコレクタにより開放され
&gt;ます。 このため、free_result 関数を用いて手動でメモリを
|某後輩| Thu,Feb- 9 13:59|
コメント#67

あぁ、切れてる…(汗)

マニュアルのここの事でした。
http://jp.php.net/manual/ja/language.types.resource.php

いい勉強になりました~
|某後輩| Thu,Feb- 9 14:02|
コメント#68

完璧!100点。
|たなか| Thu,Feb- 9 22:45|
コメントする
お名前:

メール:

URL:

コメント:

トラックバック
この記事へのトラックバックURL:
これまでに受信したトラックバックはありません。

処理時間0.961秒