Yomi-Search 改造

This category is - Yomi-Search 改造 -

まだ、完全ではないのですが「タグクラウド化」に成功しました!よし!って感じです!「kazuking searchのトップページと実は一般には目に触れないであろうページ「http://search.kazuking.net/」と言う検索専用ページに機能させました。

ちなみに「search」と言うサブドメインのページは随分前からあるのですが、「パッ」としないので、ディレクトリ検索でエラーの時とWeb検索でバナーをクリックした時にしかたどり着けません。当初は色んなAPIでの検索を設置したのですが、色々覚えるうちに「マッシュアップ」とやらがやりたくなり外しちゃいました。いずれは・・・と色々考えております。

さて、タグクラウドはまだ完成はしていません。

っと言うのも一応管理しやすいようにフォームから更新作業が出来るようにしてるんですが、今のところ「タイムスタンプ」と言う機能を使っていません。これも勉強なんですがこの機能を使えるようになると、「新たに追加されたタグ」とか「急上昇タグ」みたいなのが導入しやすくなります。

今はタグのカウント方法がちょっと微妙な感じでして、一つ一つのタグを配列化して個々に全タグから個数を見つけると言う不可解なソート方法を取っています。そのせいで「SE」と言うタグは「SEO」や「SEO対策」などにもマッチしてしまい、結果文字数が少ないタグは数が多くカウントされてしまってます。

正規表現とやらでどうにかなりそうなのですが、ちょっと壁にぶつかっております。「タイムスタンプ」と「正規表現」をうまく覚えスマートなソースに書き換えれば晴れて「タグクラウドPHP版」は完成で「Perl版」に取り組もうかと思ってます。

それとタグ検索に使用してる「tagcloud.cgi(search.cgi改良)」を$Slog[15]だけにマッチするように改良しました。純粋にタグにだけマッチするので、いずれは検索結果のページとかも変えたりしたいと思ってます。改造したのは「open_for_search関数」だけなんですが「$eval_line」の部分を、

  1. $eval_line .=<<'EOM';
  2. while($line=<IN>){
  3. $fl=1;
  4. @Slog=split(/<>/,$line);
  5. $Slog[15]=~tr/[A-Z]/[a-z]/;

  6. EOM
  7. #ワード検索部分
  8. if($#words_a>=0){ #and検索
  9. $eval_line .=<<'EOM';
  10. if($fl){
  11. foreach $word(@words_a){
  12. if(index($Slog[15],$word) < 0){$fl=0; last;}
  13. }
  14. }
  15. EOM
  16. }
  17. #データ格納部分
  18. $eval_line .='if($fl){$line{$i}='; 
  19. if($sort eq "id"){$eval_line .='$Slog[0]';}
  20. else{$eval_line .='$Slog[3]';} #mark
  21. $eval_line .='; push(@write,$line); $i++;}';

  22. $eval_line .='}';

としました。ま、ちょっと書き換えたのと削除しまくっただけですが。性質上「or・not検索」はないので削除したんですが、「and検索」は何故か怖くて削除出来ませんでした(笑)おかしなところあったら(誰も真似はしないと思いますが・・・)すんません。

それと「kazuking search」のタグクラウドは現在「~回以上使われた」で表示させていて、今は「15回以上使われたタグ」として機能してます。全タグを抽出した「タグクラウド」を見てみたら凄い事になって噴出しそうになりました(笑)

サンプルで「2回以上」のタグクラウドを添付してみます。興味があったらご覧下さい。フリーズしない程度のものなんで・・・「サンプル

以上、道のり(2)でした!

さて、偉そうな事を言っとかないと中々改造しなそうなので記事にする事にします。

Yomi-Searchでタグクラウドを作るために「$Slog[15]を分解表示する」事まではしてたんですが、それはあくまでログに項目を増やしただけです。ちなみにコメント頂いた「ばんかぶるさん」の仰ってた通り「網の目状のリンク構成」になり、Google Webmaster Tools上では凄まじいリンク構造が確認出来てます(笑)

内部リンクは6万以上あります(汗)

さて、そんな事はさて置き次はこれをクラウド化しなければなりません。ちなみにぶつかって来る問題が2点。まず「kazuking search」はYomi-Searchの機能外の部分は全てPHPファイルで作成しています。この為にPerlでもPHPでも利用できるようにしたいわけです。

手作業でいちいちそんな事はやってられないので、「ys4.cgi」と言うログファイルからタグクラウド用のタグを切り出し新たなファイルを作成する事にしました。分からないですが毎回呼び出すのは負荷を考えると良くないんじゃないか(Yomi-search本体的に)と言う憶測です(笑)

んで、Perl、PHPのどっちでその作業をするか悩んだんですが、最近PerlばっかりだったのでPHPを少し覚えるためにマニュアル見ながら下記のようなのを作りました。ちなみに数行ですが悩んで悩んで3時間かかりました(汗)

  1. <?php 
  2. //書き込みファイル設定
  3. $filename = "log.txt";
  4. $fp = fopen($filename, "w");
  5. //ログファイル配列処理
  6. $arr = file("./log/ys4.cgi");
  7. //書き込み開始
  8. foreach ($arr as $line) {
  9. $lines = explode("<>", $line);
  10. fwrite($fp, $lines[15]);
  11. }
  12. //書き込み終了
  13. fclose($fp);
  14. ?>

取りあえず「log.txt」と言うファイルを作成(空のファイルを作っておく)しました。これには「ys4.cgi」から$Slog[15]だけを切り出したファイルになります。これをどう使うかは人それぞれなんでしょうけど、私はこいつを正規表現(最近覚えた)でスペース(半角、全角)毎に分解し、配列(最近覚えた)かハッシュ(最近覚えた)に収めようと思います。

ちなみに今、「重複キーワードをカウントする」と言う技能がありません・・・。Perl、PHPでは「HTML::TagCloud」と言うモジュールがあって、それを使って実現したいのですがモジュールの構造をやっと理解したばかり(オブジェクト指向とか難しいっす)で30歳手前の営業人間には煙出っ放しです。

「mecab」と言う形態素解析を使った方法もあるのですが、サーバーにPerlとPHPのモジュールがインストール出来ないんですよね。多分権限の問題だと思うんですが違う気もします。「mecab」自体は設置出来たんでどうにかなりそうな気もしますが・・・。

「mecab」を使ったほうが楽そうですがタグ($Slog[15])が品詞毎に分解されすぎちゃって、それも如何なものかと悩んでおります。っとなると自分で作ったほうが良いのかな?とも思って悩んでいる今日この頃です。ま、入力して貰った$Slog[15]を使うんで、そこまで変化もなさそうですしね。。

とにかく難しいです(涙)

ま、どうなるかは不明ですが実現(タグクラウド)したいのです!

Yomi-Searchって利用者人口が非常に多いスクリプトだと思うのですが、細かいところまで手を加えているサイトって多そうで少ないですよね?ま、言い換えればどこまで「気になる」かという部分でもあります。

こればっかりは人それぞれで「機能を果たしていればOK」と言う人も居れば、「原型を無くしまくる」と言う人も居るはずです。私は後者なんですが、そー言う目線で下記の改造をしてるサイトさんは細かいところまで手を加えてる方が多かったです。

  • エラーページ(mes.html)の改造
  • 修正・削除ページ(enter.html)の改造
  • 新規登録ページ(regist_new.html)の改造
  • サイトマップページ(sitemap.html)の別途作成

上記を改造されている方は大抵他のテンプレート等も細かく改造されているので、非常にオリジナリティーに溢れたサイトさんが多かったです。私も当初はそういったサイトさんを参考にしていました。さらに下記の改造を施されているサイトさんは凄いとこが多いです。

  • 403,404,500エラーページの増設
  • 新着、相互、お勧めページ等の静的化

この付近を改造されてる方は、さらにオリジナルな改造を施されているので見てても楽しいです。総合系のものからターゲットを絞ったサイトまでまさに「痒いところに手が届いたサイト」って感じで、過去に「どうなってるんだこのサイトは・・・」っと思ってました(汗)

私はそういうサイトさんを参考(真似)にしながら改造を施してきたわけですが、今回は自分なりの改造をしました。ただ知識が無さ過ぎて結果に行き着くまで1週間以上かかっちゃいました。今後の事を考えての改造だったわけですが。

元々Yomi-Searchでは「cfg.cgi」や「other_cfg.cgi」のようにカテゴリを生成するためのファイルがあるわけですが、これに対して「url_cfg.cgi」のような表示URL用のファイルを新たに設けて各カテゴリのURLを書き換えました(取りあえず最上層だけ)。

  1. %dir_url=(
  2. '01'=>'Entertainment/',
  3. '02'=>'News/',
  4. '03'=>'Recreation/',
  5. '04'=>'Business_and_Economy/',
  6. '05'=>'Reference/',
  7. '06'=>'Society_and_Culture/',
  8. '07'=>'Arts/',
  9. '08'=>'Computers_and_Internet/',
  10. '09'=>'Health/',
  11. '10'=>'Education/',
  12. '11'=>'Government/',
  13. '12'=>'Science/',
  14. '13'=>'Social_Science/',
  15. '14'=>'Regional/',
  16. );

ちょっとカテゴリが多すぎるので今は各カテゴリの最上層だけ書き換えました。「最上層だけ」と言うのが尚更ややこしくしてしまってるんですけどね。総カテゴリ数が100~500程度であれば簡単だと思います。連想配列とかチンプンカンプンな事を勉強しながらだったので腐るほど失敗しましたけどね(汗)

お陰で骨組みやYomi-Searchの根本的な仕組みが頭に入ったんで、新たにYomi-Searchを立ち上げる場合は管理画面に「表示用URL」みたいな感じで別途フォームを作っても良いかな?とも考えています。ソート方法とかを根本的に変えちゃえば「数字以外のURL」を標準的に排出出来そうな気もします。

ま、人様に公開するにはもう少しPerlのソースを綺麗に書けるようになったりしなくちゃいけませんし、何より不具合の保障が出来ない内は駄目でしょうね。ま、そんなわけで今の「kazuking search」はカテゴリのURLを一部変更した状態になってます。

エンターテインメント
http://dir.kazuking.net/Entertainment/
メディアとニュース
http://dir.kazuking.net/News/
趣味とスポーツ
http://dir.kazuking.net/Recreation/
ビジネスと経済
http://dir.kazuking.net/Business_and_Economy/
各種資料と情報源
http://dir.kazuking.net/Reference/

ちょっと長いので端折りますが。要するにURLを変えただけです。たったこれだけの話しですが相当改造しまくった(個人的には)んで、原型を咎めない状態と化してしまいました。ま~全面的にURLを書き換えられようにとか、他で運用しているYomi-Searchでも適用出来るようにとか考えていたんで・・・。

何でこんな事したかと言うと後々は負荷を考え各カテゴリ毎に本体を分けようと思ってるからです。その際は検索や登録面でログを横断するような形にしなくちゃならないと思うので、スキル含めまだまだ先の話になりそうですが、やっておく事には越した事はないかなと。

ま、自己満で終わっちゃうんですけどね(笑)

さてさて、いずれ(数年後でもOKですが)は「これがYomi-Search!?」ってサイトを作っていけるようになれると良いなとは思ってます。そんな事する暇があればもっとターゲットを絞った「専門系Yomi-Serch」にした方が良いんでしょうけど、それはそれで運営してるんで趣味が改造となってます(笑)

にしてもさっさと独自コンテンツを増やさなければと思う今日この頃です。

前回(今朝)「Google AdSenseから警告」を頂きまして、合間に色々考えた結果(停止が復活するかは謎ですが)ちょっと厳しい目線でサイトを修正してみる事にしました。一応考え方として、

  • 登録サイトが無いページではGoogle AdSenseを表示しない
  • カテゴリを細分化し過ぎている為、重複<title>が存在するのを改善する

主に上記2点です。登録サイトが無い(ログを表示しない)ページを「コンテンツが乏しいページ」と判断し、該当するページはGoogle AdSenseを表示しないようにしました(停止してますが)。出力ログの有無の判定をどこでやってるのか分からなかったので勝手に「kt.html」で、

  1. <!--HTML-->
  2. local($log_check);
  3. $log_check = pop(@log_lines);
  4. if($log_check eq "") {
  5. print<<"<!--HTML-->";
  6. ログが無い場合の表示
  7. <!--HTML-->
  8. } else {
  9. print<<"<!--HTML-->";
  10. ログがある場合の表示
  11. <!--HTML-->
  12. }
  13. print<<"<!--HTML-->";

配列「@log_lines」の最後を切り出してが空だったらログが表示されないという事にしてみました。間違ってたらすんません。使い方によっては「登録サイトはありません」とかメッセージを表示させたりも出来ますね。次に改造したのは<title>です。

こいつは本当に苦労しまくりました・・・。

このブログを見てくれてる方がどの程度いらっしゃるか不明ですが、素で私はPerlとかPHPとか不得意なんです。っと言うか改造したい時はいちいち関数のリファレンスとか見ながらやってます。「if文」とかなら「パッパ」と出来ますがそれ以外は別問題です。ちなみに行った改造は、

  • どのカテゴリページでも常にトップカテゴリを表示させておく
  • <title>に表示させるカテゴリ名は最大3つまで(長すぎると邪魔かと)
  • 3階層より深いカテゴリの場合は「トップ > 表示ページの1個前 > 表示ページ」に設定
としました。何が面倒って最後の奴です。変な話「kazuking search」には同一タイトルになってしまうページが点在していました。厳密には「ぱんくず」で見れば分かるわけですが、これを「同一タイトルの同一ページ」と言う見方をする事にしました。分かりやすくいうと「Google AdSense」から指摘されたページは「教育」と言うページなんですが、これを「kazuking search」で検索すると→「教育検索結果(別窓)

末尾が「教育」となってるカテゴリは全て「<title>教育</title>」と言う状態になっていました。これだと「類似ページ」と判断されても仕方がない気がします。かと言って「ぱんくず」を表示させると、場合によって物凄く長ったらしくなります。と言う事から「トップカテゴリ名」と「表示ページの1階層前のカテゴリ名」を抽出する事にしました。

「ぱんくず」の作り方を見ていると「$LC_kt」と言うカテゴリ番号を「_」毎に分解し「@kt」と言う配列にするのですが、この時点で配列の最後が「$Stitle」と同じなのです。だから元々配列「@kt」の最後を削除する事で「ぱんくず」が生成されているのです。

と言う事は私が行いたい「表示ページの1階層前のカテゴリ名を抽出」をするには厳密には「最後から2番目を抽出」しなくてはならなくなります。そんな便利な関数はありません。しかもカテゴリの階層はその都度変化してしまうので頭からとかも無理でし、ま~苦労しました。

本来は「カテゴリの説明文」とかを使えば簡単に出来そうですが、無駄にログが増えますし何より1万以上のカテゴリ分作るのが大変過ぎます。「カテゴリの読み」は参照で使ってるんで配列やら判定やら試行錯誤して完成させました。結構見やすくなったかと勝手に喜んでます。改造内容は恥ずかしいのと責任持てそうにないので伏せときますね(笑)

と言うかYomi-Searchやってる方でそんなカテゴリ深い人あまり居ないですしね。人によってはそんなカテゴリ構成は設計からミスだと思う人も居るでしょうし、SEO的にトップページから3クリック以内だとかあれこれ居らっしゃるでしょう。

さて、これで「Google AdSense」さんは「停止」を「開始」に変更してもらえるのでしょうか?それとも私の着眼点は大外れでしょうか?自分の価値観って他人からすれば「論外」だったりする事があるものです。自分が必要(あると良いな)と思うものは組み込んだり、じゃない場合は無かったりと。

ま、お暇ならカテゴリを覗いてみてやってください♪

Yomi-Search FAN!の掲示板で見つけてkazuking searchでも導入しているんですが、Yomi-Search FAN!はご存知の通り・・・。

取り合えずスパム対策に物凄い威力を発揮しているんで記事にしてみます。住さんのアドオンではなかったので問題は無いと思うんですが駄目ならご一報くだされ。改造するのは、regist_ys.cgiと、pl/mail_ys.cgiと2つのファイルの新規作成です。

regist_ys.cgiの383~386行目


  1. ##仮登録モードの場合の設定
  2. if($EST{user_check} && $FORM{changer} ne "admin" && $FORM{mode} eq "act_regist"){
  3. $Slog[14]=join("<1>",$FORM{Fsougo},$FORM{Fadd_kt},$FORM{'Fto_admin'})
  4. }

の下に以下を追加

  1. ##認証パスワード(16)
  2. if($FORM{changer} ne "admin" && $FORM{mode} eq "act_regist" && $FORM{check} ne "on"){
  3. $att_pass = int rand(99999);
  4. $Slog[16]= sprintf("%05d",$att_pass); # (A)16の値はデフォルトの状態。保存ログを追加している場合、最後の値に1プラスした値にする
  5. }

734~736行目

  1. local($new,$new_id,@hyouji_log);
  2. #$new=>追加データ書き込み用/%TASK=>更新するカテゴリリスト
  3. #@hyouji_log=>結果表示用のログデータ

の下に以下を追加

  1. #$att_pass => 認証用パスワード
  2. #$att_id => 認証用ログID
  3. #$att_file => パスワード認証ログ
  4. #$att_days => 認証期間(日数)
  5. $att_pass,$att_id;
  6. $att_file = "att.cgi";
  7. $att_days = "3";

750行目

  1. &check; #入力内容のチェック

を以下に修正

  1. if($FORM{check} ne "on"){
  2. &check; #入力内容のチェック
  3. }

754行目~の

  1. #ID取得&2重URL登録チェック
  2. $Cgane_pre=0; #総登録数
  3. if($EST_reg{nijyu_url}){$new_id=&get_id_url_ch(1);}
  4. else{$new_id=&get_id;}

の下に以下を追加

  1. if($FORM{changer} ne "admin" && $FORM{mode} eq "act_regist" && $FORM{check} ne "on"){
  2. $new_id=&get_checklog_id;
  3. }

759行目

  1. &join_fld($new_id); #入力内容の整形

を以下に修正

  1. if($FORM{check} eq "on"){
  2. if(!$FORM{att_id}){&unlock();&mes("IDが見つかりません","登録認証エラー","java");}
  3. elsif(!$FORM{att_pass}){&unlock();&mes("パスワードが見つかりません","登録認証エラー","java");}
  4. local(@ATT,@CATE,$str);
  5. open(IN,"$EST{log_path}$att_file"); # 仮仮データからログを探す
  6. while(<IN>){
  7. @ATT = split(/<>/,$_);
  8. if($ATT[0] eq $FORM{att_id}){
  9. if($ATT[16] eq $FORM{att_pass}){ # ログを増やしている場合には、ログ番号を変える
  10. @CATE = split(/&/,$ATT[10]);
  11. foreach (1 .. $EST_reg{kt_max}){
  12. $FORM{"Fkt$_"} = $CATE[$_ - 1];
  13. }
  14. pop @ATT;$ATT[0] = $new_id;@Slog = @ATT;$str=1;last;
  15. }
  16. }

  17. close(IN);
  18. if($str ne "1"){&unlock();&mes("無効なIDです。","登録認証エラー","java");} # ログが見つからなかった場合
  19. }
  20. else{
  21. &join_fld($new_id); #入力内容の整形
  22. }

769行目~の

  1. if($EST{user_check} && $FORM{changer} ne "admin" && $FORM{mode} eq "act_regist"){ #<仮登録時>

  2. #仮登録ログデータに追加書き込み

  3. open(OUT,">>$EST{log_path}$EST{temp_logfile}");
  4. print OUT $new;
  5. close(OUT);

を以下に変更

  1. if($EST{user_check} && $FORM{changer} ne "admin" && $FORM{mode} eq "act_regist"){ #<仮登録時>
  2. local(@ATT,@TIME);$times=time();
  3. if($FORM{check} ne "on"){ #<仮仮登録時>
  4. open(IN,"$EST{log_path}$att_file"); # 仮仮データのログを調整
  5. while(<IN>){ # 期間超過分のログを省く
  6. @ATT = split(/<>/,$_);
  7. @TIME=split(/_/,$ATT[11]);
  8. if($TIME[0] > $times - (60*60*24*$att_days)){push(@ATTLOG,$_);}

  9. close(IN);

  10. #仮登録ログデータに追加書き込み

  11. open(OUT,">$EST{log_path}$att_file");
  12. print OUT @ATTLOG;
  13. print OUT $new;
  14. close(OUT);
  15. }
  16. elsif($FORM{check} eq "on"){ #<仮登録時>
  17. open(IN,"$EST{log_path}$att_file"); # 仮仮データのログを調整
  18. while(<IN>){ # 期間超過分のログと、今回のログを省く
  19. @ATT = split(/<>/,$_);
  20. if($ATT[0] ne $FORM{att_id}){
  21. @TIME=split(/_/,$ATT[11]);
  22. if($TIME[0] > $times - (60*60*24*$att_days)){push(@ATTLOG,$_);}
  23. }

  24. close(IN);

  25. #仮仮登録ログデータを更新

  26. open(OUT,">$EST{log_path}$att_file");
  27. print OUT @ATTLOG;
  28. close(OUT);

  29. #仮登録ログデータに追加書き込み

  30. open(OUT,">>$EST{log_path}$EST{temp_logfile}");
  31. print OUT $new;
  32. close(OUT);
  33. }

770行目~の

  1. ##メールを送信
  2. #件名に付けるマークを設定
  3. local($PR_mail_add_line,$PR_mail_sougo,$PR_mail_com,$PR_mail_kt);
  4. &kenmei_put_mark;
  5. sub kenmei_put_mark{
  6. if($FORM{Fsougo}){$PR_mail_sougo="(link)";}
  7. else{$PR_mail_sougo="";}
  8. if($FORM{Fto_admin}){$PR_mail_com="(com)";}
  9. else{$PR_mail_com="";}
  10. if($FORM{Fadd_kt}){$PR_mail_kt="(kt)";}
  11. else{$PR_mail_kt="";}
  12. $PR_mail_add_line=$PR_mail_sougo . $PR_mail_com . $PR_mail_kt;
  13. }
  14. $Slog[6]=~s/<br>/\n/g; $Slog[7]=~s/<br>/\n/g;
  15. if($EST{mail_temp}){require "pl/mail_ys.cgi";}
  16. if($EST{mail_to_admin} && $EST{mail_temp}){ #管理人へメール送信
  17. &mail($EST{admin_email},$Slog[9],"$EST{search_name} 仮登録完了通知$PR_mail_add_line","temp","admin",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin});
  18. }
  19. if($EST{mail_to_register} && $EST{mail_temp}){ #登録者へメール送信
  20. &mail($Slog[9],$EST{admin_email},"$EST{search_name} 仮登録完了通知","temp","",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin});
  21. }
  22. $Slog[6]=~s/\n/<br>/g; $Slog[7]=~s/\n/<br>/g;

を以下に変更

  1. ##メールを送信
  2. #件名に付けるマークを設定
  3. local($PR_mail_add_line,$PR_mail_sougo,$PR_mail_com,$PR_mail_kt);
  4. if($FORM{check} ne "on"){ # 認証メールを送る場合
  5. if($EST{mail_temp}){require "pl/mail_ys.cgi";}
  6. if($EST{mail_to_register} && $EST{mail_temp}){ #登録者へ認証用メール送信
  7. &mail($Slog[9],$EST{admin_email},"$EST{search_name} 仮登録認証メール","att","",*Slog);
  8. }
  9. }
  10. else{
  11. &kenmei_put_mark;
  12. sub kenmei_put_mark{
  13. if($FORM{Fsougo}){$PR_mail_sougo="(link)";}
  14. else{$PR_mail_sougo="";}
  15. if($FORM{Fto_admin}){$PR_mail_com="(com)";}
  16. else{$PR_mail_com="";}
  17. if($FORM{Fadd_kt}){$PR_mail_kt="(kt)";}
  18. else{$PR_mail_kt="";}
  19. $PR_mail_add_line=$PR_mail_sougo . $PR_mail_com . $PR_mail_kt;
  20. }
  21. $Slog[6]=~s/<br>/\n/g; $Slog[7]=~s/<br>/\n/g;
  22. if($EST{mail_temp}){require "pl/mail_ys.cgi";}
  23. if($EST{mail_to_admin} && $EST{mail_temp}){ #管理人へメール送信
  24. &mail($EST{admin_email},$Slog[9],"$EST{search_name} 仮登録完了通知$PR_mail_add_line","temp","admin",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin});
  25. }
  26. if($EST{mail_to_register} && $EST{mail_temp}){ #登録者へメール送信
  27. &mail($Slog[9],$EST{admin_email},"$EST{search_name} 仮登録完了通知","temp","",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin});
  28. }
  29. $Slog[6]=~s/\n/<br>/g; $Slog[7]=~s/\n/<br>/g;
  30. }

798行目

  1. require "$EST{temp_path}regist_new_end_temp.html";

を以下に変更

  1. if($FORM{check} ne "on"){
  2. require "$EST{temp_path}regist_new_end_att.html";
  3. }
  4. else{
  5. require "$EST{temp_path}regist_new_end_temp.html";
  6. }

801行目

  1. } #</仮登録時>
  2. else{ #<新規登録時>

  3. #本体ログデータに追加書き込み

  4. open(OUT,">>$EST{log_path}$EST{logfile}");
  5. print OUT $new;
  6. close(OUT);

を以下に修正

  1. } #</仮登録時>
  2. else{ #<新規登録時>
  3. if($FORM{changer} ne "admin" && $FORM{check} ne "on"){
  4. local(@ATT,@TIME);$times=time();
  5. open(IN,"$EST{log_path}$att_file"); # 仮仮データのログを調整
  6. while(<IN>){ # 期間超過分のログを省く
  7. @ATT = split(/<>/,$_);
  8. @TIME=split(/_/,$ATT[11]);
  9. if($TIME[0] > $times - (60*60*24*$att_days)){push(@ATTLOG,$_);}

  10. close(IN);

  11. #仮仮登録ログデータに書き込み

  12. open(OUT,">$EST{log_path}$att_file");
  13. print OUT @ATTLOG;
  14. print OUT $new;
  15. close(OUT);
  16. }
  17. elsif($FORM{changer} ne "admin" && $FORM{check} eq "on"){
  18. local(@ATT,@TIME);$times=time();
  19. open(IN,"$EST{log_path}$att_file"); # 仮仮データのログを調整
  20. while(<IN>){ # 期間超過分のログと登録されるログを省く
  21. @ATT = split(/<>/,$_);
  22. if($ATT[0] ne $FORM{att_id}){
  23. @TIME=split(/_/,$ATT[11]);
  24. if($TIME[0] > $times - (60*60*24*$att_days)){push(@ATTLOG,$_);}
  25. }

  26. close(IN);

  27. #仮仮登録ログデータを更新

  28. open(OUT,">$EST{log_path}$att_file");
  29. print OUT @ATTLOG;
  30. close(OUT);

  31. #本体ログデータに追加書き込み

  32. open(OUT,">>$EST{log_path}$EST{logfile}");
  33. print OUT $new;
  34. close(OUT);
  35. }
  36. else{
  37. #本体ログデータに追加書き込み
  38. open(OUT,">>$EST{log_path}$EST{logfile}");
  39. print OUT $new;
  40. close(OUT);
  41. }

869行目~931行目

  1. ##メールを送信
  2. unless($FORM{FCmail} eq "no" && $FORM{changer} eq "admin"){ #送信する設定なら
  3. #件名に付けるマークを設定
  4. local($PR_mail_sougo,$PR_mail_com,$PR_mail_kt);
  5. &kenmei_put_mark;
  6. $Slog[6]=~s/<br>/\n/g; $Slog[7]=~s/<br>/\n/g;
  7. }

  8. #更新するカテゴリリストを作成

  9.      <<途中省略>>

  10. ##総登録数を記録

  11. open(OUT,">$EST{log_path}total_url.log");
  12. print OUT $Cgane_pre+1;
  13. close(OUT);

  14. &unlock(); #ロック解除


を以下に変更

  1. ##メールを送信
  2. unless($FORM{FCmail} eq "no" && $FORM{changer} eq "admin"){ #送信する設定なら
  3. #件名に付けるマークを設定
  4. local($PR_mail_sougo,$PR_mail_com,$PR_mail_kt);
  5. if($FORM{changer} ne "admin" && $FORM{check} ne "on"){ # 認証メールを送る場合
  6. if($EST{mail_temp}){require "pl/mail_ys.cgi";}
  7. if($EST{mail_to_register} && $EST{mail_temp}){ #登録者へ認証用メール送信
  8. &mail($Slog[9],$EST{admin_email},"$EST{search_name} 本登録認証メール","att","",*Slog);
  9. }
  10. }
  11. else{
  12. &kenmei_put_mark;
  13. $Slog[6]=~s/<br>/\n/g; $Slog[7]=~s/<br>/\n/g;
  14. if($EST{mail_new}){require "pl/mail_ys.cgi";}
  15. if($EST{mail_to_admin} && $EST{mail_new}){ #管理人へメール送信
  16. &mail($EST{admin_email},$Slog[9],"$EST{search_name} 新規登録完了通知$PR_mail_add_line","new","admin",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin});
  17. }
  18. if($EST{mail_to_register} && $EST{mail_new}){ #登録者へメール送信
  19. &mail($Slog[9],$EST{admin_email},"$EST{search_name} 新規登録完了通知","new","",*Slog,$FORM{Fsougo},$FORM{Fadd_kt},$FORM{Fto_admin});
  20. }
  21. $Slog[6]=~s/\n/<br>/g; $Slog[7]=~s/\n/<br>/g;
  22. }
  23. }
  24. if($FORM{changer} eq "admin" || $FORM{check} eq "on"){
  25. #更新するカテゴリリストを作成

  26.      <<途中省略>>

  27. ##総登録数を記録

  28. open(OUT,">$EST{log_path}total_url.log");
  29. print OUT $Cgane_pre+1;
  30. close(OUT);
  31. }
  32. &unlock(); #ロック解除

936行目

  1. require "$EST{temp_path}regist_new_end.html";

を以下に変更

  1. if($FORM{changer} ne "admin" && $FORM{check} ne "on"){
  2. require "$EST{temp_path}regist_new_end_att.html";
  3. }
  4. else{
  5. require "$EST{temp_path}regist_new_end.html";
  6. }

973行目

  1. sub get_id{
  2. ##新規登録用のIDを取得
  3. local($id,$line);
  4. if($FORM{changer} ne "admin" && $EST{user_check} && $FORM{mode} eq "act_regist"){ #仮登録モードでユーザの新規登録時
  5. open(IN,"$EST{log_path}$EST{temp_logfile}");
  6. }
  7. else{ #その他
  8. open(IN,"$EST{log_path}$EST{logfile}");
  9. }
  10. while(<IN>){$line=$_; $Cgane_pre++;} 
  11. close(IN);
  12. ($id)=split(/<>/,$line);
  13. return $id+1;
  14. }

の下に以下を追加

  1. sub get_checklog_id{
  2. ##仮仮データ登録用のIDを取得
  3. local($id,$line);
  4. open(IN,"$EST{log_path}$att_file");
  5. while(<IN>){$line=$_;} 
  6. close(IN);
  7. ($id)=split(/<>/,$line);
  8. return $id+1;
  9. }

pl/mail_ys.cgiのデフォルト267行目

  1. #(6)メール送信処理(&mail)

の上に以下を追加

  1. #(5_2)登録認証メール設定(&att_mail)
  2. sub att_mail{
  3. if($EST{user_check}){ # 仮登録設定の場合
  4. $honbun=<<"EOM";
  5. このたびは、$EST{search_name} への仮登録ありがとうございます。
  6. 仮登録を正式に完了させるには、以下のリンクをクリックする必要があります。
  7. なお、登録から$att_days日以内にクリックをしなかった場合は、
  8. 以後クリックしても無効になってしまいます。ご注意ください。

  9. $EST{cgi_path_url}regist_ys.cgi?mode=act_regist&att_id=$log[0]&att_pass=$log[16]&check=on

  10. このメールに覚えがない場合、お手数ですが破棄頂きますようお願します。

  11. +-------------------------------------+

  12. $EST{search_name} 管理人 $EST{admin_name}
  13. HP: $EST{admin_hp}
  14. E-Mail: $EST{admin_email}
  15. +-------------------------------------+

  16. EOM

  17. }
  18. elsif(!$EST{user_check}){ # 仮登録設定でない場合
  19. $honbun=<<"EOM";
  20. このたびは、$EST{search_name} への登録ありがとうございます。
  21. 本登録を正式に完了させるには、以下のリンクをクリックする必要があります。
  22. なお、登録から$att_days日以内にクリックをしなかった場合は、
  23. 以後クリックしても無効になってしまいます。ご注意ください。

  24. $EST{cgi_path_url}regist_ys.cgi?mode=act_regist&att_id=$log[0]&att_pass=$log[16]&check=on

  25. このメールに覚えがない場合、お手数ですが破棄頂きますようお願します。

  26. +-------------------------------------+

  27. $EST{search_name} 管理人 $EST{admin_name}
  28. HP: $EST{admin_hp}
  29. E-Mail: $EST{admin_email}
  30. +-------------------------------------+

  31. EOM

  32. }
  33. }

334行目

  1. elsif($mail_mode eq "any"){&any_mail;}

の下に以下を追加

  1. elsif($mail_mode eq "att"){&att_mail;} # 認証用メール送信

logフォルダに、
att.cgi
を作成(中身は空で良い)

templateフォルダに
regist_new_end_att.html
を作成し、以下のタグを挿入


  1. print<<"<!--HTML-->";
  2. <html>
  3. <head>
  4. <!-- あ -->
  5. <title>新規登録完了</title>
  6. <LINK rel="stylesheet" href="$EST{html_path_url}style.css" type="text/css">
  7. </head>
  8. <body><a name=top></a>
  9. <!-- メニューバー -->
  10. <div align=right><font id=small>
  11. <!--HTML-->
  12. #<!--(↓修正不可↓)
  13. &menu_bar;
  14. # (↑修正不可↑)-->
  15. print<<"<!--HTML-->";
  16. </font></div>
  17. <hr>
  18. <table width="100%"><tr><td id="title-bar">
  19. <b>新規登録完了</b>
  20. </td></tr></table>
  21. <ol>
  22. 登録メールアドレスに認証用メールを送信しました。<br>
  23. <br>
  24. 正常に申\請を完了するには、認証用メールアドレスに記載されている<br>
  25. URLをクリックする必要があります。<br>
  26. <br>
  27. 期間は、$att_days日間となっておりますので、それまでにクリックして下さい。<br>
  28. メールが届かない場合には、登録メールアドレスの入力ミスが考えられます。<br>
  29. 再度、メールアドレスをお確かめの上、登録して下さい。<br>
  30. <br>
  31. <br>
  32. 【 <a href="$EST{home}">ホームに戻る</a> 】
  33. </ol>
  34. <hr>
  35. <!--HTML-->
  36. &cr;
  37. print<<"<!--HTML-->";
  38. </body>
  39. </html>
  40. <!--HTML-->

  41. 1;

長いですがこれで問題ないです。最後のHTMLの部分はYomi-Searchのテンプレートをベースに書かれているんで手直しするところは各自で♪ちなみにこの件で設置できなかった等のコメントなどは受け付けません!私は設置できましたんで(笑)

Sponsored Link

Link

Web Tool

Banner Link

ホームページ作成 ランキング

SEO Stats

デル株式会社 

Right Relation