CGI「Key Search」日付の表示方法

このQ&Aのポイント
  • KentWebさんのサイト内検索CGI「Key Search」について、日付の表示方法を変更したいです。
  • 現在、日付が「日付 : 2014/05/27(Tue) 06:17:11」と時間まで表示されていますが、日付だけに表示する方法を教えてください。
  • 「ksearch.cgi」の!date!の部分を変更してみましたが、更新した日付になりません。どのようにしたら日付だけが表示されるようになるでしょうか?
回答を見る
  • ベストアンサー

CGI「Key Search」日付だけ表示したい

KentWebさんのサイト内検索CGI「Key Search」について、 今は↓このように http://www.kent-web.com/data/ksearch/ksearch.cgi?code=%B4%C1%BB%FA&q=CGI&cond=1&logs=10&sort=1 日付が「日付 : 2014/05/27(Tue) 06:17:11」と時間まで表示されているのですが、 これを「日付 : 2014/05/27(Tue) 」と日付だけにしたいのです。 「ksearch.cgi」の # 結果 my $i = $pg; my $body; foreach (@log) { my ($page,$ttl,$time,$wd,$bk,$nx,$yyyymmdd,$year) = split(/\t/); $i++; my $tmp = $loop; $tmp =~ s/!num!/$i/g; $tmp =~ s/!title!/$ttl/g; $tmp =~ s/!url!/$url$page/g; $tmp =~ s|!doc!|$bk<b>$wd</b>$nx|g; $tmp =~ s/!date!/&date($time)/eg; $body .= $tmp; !date!のあたりをいじればいいんだろうと思っていろいろやりましたが、 ページを更新した日付になってくれません。 どうしたらできるでしょうか…

  • CGI
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

$tmp =~ s/!date!/&date($time)/eg; では、テンプレートに !date!という キーワードが来た時に &date($time) で、 date()サブルーチンを 実行しているので init.cgiの中にある sub date()の 中身を修正することになります。 ただし、&date(~)は、他にもログの書き出しなどに使われているようなので、 これ自体を変更してしまうと 不具合が発生する可能性があるので 別のサブルーチンを作るか、sub date()に任意引数を追加して書式を切り替えるかです。 簡単になら $tmp =~ s/!date!/&date($time)/eg; を $tmp =~ s/!date!/&date2($time)/eg; みたいに呼び出すサブルーチン名を変更して、そのサブルーチンを新規に作ればよいです。 「2014/05/27(Tue)」 みたいにしたいなら、 sub date2 { my $time = shift; # 曜日 my @week = qw|Sun Mon Tue Wed Thu Fri Sat|; # フォーマット my ($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime($time))[0..6]; sprintf("%04d/%02d/%02d(%s)",$year+1900,$mon+1,$mday,$week[$wday]); } て感じです。 #ちなみに、@weekの宣言を日 月 火 …にして、曜日を日本語にすることもできるでしょうけど #サイトの文字コードに合わせたコード変換処理を通さないと 文字化けするかもしれません。

CRAFT05
質問者

お礼

init.cgiをいじるんでしたか…。 教えていただいたとおりにやってみたらできました!ありがとうございます!! あと@weekの宣言を日 月 火 …にしても文字化けは起こりませんでした!

関連するQ&A

  • CGIでメールを送る際に文字化けするのをなんとかしたい・・・

    いま、市販の本についていたDM用のCGIをカスタマイズしているのですが、文字化けと改行コードがうまくいきません。ちゃんと送れるメールアドレスもあるのですが、文字化けしてしまう人もいます。 ちなみにサーバーはLINUXです。なんとか本文の文字化けと改行は直りましたが、宛先と件名がどうしても化けてしまいます。お分りになる方がいましたら、ぜひお教え下さい。ちなみに、文字コードはeuc-jpで統一し、改行はLFでやっています。 sendmailに埋め込む部分をどう修正すべきかが分かりません。 参考までにスクリプトの一部を書きます。 # sendMail利用部 埋め込みコマンドの置き換え sub broadCaster { my $i = 0; my $temp = ''; my $letter = ''; for ($i = 0; $i <= $#lists; $i++){ $temp = "$subject###$body"; $temp =~ s/<CGI:mail>/$listDX[$i][0]/g; $temp =~ s/<CGI:name1>/$listDX[$i][1]/g; $temp =~ s/<CGI:name2>/$listDX[$i][2]/g; $temp =~ s/<CGI:admin name>/$adminName/g; $temp =~ s/<CGI:admin mail>/$adminMail/g; $temp =~ s/<CGI:time>/$now/g; ($tempSubject, $tempBody) = split(/###/, $temp); $tempBody =~ s/\r\n/\n/g; $letter = "X-Mailer: U got Mail\n"; $letter .= "To: \"$listDX[$i][1] $listDX[$i][2] 様\" <$listDX[$i][0]>\n"; $letter .= "From: \"$adminName\" <$adminMail>\n"; $letter .= "Subject: $tempSubject\n\n"; $letter .= "$tempBody\n\n"; $letter = jcode::jis($letter);

    • ベストアンサー
    • Perl
  • Perlの日付取得で月の表示がおかしい

    下記は、メールフォームCGIに書き込まれた日時などの情報をlog.cgiというファイルに書き出すスクリプトです。 2012/01/04 21:05:45 のような感じで、日付が刻まれるのですが、このうち月の部分がどの月に処理を行ってもいつも01になってしまうのですが、当方直し方がわかりません。 下記が実際の記載箇所です。4行目がおかしいのだと思いますが、どなたかお分かりの方、教えていただけないでしょうか。 my $path = "log.cgi"; my $ip = $ENV{'REMOTE_ADDR'}; ($sec, $min, $hour, $mday, $month, $year, $wday, $stime) = localtime(time()); my $time = sprintf("%04d\/%02d\/%02d %02d\:%02d:%02d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec); my $message = $in{'メッセージ'}; $message =~ s/\r\n/ /g; $message =~ s/\n/ /g; if (open(FOUT, ">> $path")) { print FOUT "$time\t$ip\t" . $in{'お名前'} . "\t" . $in{'E-mail'} . "\t" . $message . "\r\n"; close(FOUT); } よろしくおねがいいたします。

    • ベストアンサー
    • Perl
  • htmlのcheckboxのデータをcgiファイルで表示できない?perl初心者の質問。

    htmlの中でcheckboxのデータをcgifile で表示できません。構成は 入力用のhtml file、それを受け取るcgi file、表示用のalert.htmlファイルです。 my $kako = $query->param('kako'); #html fileからのデータ受け取り用です #下のスクリプトは表示のためのperlコードとして書いています。 if($e_kako){ $t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"裁断\"> 裁断 "; $t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"中とじ\"> 中とじ "; $t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"無線綴\"> 無線綴 "; $t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"穴開け\"> 穴開け"; }else{ $t_kako = "$kako <input type=\"hidden\" name=\"kako\" value=\"$kako\">\n"; } #alert.htmlには下のようにして渡しています。 sub replaceTags{ foreach (@html){ s/<CGI:error message>/$errMsg/i; s/<CGI:error num>/$errNum/i; s/<CGI:kako>/$t_kako/i; データの渡し方がわからないのでよろしくお願いします。 下の場合はうまくいってます。 # page $t_page="<input type=\"text\" size=\"10\""; $t_page .= "name=\"page\" value=\"$page\">\n";

    • ベストアンサー
    • Perl
  • 抜き出して日付ごとに表示させたいです。

    売掛表のG(取引先)H(取引日)I~Lには取引品目と金額が入っております。 取引先が複数かつ取引も同じ業者で複数回取引します その中のA社のみの売掛を抜き出して日付順に分けて表示させたいのです 取引日をO16~O31、P16~P31にはI、以下~Sまで同じ様に表示させたいのですが誰か教えてください 表現が難しいのでわかりにくい部分あるかとは思いますがよろしくお願いいたします。

  • 掲示板CGIで新着順ではなく古い順に表示させたい

    【CGI名】TopicsBoard 【配布先】http://www.kent-web.com/bbs/topics.html (kent-web) 掲示板なんですが、仕様では新着順に表示されるのですが、 それを古い順に表示したいのです。 以下の部分を編集すれば良いと思うのですが、どなたかお願いしますm(__)m もし、この部分以外の変更が必要な場合は、大変ご面倒ですが、 上記サイトからダウンロードお願いします。 宜しくお願いします。 # データ読み込み @loop=(); $i=0; open(IN,"$logfile") || &error("Open Error: $logfile"); while (<IN>) { $i++; next if ($i < $page + 1); next if ($i > $page + $pagelog); $msg = $loop; ($no,$date,$sub,$com,$t[0],$w[0],$h[0], $t[1],$w[1],$h[1],$t[2],$w[2],$h[2]) = split(/<>/);

    • ベストアンサー
    • CGI
  • 文字列検索の結果を赤で表示したい

    全文検索のフリーソフトwwwsrch.cgiのソースのたぶん次の箇所が、検索結果を赤で表示している箇所だと思いますが、はて、自分の力ではこれを読みこなせません。  どなたか、もし基本的なかたちだけでも素描していただけないでしょうか。 for ($j = $imin; $j <= $imax; $j++) {  $line = $lines[$j];  &jcode'convert(*line, "euc");  $line =~ s/<[^>]*(>|$)//g;  $tmp = $word;  &jcode'convert(*tmp, "euc");  if ($jflag) {   $tmp =~ s/([\+\*\.\?\^\$\[\-\]\|\(\)\\])/\\$1/g;    }  #$line =~ s/($tmp)/<B>$1<\/B>/ig; $line =~ s/($tmp)/<B style="color:red">$1<\/B>/ig; &jcode'convert(*line, $kcode_cgi, "euc"); print "$line "; }

    • ベストアンサー
    • Perl
  • CGI..pmを使っての画像のアップロードについての質問です。

    お世話になります画像ファイルをサーバーにアップロードしたいのですが、巧くいきません。以下のコードを実行しますと O.K. File(C:\Documents and Settings\Administrator\My Documents\My Pictures\mozi_g0.gif) was uploaded as /tmp/upload_1111735699_26448 と表示されますが、これで本当に画像ファイルがアップされているのでしょうか? 私見だとサーバー側にtmpというフォルダーに画像ファイルがアップロードされるものと思い /cgi-bin/upload.cgi と同じ所にtmpというフォルダーを作りパーミッションは755にしましたが アップロードをしても空フォルダーのままです、ローカルのフォルダーの画像をサーバー側に保存する方法を御教授お願い出来ませんでしょうか html側のコード <html> <body> <form action="/cgi-bin/upload.cgi" method="POST" ENCTYPE="multipart/form-data"> file <input type="file" name="uploadFile"><br> <hr> <input type="submit" value="OK"> </form> </body> </html> ファイルアップロード本体(upload.cgi) #!/usr/bin/perl use CGI; my($form) = new CGI; print $form->header("text/html"); my($filename) = $form->param('uploadFile'); $uniqid = time . "_" . $$; $newfile = "upload_$uniqid"; # ファイルの内容を表示する。 # このように、$filename をファイルハンドルのように使うこともできる。 #while(<$filename>){ # print $_ . "<br>\n"; #} # ファイルを保存する。 open (OUTFILE,">/tmp/$newfile") or die "Can't make serverside file!\n"; while ($bytesread = read($filename,$buffer,1024)) { print OUTFILE $buffer; } print "O.K. File($filename) was uploaded as /tmp/upload_$uniqid<br>\n";

    • ベストアンサー
    • Perl
  • エクセルVBA:日付データの変換がうまくいかない

    久しぶりにVBAプログラムでハマってしまったので、教えてほしいです。 (1)エクセルシート上のボタンを押す (2)セルの内容を読み込む (3)CSVファイルに出力する というプログラムを組んでいるのですが、variant型で作った 日付のデータの形が変になってしまいます。 入力時は yyyy/mm/dd なのですが、出力されたCSVファイルを見ると、 mm/dd/yyyy と勝手に変換されていました。 何とか修正しようと試みたのですがうまくいきません。 ソースを書き込みます。 Dim data_input(11) As Variant '項目数11項目 Dim i As Integer Dim j As Integer Dim mydir As String Dim conv_data As Variant 'データ変換用 Dim rng As Variant Dim input_date As Date '入力日付(日付型) Dim conv_date As Variant '変換後の日付(ヴァリアント型) i = 0 For i = 0 To 8 data_input(i) = Worksheets("画面").Cells(4 + i, 3) Next i 'A列の一番下のセルを検索する e = Worksheets("local_data").Cells(1, 1).End(xlDown).Row '終端検索(空白のセルまで検索) '日付のデータはそのままCSV化するとおかしな表示となってしまうので、テキスト文字列に変換する 'For Each rng In Range("A1:A10") 'テキスト文字列に変更します。 ' rng.Value = "'" & rng.Text←何故か上手くいかなかった 'Next rng e = e + 1 '最終行+1 For i = 0 To 8 '申込日の時は文字化する為、別処理にする If (i = 0) Then input_date = data_input(i) tmp = CVar(input_date) 'Date型からVariant型に変換し、文字データとして書き込む 'tmpのデータを解体して組み替える 'split? Dim MyStr() As String 'この地点では月/日/年 MyStr() = Split(tmp, "/") '年/月/日に戻す MyStr (0) '月 MyStr (1) '日 MyStr (2) '年 '再結合する tmp = MyStr(2) & "/" & MyStr(0) & "/" & MyStr(1) Worksheets("local_data").Cells(i, i + 1) = tmp 'Worksheets("local_data").Cells(e, 1) = tmp Else Worksheets("local_data").Cells(e, i + 1) = data_input(i) '上部で入力したデータを書き込む End If Next i どうにかyyyy/mm/ddの形で日付が表示されるようにしたいのですが・・・・・ どなたか助言をお願いします。

  • 指定の日付の何時間後

    DBから持ってきた日付(例:2008/06/23 5:30)の6時間後を作り変数に格納したいのですがよいやり方はありませんか。 strtotime()関数を使ってみてもうまくいきません。 $rokujikango = date("y/m/d G:i",strtotime('+6 hour',$timeFrimDb)); としてもうまくいかないので困っています。

    • ベストアンサー
    • PHP
  • 大文字と小文字を区別しない検索にする方法

    勉強する間もなく手探りでフリーCGIの改造をさせて頂いています。 if ゃ foreach などは分かりやすいですが、変数の意味が良く理解できていません。 どうぞお力添えをお願い致します。 現在、フリーのCGIでデータ登録と検索をしていますが、大文字と小文字の 区別を無くしたものにするにはどうすればよいでしょうか? 1) AbcDe も abcde も同じにしたい。 2) 可能なら全角と半角も区別無しにしたい。   ただ、2の方は漢字も使うので難しいでしようか? iオプションを使えとの記述を見ましたが、どこを変えるのか解りません。 ソースを載せますので、ご指導宜しくお願い致します。 # 入力内容を整理 $in{'word'} =~ s/\x81\x40/ /g; @wd = split(/\s+/, $in{'word'}); @find=(); $i=0; # 検索処理 foreach (@line) { $flag = 0; foreach $wd (@wd) { if (index($_,$wd) >= 0) { $flag = 1; if ($in{'cond'} eq 'OR') { last; } } else { $andor="and 検索"; if ($in{'cond'} eq 'AND') { $flag=0; last; } $andor="or 検索"; } } # ヒットした場合 $view = $in{'viewc'}; if ( $view eq '' ) { $view = $views } if ($flag) { $i++; next if ($i < $page + 1); next if ($i > $page + $view); push(@find,$_); } } # 検索終了

    • ベストアンサー
    • CGI

専門家に質問してみよう