• ベストアンサー

Perl-CGI で排他制御はどうすればよいのか?

このカテゴリでは始めて質問します。 今 Perl-CGI でアクセス・カウンタを自作しようとしています。 今まではレンタルしたカウンタを使っていましたが複数のページで 個別に使えないため自作することを決めました。 そこで質問です。 アクセス・カウンタで重要な排他制御はどのように行いますか? 今ネット検索で見つけたものがディレクトリを作成しておく方法です。 これ以外に何か上手いやり方はありますか? Perl は入門したばかりです。 どうぞよろしくお願いいたします。 排他制御で気をつけるべき点がありましたら一緒に教えて下さい。 それでは回答をお待ちしています。

  • Perl
  • 回答数3
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.3

> (1)レンタル・サーバーで flock 命令が使えるかどうかは >   どのように調べればよいのでしょうか? レンタル・サーバーのドキュメント、マニュアル、FAQなどで調べてください。 たいていはflockの使用の可否がどこかに書かれています。 perl上から確認したい場合は、 flockを使ったperlプログラムを実際に動作させれば サポートされていない環境ではプログラムが異常終了する(らしい)ので それで分かると思います。 異常終了されては困る場合は、 致命的エラーをトラップできるevalを使います。 CGI Saloon - ロックについて http://www1.plala.or.jp/bagi/labo/lock.html 同時書き込みの防止 - Making of TinyBoard http://www.aikis.or.jp/~s-suzuki/cgilabo/tinyboard/kouza/002.html > (2)flock 命令が使えたとして Perl-CGI を書くと閲覧者の >   環境(OS,ブラウザ)には関係なく正しく排他制御は出来ますか? Perl/CGIはサーバー上で動作するものです。 なのでクライアントサイドの環境は無関係です。

Oh-Orange
質問者

お礼

再回答有り難うございます。 レンタル・サーバーの FAQ に flock については記述されていないため この後『お問い合わせ』メールで確認してみます。 >Perl/CGIはサーバー上で動作するものです。 >なのでクライアントサイドの環境は無関係です。 やはりクライアント環境には無関係なのですね。 分かりました。 いろいろとアドバイスを有り難うございました。 これで質問を締め切ります。

その他の回答 (2)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.2

> Perl-CGI の排他制御はディレクトリで行うのが一般なのでしょうか? 「perl 排他制御」で検索したなら既に[1]は読んでいると思いますが、 そこに書かれているように方法は色々あります。 どの方法を選択するかですが、 私は、flockが使える環境であれば素直にflockを使って良いと思います。 flockはまさに排他制御のための関数で、使えるのならこれが一番簡単で確実なはずです。 しかし、flockが使えない環境でも使える汎用性を求めるならmkdirを使うことになるでしょう。 mkdirを使ってできるだけ信頼性の高いファイルロックを実現するためには [3]や[4]が役に立つと思います。 排他制御で気をつけるべき点については、[2]を読むことをお勧めします。 [1] Perlの排他制御 (flock,open,symlink,mkdir,rename) http://homepage1.nifty.com/glass/tom_neko/web/web_04.html [2] CGIやDBのロックと同時実行制御: CANO-Lab http://jn.swee.to/cano/lock/index.shtml [3] ファイルロックについて/排他処理/CGI/Perl http://tech.bayashi.net/pdmemo/filelock.html [4] Perlメモ#排他制御(ファイルロック)をする - 大崎 博基(OHZAKI Hiroki) http://www.din.or.jp/~ohzaki/perl.htm#File_Lock

Oh-Orange
質問者

お礼

回答有り難うございます。 >そこに書かれているように方法は色々あります。 そうですね。 最初は symlink、次に flock で排他制御を行うサイトを発見しました。 その後にディレクトリによる方法などなど。 >私は、flockが使える環境であれば素直にflockを使って良いと思います。 同感。 >flockはまさに排他制御のための関数で、使えるのならこれが一番簡単で確実なはずです。 flock 命令が使えるかどうかは、どのように調べればよいのでしょうか? >mkdirを使ってできるだけ信頼性の高いファイルロックを実現するためには >[3]や[4]が役に立つと思います。 [4]は昨日読みました。ここが詳しいですね。参考になりました。 文字数の関係で補足に続きます。

Oh-Orange
質問者

補足

続き。 (1)レンタル・サーバーで flock 命令が使えるかどうかは   どのように調べればよいのでしょうか? (2)flock 命令が使えたとして Perl-CGI を書くと閲覧者の   環境(OS,ブラウザ)には関係なく正しく排他制御は出来ますか? 上記の2点に付きお聞きしたいです。 再回答をお待ちしています。 別の方でも良いのでお願い致します。

noname#39970
noname#39970
回答No.1

http://www.google.co.jp/search?q=perl%20%E6%8E%92%E4%BB%96%E5%88%B6%E5%BE%A1&hl=ja&lr=lang_ja ディレクトリ作成がOS依存を減らす為に最も有用であるらしいからそのままで良いと思う。 そうでないならサーバで利用可能そうである排他制御で一番早そうなのを使ったら良さそうだけど…いつ環境が変わるか判らないしやっぱりディレクトリが良いと思う・・・

Oh-Orange
質問者

お礼

回答有り難うございます。 『perl 排他制御』キーワードで検索すればよかったのですね。 これから読んでみます。 SAYKA さん有り難うございました。 Perl-CGI の排他制御はディレクトリで行うのが一般なのでしょうか? Unix 系は良く分かりませんのでそちらに精通してる方がいましたら 意見をお聞きしたいです。

関連するQ&A

  • 排他制御について

    質問があります。 Access2003とSQLserver2005の排他制御についてです。 複数のPCから共有してアクセスし、レコード単位に排他制御したいといった場合、 排他制御に適しているのはどちらでしょうか? 「Accessではこういう問題があり適さない」などあったら教えてください。 よろしくお願いします。

  • Accessでの排他制御

    アクセスの排他制御に関して質問です。 ネットワーク上のサーバーにアクセスのMDBを置いて、複数の人が更新目的で開く場合、排他制御はどうなるのでしょうか? テーブル単位で、ロックが掛かるのでしょうか? もしそうであれば、複数の人が同時に使えないのですが、回避策はありませんでしょうか?

  • ACCESS97での排他制御について

    今、仕事の都合でACCESS97を利用して、排他制御のある システムを作成しようと試みているのですが、なかなか上手くいきません。 DB、APをネットワーク上に置き、共有するテーブルを、DB→APに リンクをはっている状態です。 様々なIT上で調べたのですが、どれもACCESS97で排他制御は不可能 といった内容のものしかありません。。 どうしても、不可能なのでしょうか?もし、何かご存知でしたら、教えて頂け ないでしょうか??

  • 排他制御について

    初めまして。 今回初めての投稿になります。 至らないことが多々あるかと思いますがその時は、ご指摘ください。 本題に、入りますと 今アクセスカウンターを作成してるのですけど。 サーバーでflock関数が使えないようなので、排他制御をmkdirでしようと色々調べていたのですが 下のようなサンプルを見つけ色々いじってみたんですが(下記はサンプルのままです。途中にechoがあったので消しておきましたが。) 疑問があります。 $dirnam = "lock"; $scnt0 = 0; while(mkdir($dirnam) === FALSE){ if ($scnt0++ >= 3){ rmdir($dirnam); exit(); } sleep(1); } $scnt0 = 0; while(mkdir($dirnam) === FALSE){ if ($scnt0++ >= 3){ rmdir($dirnam); exit(); } sleep(1); } rmdir($dirnam); 1:3行目は、下記の用に記述では何か問題があるのでしょうか? if(mkdir($dirnam) === FALSE){ while($sct0++ >= 3){ rmdir($dirnam); exit(); } sleep(1); } 2:この構文だと同時アクセスした時に、仮に最初のアクセスが3秒以上かかった場合(ほぼそんなことは、ないだろうと思いますが)lockディレクトリーを消してしまう可能性があるかどうかです。 PHPは、初心者です。 よろしくお願いします。 OS:XP サーバー:レンタル(ホスティング) PHPver:PHP5.3.1

    • 締切済み
    • PHP
  • PerlやCGIはそれほど進化していない?

    アクセスカウンターや解析、掲示板などを作りたくて、PerlとCGIを勉強しようと思っています。 これらの書籍を探していると、それほど数もなく、最新でも去年に出版されているものでした。 その前は2009年とかになってしまいます。 これは単純にPerlやCGIは、ここ数年でそれほど変わっていないということなんでしょうか? 古い書籍のもので勉強しても大丈夫でしょうか?

    • ベストアンサー
    • CGI
  • perlでつくったCGIがときどきダウンロードになります。

    はじめまして。 perl初心者です。 perlでつくったCGIがときどきダウンロードになります。 サーバーの設定では、.cgiはcgiファイルである設定はしてあるはずなのですが。。 7時以降の込みあうときなどにごくまれにそうなります。 2年くらいまえもperlをはじめて触ったときにこうなったことがあります。(これはレンタルサーバーだったのですが、) .htaccessを全てのディレクトリにおかなければいけないなどの理由があるのでしょうか? どなたか、情報をお持ちのかたお助けください。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • レンタルCGIの仕組み

    アクセスカウンターなどを貸し出しているサイトを良く見かけるのですが、新規登録するとアカウントとパスワードがメールで送られてきてCGIが使用出来る様になりますが、これってどういう仕組みでやっているのでしょうか? CGIだけでアカウント毎にディレクトリーを作ってCGIを動作させてレンタルサービスをしてるんですか? 共有のレンタルサーバー上でCGIを貸し出すのはどの様な方法があるのでしょうか? 漠然とした質問ですみませんが、ご教授よろしくお願いします。

    • 締切済み
    • CGI
  • HTMLにCGIカウンターを

    初歩的なCGI(Perl)のアクセスカウンターの作り方を学びました。 今まではHTMLでHPを作成していました。そこでトップページにアクセスカウンターを付けたいのですが、当然のことながら今のトップページは「index.html」ファイルです。このファイルにCGIによるアクセスカウンターをつける場合、「index.html」のファイルを一から「index.cgi」ファイルにPerlで書き換えなければならないのでしょうか。今の「index.html」の一部分を書き換えるだけでCGIのアクセスカウンターが設置できないものでしょうか。

    • ベストアンサー
    • CGI
  • perl CGIでの@INC

    たびたびお世話になります。 perl CGIを作っています。作っているCGIとは別のディレクトリにあるファイルをrequireしたいのですが、リモートログインできないレンタルサーバのため@INCのいじり方がわかりません。 こういった場合のrequire方法(あるいはプログラム再利用方法)をお教えください

    • ベストアンサー
    • Perl
  • 排他制御に関して

    こんばんは。お世話になっております。 これまで、質問のタイトルにある「排他制御」というものが「同時アクセスでの不具合を避けるための・・」といった程度の知識しかないまま、DB(MySQL)を利用して会員制のサイトを作っているのですが、全体を見直すべく、いざこの排他制御というものを取り入れようとしてみたところ、手持ちの書籍やこれまで見たサイトでは、ファイルをロック・・・などと言った感じで、DBとの関わりがイメージ出来ず、会員の登録情報の変更ページなどの入力フォームをはじめ、ログインページやDBを用いた検索ページにおいての活用は、どのような手順になるのでしょうか? 些か抽象的な質問になっておりますが、取り掛かりがつかめず、例えばログインページを例にとり、IDとパスワードを入力・DBに問合せ、といった流れでは、どのような手順になるかの全体像だけでもアドバイスいただければと、投函させて頂きました。 お忙しい中恐縮ですが、アドバイスなど頂戴できれば幸いです。宜しくお願い申し上げます。

    • ベストアンサー
    • PHP