- ベストアンサー
BBSについて
初心者です。BBSを作ろうと思って、kent-webさんのサイトから画像Up可の掲示板のスクリプトをDLしました。http://www.kent-web.com/bbs/joyful.html しかし以下の点がわかりません。 ・ # ロックファイル名 $lockfile = './lock/joyful.lock'; と書いてあるので、lock/joyful.lockというディレクトリをつくったのですが、書き込んでみると、 LOCK is BUSYとでます。ファイルロック形式がよくわからないときは2にしろとかいてあったので2にしてます。 # ファイルロック形式 # → 0=no 1=symlink関数 2=mkdir関数 $lockkey = 2; あと画像をUpする場所はどうやって確保したらよいのでしょうか? どうかご教授おねがいします。m(_ _)m
- SK0
- お礼率91% (270/294)
- Perl
- 回答数4
- ありがとう数6
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
私もkent-webさんの「Joyful Note」使ってます。 まずは正常に設置できたかどうか「チェックモード」を試してみましょう。 http://www.kent-web.com/bbs/joyful.html (一番最後に記載されてます) 【呼び出し例】 ブラウザのURL入力欄にて下記を入力して実行します。 もちろん、xxx.xxx/~user部分は質問者さんの環境に合わせて下さい。 http://www.xxx.xxx/~user/joyful/joyful.cgi?mode=check ※引数に「mode=check」を付けて呼び出します。 下記のように表示されたら成功です。 Check Mode ログファイルのパス:OK ログファイルのパーミッション:OK カウンタ:設定あり カウンタログファイルのパス:OK ロック形式:mkdir ロックディレクトリ:./lock ロックディレクトリのパス:OK ロックディレクトリのパーミッション:OK 画像ディレクトリ:./img/ 画像ディレクトリのパス:OK 画像ディレクトリのパーミッション:OK 過去ログ:設定なし >lock/joyful.lockというディレクトリをつくったのですが joyful.lockはディレクトリではなくファイル名でしょう。ここは何も記載しなくても動作しますよ。 >あと画像をUpする場所はどうやって確保したらよいのでしょうか? アップ画像はjoyful/img内に自動的に保存されますので説明書通りにimgディレクトリを作成すればOKです。 まずは「チェックモード」でエラーがないか確認して下さい。
その他の回答 (3)
- arcsin
- ベストアンサー率70% (28/40)
>* ロックディレクトリのパス:NG → ./lock >* 画像ディレクトリ:NG → ./img/ >はおそらくパーミッションが間違っているからです。 #2さんの回答よりこの部分は間違いですね、ごめんなさい。
お礼
解決しました。 ディレクトリの構成が間違っていました。 ありがとうございます。
補足
# アップロードディレクトリ # → パスの最後は / で終わること # → フルパスだと / から記述する $imgdir = './img/'; # アップロードディレクトリのURLパス # → パスの最後は / で終わること $imgurl = "http://www.xxx.xxx/~xxx/img/"; $imgurl = "./img/"; とあるのですが、このとおりにして、チェックモードにしても下記と同じになります。 ちなみに変更したところは $imgurl = "http://www.xxx.xxx/~xxx/img/";のところだけです。 ディレクトリ構成とパーミッションはマニュアル通りにしました。Upする際はFFFTPを使用しています。
- arcsin
- ベストアンサー率70% (28/40)
kent-web さんのものは使ったことがありませんが、 * ロックディレクトリのパス:NG → ./lock * 画像ディレクトリ:NG → ./img/ はおそらくパーミッションが間違っているからです。 lockディレクトリや,画像をアップロードするディレクトリのパーミッションは 777 等にするのが一般的なので、そうするとうまく動作すると思います。 > lock/joyful.lockというディレクトリをつくったのですが は必要ありません。 lockディレクトリ下のファイルは一度空にしてください。 mkdir方式で、すでに同じ名前のファイルが残っていると、lock is busy が表示されてしまいますので。 その他のlockを試す場合も、lockディレクトリ内を空にしてから試すと、トラブルも減ると思います。
お礼
解決しました。 ディレクトリの構成が間違っていました。 ありがとうございます。
補足
回答ありがとうございます。 lockディレクトリ下を空にしましたが、いまだに lock is busyと表示されます。
エラーメッセージの通り ロックディレクトリのパスと画像ディレクトリの設定が間違っているようです。 ロックディレクトリのパスjoyful/lockの確認と画像ディレクトリの設定joyful/imgを確認して直してください。 あとはパーミッションの設定と転送モードはマニュアルの指示に従って行って下さい。 ※***.gif画像はバイナリモードで転送して下さい。 それでもダメならもう少し詳しくディレクトリ構造をお知らせ下さい。 【ディレクトリ構成例】 public_html / index.html (トップページ等) | +-- joyful / joyful.cgi [705] | joyfullog.cgi [606] | count.dat [606] | jcode.pl [604] | cgi-lib.pl [604] | pastno.dat [606] | +-- img [707] / home.gif | soon.gif | clip.gif | +-- past [707] / 1.dat [606] | +-- lock [707] /
お礼
解決しました。 ディレクトリの構成が間違っていました。 ありがとうございます。
補足
回答ありがとうございます。ディレクトリ構造は上記の通りです。まったく同じです。 ひとつ気になっているのですが、joyfulというディレクトリのパーミッションはどうすればよいのでしょうか?
関連するQ&A
- アップロード失敗
初心者です。BBSを作ろうと思って、kent-webさんのサイトから画像Up可の掲示板のスクリプトをDLしました。http://www.kent-web.com/bbs/joyful.html しかし以下の点がわかりません。 ・アップロードするとエラーがでる。 Upする画像の拡張子は許可してます。 画像の容量も小さく、サーバー側に確認しても Upしても問題ないとの答えが返ってきました。 モードチェック * ログファイルのパス:OK * ログファイルのパーミッション:OK * カウンタ:設定あり * カウンタログファイルのパス:OK * ロック形式:mkdir * ロックディレクトリ:./lock * ロックディレクトリのパス:OK * ロックディレクトリのパーミッション:OK * 画像ディレクトリ:./img * 画像ディレクトリのパス:OK * 画像ディレクトリのパーミッション:OK * 過去ログ:設定なし
- ベストアンサー
- Perl
- ファイルロックについて
以下のようなプログラムを作り実験しているのですが、よくわからない事態になっています。 まず、ブラウザを2つ用意して、一方のブラウザで実行した後、すぐに2つめのブラウザで実行します。 mkdirの場合、$which=1として、2つ目を実行すると、busyとでます。これは1つ目がロックしているからということは分かります。 しかし、symlinkの場合、2つ目でもbusyという文字はでず、何事もなかったように両方ともOKと表示されます。これは本当にロックできているのでしょうか。また、この場合、lock.cgiが生成されません。 また、サーバーによってはmkdirで試行すると、まだロックしていないにもかかわらず、busyとでるのもあります。これは、mkdir方式が対応していないと考えればよいのでしょうか。 ------------------------ #! /usr/local/bin/perl $lockfile = "./lock.cgi"; $which = 1; filelock(); sleep 10; fileunlock(); error("OK"); sub error{ print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML><HEAD> </head> <body> $_[0] </body></html> END exit; } sub filelock { if (-e $lockfile) { # 3分以上古いロックは削除する ($mtime) = (stat($lockfile))[9]; if ($mtime < time - 60) { fileunlock(); } } local($retry) = 2; if($which){ #mkdir関数式ロック while (!mkdir($lockfile, 0755)) { if (--$retry <= 0) { &error("busy"); } sleep(1); } }else{ # symlink関数式ロック if ($lockkey == 1) { while (!symlink(".", $lockfile)) { if (--$retry <= 0) { &error("busy"); } sleep(1); } } } } sub fileunlock { if($which){rmdir($lockfile);}else{unlink($lockfile); } }
- 締切済み
- Perl
- $retry--の「--」の意味は?
$retry--の「--」の意味は? ファイルロックについて調べていたら function lock(){ //ロックファイル $file = "lock.txt"; $lockDir= "lock/"; $lockfile = $lockDir . $file; //再挑戦回数 $retry = 3; //30秒以上古いロックは削除する if (file_exists($lockfile)) { $mtime = filemtime($lockfile); if ($mtime < time() - 30) { unlock($file); } } //ロック用ディレクトリを作成する while (!@mkdir($lockfile, 0755)) { if ($retry-- <= 0) { print "只今混雑しています。";exit;} sleep(1); } } のコードを見つけました。「$retry--」の2回ハイフンでどんな意味なのでしょうか? ちなみに他に書き換えるとしたらどんなコードでかけるのでしょうか?
- ベストアンサー
- PHP
- ロックしたディレクトリが消えない(?)
flock関数を使い、 $lockfile="./lock/lock.loc"; sub lock { foreach $i (1..6) { . . . if(open(LOCK,">$lockfile")){ if (flock(LOCK,6)) { $lock_flag = 1; last ; } } . . . } } という風にし、メインルーチンで&lockを実行し、ファイルロックしたのですが、flock(LOCK, 8)を使い忘れ、あとでFFFTPを使ってこれを消そうとしても、なにやらディレクトリが永遠に続いている感じになってしまい消せません。 /lock/lock.loc/lock.loc/lock.loc/lock.loc/lock.loc/... という風になっています。 それと元からlock/lock.locというディレクトリが存在したままflockを使ってしまったかどうかはちょっと確認していなかったのですが、使う前にあったとしたらlock.locはファイルではなく、ディレクトリです。 (mrdirを使ったロックなどをいろいろ試していたためです。) うまく説明できなかったのですが、どうすればこれは消せますか?後でflock(LOCK, 8)をやっても直りません・・ アップしたサーバーは@niftyです
- ベストアンサー
- Perl
- CGIのBBSに添付するファイルのサイズを大きくしたいのですが・・・。
初めてホームページにCGI(画像アップ掲示板)を設置しました。 何とか試行錯誤しながら出来たのですが、添付ファイルのサイズが元から決まっていて100Kbになっています。 これを120~130Kb前後くらいのファイルを添付できるように変えたいのですが、100Kb=102400 のところを何と書き換えたらよいのか分かりません。 CGIは「kent WEB」の「joyful note」をカスタマイズされた「prerty book」の「joyload」です。 どなたか詳しい方、教えていただけると助かります。 よろしくお願いします。
- 締切済み
- その他(インターネット・Webサービス)
- rename関数のファイルロック
カウンタスクリプトを作る際に、必ずファイルロックってしますよね。 いろいろなサンプルを見ると、symlink関数やmkdir関数、open関数などを使ったロック方法があるんですけど その中にrename関数を使ったものがあるんです。 解説を読んでみると、rename関数の方が他のよりも比較的に良いようなことが書いてあるのでさっそく使用。 しかし、表示が遅いんです。 カウンタは画像連結をしてIMGで呼び出しています。 renameでロックすると遅くなるのは、もうどうしようもないことなのでしょうか?
- ベストアンサー
- CGI
- CGI(BBS)の設置が出来ません(2)
--------------------↓ # ログディレクトリ (フルパスだと / から) $log_dir = "."; ↑これは「/bbs.log」と入れるのでしょうか? ちなみに上記全ての書類はcgi-binで同階層です。 # 表示ファイルディレクトリ (フルパスだと / から) $htm_dir = "."; ↑これもよく分かりません。 # CGIスクリプト自身をURLで指定 $script = "http://www.●●●.ne.jp/cgi-bin/lomobbs.cgi"; ↑の様に入れましたが合っていますでしょうか? # 表示ファイル (index.html) のある「ディレクトリ」をURLで指定 $htm_url = "http://www.●●●.ne.jp/cgi-bin"; # ログファイル名 $logfile = "bbs.log"; # ロックファイル名 $lockfile = './bbs.lock'; # 過去ログのあるディレクトリ (フルパスだと / から) $past_dir = "."; # 補助プログラムのファイル名 $subfile = './bbs2.cgi'; ---------------------------- 以上、アヤシイ個所を書いてみました。 おかしな個所があれば教えてください。 ちなみに、DLしたcgiの書類名を変更したのですが、 それは何か影響はありますか? いくらやり直してもページが表示されません。
- 締切済み
- CGI
- PHPのファイルロックについて
関数flock();について調べてたのですが、 結局、イマイチ使い所がわかりませんでした。 とりあえずCGIを手本として以下のロックを作ってみたのですが、 もし、flockを使うとしたらどのように使うのかアドバイスして欲しいと思っています。 ↓参考プログラム(echo部は進行を表示するためのもの) <?php define ("LOCK_FILE","./lock/lock.txt"); Lock(); Unlock(); //ロック function Lock(){ if(file_exists(LOCK_FILE)){ if(date(U) - filemtime(LOCK_FILE) > 30){ unlink(LOCK_FILE); echo("古いロック削除<br>"); } } $retry = 5; while(file_exists(LOCK_FILE)){ if($retry <= 0){ echo ("error<br>"); exit; } $retry--; sleep(1); } $lockfile = fopen(LOCK_FILE,"w"); fclose($lockfile); echo("ロック完了<br>"); } //アンロック function UnLock(){ unlink(LOCK_FILE); echo("ロック解除<br>"); } ?>
- 締切済み
- PHP
お礼
解決しました。 ディレクトリの構成が間違っていました。 ありがとうございます。
補足
回答ありがとうござます。 Check Mode * ログファイルのパス:OK * ログファイルのパーミッション:OK * カウンタ:設定あり * カウンタログファイルのパス:OK * ロック形式:mkdir * ロックディレクトリ:./lock * ロックディレクトリのパス:NG → ./lock * 画像ディレクトリ:./img/ * 画像ディレクトリ:NG → ./img/ * 過去ログ:設定なし このようになりました。