kumoz の回答履歴

全323件中181~200件表示
  • 昨日と今日のカウンタについて ご指摘下さい

    昨日と今日のカウンタについて カウンターが1こずつではなく、4つとか5つとかずつ増えてしまいます。ですが、html内の <p>本日の数は<img src="./count.cgi?today">です</p> <p>昨日の数は<img src="./count.cgi?yeaday">です</p> を削除すると、ちゃんと1つずつカウントしていきます。(count.datの本日のカウント数もちゃんと1こずつ増えるのを確認しました。) プログラムの何処が間違っているのでしょうか?アドバイスをお願い申し上げます。 <<count.cgi>> #!C:\Perl\bin\perl # 昨日と今日のカウントの取得 $ENV{'TZ'} = "JST-9"; $mday = (localtime(time))[3]; open (FILE, "<logday.dat") || die "File Open Err!-logday.dat\n"; $logday = <FILE>; close(FILE); ($day, $yesday) = split(/:/, $logday); #それぞれ、今日の日付、昨日のカウント数に分ける open(FILE,"<count.dat") || die "File Open Error!-count.dat\n"; $count = <FILE>; #変数countにデータを収納 close(FILE); ($count, $today) = split(/:/, $count); #それぞれ、トータルカウント数、今日の日付のカウント数に分ける # 数をカウント if($day == $mday){ #同日だったなら、トータルと本日のカウントだけ取る。 &totalcount(); }else{ #違っていたら、本日のカウント数を昨日へ、本日のカウントを0に、日にちを修正 $yesday = $today; $today = 0; open (FILE, ">count.dat") || die "File Open Err!-logday.dat\n"; flock(FILE,2); print FILE "$count\:$today"; flock(FILE,8); close(FILE); open (FILE, ">logday.dat") || die "File Open Err!-logday.dat\n"; flock(FILE,2); print FILE "$mday\:$yesday"; flock(FILE,8); close(FILE); &totalcount(); #その後カウントをとる } # 引数受取 $mode = $ENV{'QUERY_STRING'}; $mode =~ s/\W//g; require "./gifcat.pl"; #画像表示のif文================ if($mode eq "total"){ &total(); }elsif($mode eq "today"){ &today(); }else{ &yestaday();} exit; # ログの更新================================ sub totalcount{ open(FILE, "+<count.dat") || die "File Open Error!\n"; flock(FILE,2); $count++; #トータルカウント数にプラス1 $today++; #同じく本日のカウント数にもプラス1 seek(FILE, 0, 0); print FILE "$count\:$today"; flock(FILE,8); close(FILE); } # カウンタの数字に画像を付ける sub total{ #トータルカウンタ============= @countdata = split(//, $count); foreach $cou(@countdata){ push(@view, "./img-t/$cou.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@view); } sub today{ #今日のカウンタ============= @countdatadt = split(//, $today); foreach $coudt(@countdatadt){ push(@viewdt, "./img-d/$coudt.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@viewdt); } sub yestaday{ #今日のカウンタ============= @countdatady = split(//, $yesday); foreach $coudy(@countdatady){ push(@viewdy, "./img-d/$coudy.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@viewdy); } <<count.html>> <html> <head> <title>カウンタ</title> </head> <body> <p>トータルカウント数は<img src="./count.cgi?total">です</p> <p>本日の数は<img src="./count.cgi?today">です</p> <p>昨日の数は<img src="./count.cgi?yeaday">です</p> </body> </html> <<count.dat>> トータル数:本日のカウント数 <<logday.dat>> 今日の日:昨日のカウント数

    • ベストアンサー
    • u2122
    • Perl
    • 回答数4
  • 昨日と今日のカウンタについて ご指摘下さい

    昨日と今日のカウンタについて カウンターが1こずつではなく、4つとか5つとかずつ増えてしまいます。ですが、html内の <p>本日の数は<img src="./count.cgi?today">です</p> <p>昨日の数は<img src="./count.cgi?yeaday">です</p> を削除すると、ちゃんと1つずつカウントしていきます。(count.datの本日のカウント数もちゃんと1こずつ増えるのを確認しました。) プログラムの何処が間違っているのでしょうか?アドバイスをお願い申し上げます。 <<count.cgi>> #!C:\Perl\bin\perl # 昨日と今日のカウントの取得 $ENV{'TZ'} = "JST-9"; $mday = (localtime(time))[3]; open (FILE, "<logday.dat") || die "File Open Err!-logday.dat\n"; $logday = <FILE>; close(FILE); ($day, $yesday) = split(/:/, $logday); #それぞれ、今日の日付、昨日のカウント数に分ける open(FILE,"<count.dat") || die "File Open Error!-count.dat\n"; $count = <FILE>; #変数countにデータを収納 close(FILE); ($count, $today) = split(/:/, $count); #それぞれ、トータルカウント数、今日の日付のカウント数に分ける # 数をカウント if($day == $mday){ #同日だったなら、トータルと本日のカウントだけ取る。 &totalcount(); }else{ #違っていたら、本日のカウント数を昨日へ、本日のカウントを0に、日にちを修正 $yesday = $today; $today = 0; open (FILE, ">count.dat") || die "File Open Err!-logday.dat\n"; flock(FILE,2); print FILE "$count\:$today"; flock(FILE,8); close(FILE); open (FILE, ">logday.dat") || die "File Open Err!-logday.dat\n"; flock(FILE,2); print FILE "$mday\:$yesday"; flock(FILE,8); close(FILE); &totalcount(); #その後カウントをとる } # 引数受取 $mode = $ENV{'QUERY_STRING'}; $mode =~ s/\W//g; require "./gifcat.pl"; #画像表示のif文================ if($mode eq "total"){ &total(); }elsif($mode eq "today"){ &today(); }else{ &yestaday();} exit; # ログの更新================================ sub totalcount{ open(FILE, "+<count.dat") || die "File Open Error!\n"; flock(FILE,2); $count++; #トータルカウント数にプラス1 $today++; #同じく本日のカウント数にもプラス1 seek(FILE, 0, 0); print FILE "$count\:$today"; flock(FILE,8); close(FILE); } # カウンタの数字に画像を付ける sub total{ #トータルカウンタ============= @countdata = split(//, $count); foreach $cou(@countdata){ push(@view, "./img-t/$cou.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@view); } sub today{ #今日のカウンタ============= @countdatadt = split(//, $today); foreach $coudt(@countdatadt){ push(@viewdt, "./img-d/$coudt.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@viewdt); } sub yestaday{ #今日のカウンタ============= @countdatady = split(//, $yesday); foreach $coudy(@countdatady){ push(@viewdy, "./img-d/$coudy.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@viewdy); } <<count.html>> <html> <head> <title>カウンタ</title> </head> <body> <p>トータルカウント数は<img src="./count.cgi?total">です</p> <p>本日の数は<img src="./count.cgi?today">です</p> <p>昨日の数は<img src="./count.cgi?yeaday">です</p> </body> </html> <<count.dat>> トータル数:本日のカウント数 <<logday.dat>> 今日の日:昨日のカウント数

    • ベストアンサー
    • u2122
    • Perl
    • 回答数4
  • 昨日と今日のカウンタについて ご指摘下さい

    昨日と今日のカウンタについて カウンターが1こずつではなく、4つとか5つとかずつ増えてしまいます。ですが、html内の <p>本日の数は<img src="./count.cgi?today">です</p> <p>昨日の数は<img src="./count.cgi?yeaday">です</p> を削除すると、ちゃんと1つずつカウントしていきます。(count.datの本日のカウント数もちゃんと1こずつ増えるのを確認しました。) プログラムの何処が間違っているのでしょうか?アドバイスをお願い申し上げます。 <<count.cgi>> #!C:\Perl\bin\perl # 昨日と今日のカウントの取得 $ENV{'TZ'} = "JST-9"; $mday = (localtime(time))[3]; open (FILE, "<logday.dat") || die "File Open Err!-logday.dat\n"; $logday = <FILE>; close(FILE); ($day, $yesday) = split(/:/, $logday); #それぞれ、今日の日付、昨日のカウント数に分ける open(FILE,"<count.dat") || die "File Open Error!-count.dat\n"; $count = <FILE>; #変数countにデータを収納 close(FILE); ($count, $today) = split(/:/, $count); #それぞれ、トータルカウント数、今日の日付のカウント数に分ける # 数をカウント if($day == $mday){ #同日だったなら、トータルと本日のカウントだけ取る。 &totalcount(); }else{ #違っていたら、本日のカウント数を昨日へ、本日のカウントを0に、日にちを修正 $yesday = $today; $today = 0; open (FILE, ">count.dat") || die "File Open Err!-logday.dat\n"; flock(FILE,2); print FILE "$count\:$today"; flock(FILE,8); close(FILE); open (FILE, ">logday.dat") || die "File Open Err!-logday.dat\n"; flock(FILE,2); print FILE "$mday\:$yesday"; flock(FILE,8); close(FILE); &totalcount(); #その後カウントをとる } # 引数受取 $mode = $ENV{'QUERY_STRING'}; $mode =~ s/\W//g; require "./gifcat.pl"; #画像表示のif文================ if($mode eq "total"){ &total(); }elsif($mode eq "today"){ &today(); }else{ &yestaday();} exit; # ログの更新================================ sub totalcount{ open(FILE, "+<count.dat") || die "File Open Error!\n"; flock(FILE,2); $count++; #トータルカウント数にプラス1 $today++; #同じく本日のカウント数にもプラス1 seek(FILE, 0, 0); print FILE "$count\:$today"; flock(FILE,8); close(FILE); } # カウンタの数字に画像を付ける sub total{ #トータルカウンタ============= @countdata = split(//, $count); foreach $cou(@countdata){ push(@view, "./img-t/$cou.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@view); } sub today{ #今日のカウンタ============= @countdatadt = split(//, $today); foreach $coudt(@countdatadt){ push(@viewdt, "./img-d/$coudt.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@viewdt); } sub yestaday{ #今日のカウンタ============= @countdatady = split(//, $yesday); foreach $coudy(@countdatady){ push(@viewdy, "./img-d/$coudy.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@viewdy); } <<count.html>> <html> <head> <title>カウンタ</title> </head> <body> <p>トータルカウント数は<img src="./count.cgi?total">です</p> <p>本日の数は<img src="./count.cgi?today">です</p> <p>昨日の数は<img src="./count.cgi?yeaday">です</p> </body> </html> <<count.dat>> トータル数:本日のカウント数 <<logday.dat>> 今日の日:昨日のカウント数

    • ベストアンサー
    • u2122
    • Perl
    • 回答数4
  • 昨日と今日のカウンタについて ご指摘下さい

    昨日と今日のカウンタについて カウンターが1こずつではなく、4つとか5つとかずつ増えてしまいます。ですが、html内の <p>本日の数は<img src="./count.cgi?today">です</p> <p>昨日の数は<img src="./count.cgi?yeaday">です</p> を削除すると、ちゃんと1つずつカウントしていきます。(count.datの本日のカウント数もちゃんと1こずつ増えるのを確認しました。) プログラムの何処が間違っているのでしょうか?アドバイスをお願い申し上げます。 <<count.cgi>> #!C:\Perl\bin\perl # 昨日と今日のカウントの取得 $ENV{'TZ'} = "JST-9"; $mday = (localtime(time))[3]; open (FILE, "<logday.dat") || die "File Open Err!-logday.dat\n"; $logday = <FILE>; close(FILE); ($day, $yesday) = split(/:/, $logday); #それぞれ、今日の日付、昨日のカウント数に分ける open(FILE,"<count.dat") || die "File Open Error!-count.dat\n"; $count = <FILE>; #変数countにデータを収納 close(FILE); ($count, $today) = split(/:/, $count); #それぞれ、トータルカウント数、今日の日付のカウント数に分ける # 数をカウント if($day == $mday){ #同日だったなら、トータルと本日のカウントだけ取る。 &totalcount(); }else{ #違っていたら、本日のカウント数を昨日へ、本日のカウントを0に、日にちを修正 $yesday = $today; $today = 0; open (FILE, ">count.dat") || die "File Open Err!-logday.dat\n"; flock(FILE,2); print FILE "$count\:$today"; flock(FILE,8); close(FILE); open (FILE, ">logday.dat") || die "File Open Err!-logday.dat\n"; flock(FILE,2); print FILE "$mday\:$yesday"; flock(FILE,8); close(FILE); &totalcount(); #その後カウントをとる } # 引数受取 $mode = $ENV{'QUERY_STRING'}; $mode =~ s/\W//g; require "./gifcat.pl"; #画像表示のif文================ if($mode eq "total"){ &total(); }elsif($mode eq "today"){ &today(); }else{ &yestaday();} exit; # ログの更新================================ sub totalcount{ open(FILE, "+<count.dat") || die "File Open Error!\n"; flock(FILE,2); $count++; #トータルカウント数にプラス1 $today++; #同じく本日のカウント数にもプラス1 seek(FILE, 0, 0); print FILE "$count\:$today"; flock(FILE,8); close(FILE); } # カウンタの数字に画像を付ける sub total{ #トータルカウンタ============= @countdata = split(//, $count); foreach $cou(@countdata){ push(@view, "./img-t/$cou.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@view); } sub today{ #今日のカウンタ============= @countdatadt = split(//, $today); foreach $coudt(@countdatadt){ push(@viewdt, "./img-d/$coudt.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@viewdt); } sub yestaday{ #今日のカウンタ============= @countdatady = split(//, $yesday); foreach $coudy(@countdatady){ push(@viewdy, "./img-d/$coudy.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@viewdy); } <<count.html>> <html> <head> <title>カウンタ</title> </head> <body> <p>トータルカウント数は<img src="./count.cgi?total">です</p> <p>本日の数は<img src="./count.cgi?today">です</p> <p>昨日の数は<img src="./count.cgi?yeaday">です</p> </body> </html> <<count.dat>> トータル数:本日のカウント数 <<logday.dat>> 今日の日:昨日のカウント数

    • ベストアンサー
    • u2122
    • Perl
    • 回答数4
  • カウンターで重複カウントの防止について

    勉強がてら以下のようなカウンターをつくりたいと思っています。 1 画像つきのカウンタである 2 重複カウンタを防止したい 3 昨日と今日のカウンターも表示させたい で、2でけつまずきました。 何がいけないのでしょうか? 以下のプログラムだと更新毎にカウンターが回ってしまいます。 ご指摘下さい。よろしくお願い申し上げます。 #!C:\Perl\bin\perl $flg = 0; #IPアドレスの取得と重複カウントの防止============ $ipadd = $ENV{'REMOTE_ADDR'}; #IPアドレスの取得 open (FILE, "<logcount.dat") || die "File Open Err!-logcount.dat\n"; #データをすべて配列logdataに読み込む @logdata = <FILE>; close(FILE); #取得したIPアドレスと履歴のIPアドレスを比較====== for($i=0; $i<=$#logdata; $i++){ if($ipadd eq $logdata[$i]){ #新規のIPデータと過去ログのIPデータが等しかったら $flg = 1; #合致するのは1つのアドレスのみ } } #==================================================================== # $flg = 0 だったら、数をカウント #==================================================================== open(FILE,"<count.dat") || die "File Open Error!-count.dat\n"; #カウントデータの読み込み $count = <FILE>; #変数countにデータを収納 close(FILE); if($flg == 1){ $data = $count; }else{ $data = ++$count; #プラス1をカウント # ログの更新================================== open(FILE, "+<count.dat") || die "File Open Error!\n"; flock(FILE,2); seek(FILE, 0, 0); #.datに上書き保存する為にデータの記位置を調整 print FILE $data; #カウントを記録 flock(FILE,8); close(FILE); # IPアドレスを更新============================= open (FILE, ">>logcount.dat") || die "File Open Err!-logcount.dat\n"; print FILE $ipadd,"\n"; close(FILE); } print $data; #==================================================================== # カウンタの数字に画像を付ける #==================================================================== @count = split(//, $data); foreach $cou(@count){ push(@view, "./img/$cou.gif"); } require "./gifcat.pl"; print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@view);

    • ベストアンサー
    • u2122
    • Perl
    • 回答数1
  • ファイルのアップローダーを動作させたい。

    ファイルをサーバーへ格納するプログラムを検索して作成しました。 見よう見まねなのでおかしい部分があるかもしれません。 entry.cgi #!/perl/bin/perl my $buffer; my $query = CGI->new; my $fh = $query->upload('file') or die(qq(Invalid file handle returned.)); # Get $fh my $file = $query->param('file'); my $file_name = ($file =~ /([^\\\/:]+)$/) ? $1 : 'uploaded.bin'; open(OUT, ">$file_name") or die(qq(Can't open "$file_name".)); binmode OUT; while (read($fh, $buffer, 1024)) { # Read from $fh insted of $file print OUT $buffer; } close OUT; sample.html <HTM><BODY> <FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="./entry.cgi"> <TABLE BORDER="1"> <TR><TD ><B>CSVファイル</B></TD> <TD ><INPUT TYPE="FILE" NAME="filename"></TD></TR> <TR></TR> </TABLE> <BR> <BR> <INPUT TYPE="SUBMIT" NAME="GO" VALUE=" 登録の実行 "> </FORM> </BODY></HTML> 上記のプログラムを実行すると 「CGIWrap Error: Script Execution Failed」と表示されてしまいます。 500のサーバーエラーと同じと調べてわかったのですが、どこがどうおかしいのか?わかりません。 perlの記述が今まで自分が使用していたものと勝手が違うので分からない状態です。 アドバイスもらえると幸いです。

  • CGIROOMさんのデータベースでCSVファイルが読めません。

    カテゴリがデータベースではなく、CGIのようなので、移動しました。 CGIROOMさんの「簡易高機能検索専用データベース SJIS版 Ver 2.04」を使おうとしています。中田 昭雄さんのhttpd 1.42pを使ってオフラインでの動作を確認した後、以下のようにサーバに設置しました。 /┐  ├anon_ftp  ├bin  ├cgi-bin┐  |    ├database.cgi[755]  |    ├jcode.pl  |    ├onlyone.pl  |    └jtc.csv(CSVデータ)  |  ├conf  ├error_docs  ├httpdocs┐  |    ├index.html  |    ├area_1.html  |    ├(etc)  |  ├httpsdocs┐  |     ├html.htm(データ検索表示用)  |     ├html3.htm(データ検索表示用)  |  ├pd  ├private  ├statistics  ├subdomains  └web_users こうしたところ、「データファイルを開けません」と表示されて困っています。 パスの設定は 1.area_1.html <FORM action="../cgi-bin/jtc/database.cgi" method="GET"> <blockquote> 2.database.cgi # 初期設定 #◆ jcode.plまでのパス $require = './jcode.pl'; #◆ onlyone.plまでのパス $onlyonepl= './onlyone.pl'; #◆ データファイルまでのパス $SEEK{'default'} = './jtc.csv'; #◆ テンプレートファイル設定 $html{'default'} = '../../httpsdocs/jtc/html.htm'; $html{'list3'} = '../../httpsdocs/jtc/html3.htm'; です。CSVの格納場所が悪いのか、パス設定が悪いのか、ご指摘お願いしたくよろしくお願いします。

    • 締切済み
    • Jey_tee
    • CGI
    • 回答数3
  • CGIROOMさんのデータベースでCSVファイルが読めません。

    カテゴリがデータベースではなく、CGIのようなので、移動しました。 CGIROOMさんの「簡易高機能検索専用データベース SJIS版 Ver 2.04」を使おうとしています。中田 昭雄さんのhttpd 1.42pを使ってオフラインでの動作を確認した後、以下のようにサーバに設置しました。 /┐  ├anon_ftp  ├bin  ├cgi-bin┐  |    ├database.cgi[755]  |    ├jcode.pl  |    ├onlyone.pl  |    └jtc.csv(CSVデータ)  |  ├conf  ├error_docs  ├httpdocs┐  |    ├index.html  |    ├area_1.html  |    ├(etc)  |  ├httpsdocs┐  |     ├html.htm(データ検索表示用)  |     ├html3.htm(データ検索表示用)  |  ├pd  ├private  ├statistics  ├subdomains  └web_users こうしたところ、「データファイルを開けません」と表示されて困っています。 パスの設定は 1.area_1.html <FORM action="../cgi-bin/jtc/database.cgi" method="GET"> <blockquote> 2.database.cgi # 初期設定 #◆ jcode.plまでのパス $require = './jcode.pl'; #◆ onlyone.plまでのパス $onlyonepl= './onlyone.pl'; #◆ データファイルまでのパス $SEEK{'default'} = './jtc.csv'; #◆ テンプレートファイル設定 $html{'default'} = '../../httpsdocs/jtc/html.htm'; $html{'list3'} = '../../httpsdocs/jtc/html3.htm'; です。CSVの格納場所が悪いのか、パス設定が悪いのか、ご指摘お願いしたくよろしくお願いします。

    • 締切済み
    • Jey_tee
    • CGI
    • 回答数3
  • ファイルから一行ずつ読み込むとき、@F[0] と $_ は違う?

    データファイルを一行ずつ読み込んで、文字列を一文字ずつコンマ区切りにしたいと思っています。たとえば、   xyz → x,y,z としたいと思っています。 今、data.txt に  abc  defgh という2行が書いてあります。  perl -nla -e '@chars= split(//,@F[1]); print join(",",@chars);' data.txt とすると  a,b,c  d,e,f,g,h という出力が無事に得られました。 どうせ、data.txt は一列しか使っていないので、 @F[0] の代りに $_ を使ってみました。  perl -nle '@chars= split(//, $_); print join(",",@chars);' data.txt しかし、結果は  a,b,c,  d,e,f,g,h, のように、各行の最後に余計なコンマが付いてしまいます。 なぜでしょうか? 一列しかデータがないので、@F[0] と $_ は同じだと思っていたのですが、なにか違うのでしょうか?

  • ファイルから一行ずつ読み込むとき、@F[0] と $_ は違う?

    データファイルを一行ずつ読み込んで、文字列を一文字ずつコンマ区切りにしたいと思っています。たとえば、   xyz → x,y,z としたいと思っています。 今、data.txt に  abc  defgh という2行が書いてあります。  perl -nla -e '@chars= split(//,@F[1]); print join(",",@chars);' data.txt とすると  a,b,c  d,e,f,g,h という出力が無事に得られました。 どうせ、data.txt は一列しか使っていないので、 @F[0] の代りに $_ を使ってみました。  perl -nle '@chars= split(//, $_); print join(",",@chars);' data.txt しかし、結果は  a,b,c,  d,e,f,g,h, のように、各行の最後に余計なコンマが付いてしまいます。 なぜでしょうか? 一列しかデータがないので、@F[0] と $_ は同じだと思っていたのですが、なにか違うのでしょうか?

  • 日付(文字列)を数値に戻す

    皆様初めまして。 日付の処理って結構難しいですよね。 私も今まさにどうするべきか悩んでいまして、ご助力頂けないかとこちらに投稿致した次第で御座います。 ▼処理したい内容 ・例えば変数$sitei_time="2009年7月5日"だとして。 ・$sitei_timeの日付は時々により変動いたします。 処理(1) $sitei_timeが$sitei_timeから+3日以降の日付(2009年7月8日以降)ならTRUEを返し、それ以外はFALSEを返したい。 処理(2) $sitei_timeが$sitei_timeから+1~それ以降の日付(2009年7月6日~古い日付)をTRUEで返し、それ以外はFALSEを返したい。 なかなか難しい処理かと思いますが、お分かりの方、ご助力頂ければ幸いです。 宜しくお願い致します。

  • CGIで外部ファイルに書き込みができません

    Perl初心者です。 外部テキストファイルに、HTMLのフォームで入力した情報を書き込み、それを読み込んでHTMLで表示するコードをつくろうとしているのですが、外部ファイルに書き込みができません。(読み込みはできます) コードは以下のとおりです。 #! /usr/bin/perl use strict; my $self = "test.cgi"; my $str = <>; my $filename = "log.txt"; open FH,">$filename"; print FH $str; close FH; my $body; open FH,"<$filename"; my $str2 = <FH>; $body = $str2; close FH; print "Content-type: text/html\n\n"; print <<Q; <html> <head><title>jjj</title></head> <body> <form action = "$self" method = "POST"> <input type = "text" name = "data01" /> <input type = "text" name = "data02" /><br> <input type = "submit" value = "soushinn" /> <hr/> $body </form> </body> </html> Q 環境はMac OS 10.4.11、Apacheを起動して、ローカルでテストしています。 パーミッション等、いろいろ試しましたが、なぜ書き込めないのかよく分かりません。 どなたか原因を教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • hk-sulo
    • Perl
    • 回答数5
  • アスタリスクを検索できません

    以下のテキストデータを、それぞれ*までの一行毎に配列に代入したいのですが、if文で*を検索しようとしてもうまくできません。 あいうえお* かきくけこ* さしすせそ* たちつてと* あいうえお* さしすせそ* あいうえお* 以上のものが元のテキストデータで、「あいうえお」を配列の0番目の要素、「かきくけこ」を1番目の要素、「さしすせそ」を2番目の要素・・・というようにしたいです。 現在のプログラムは、 hash.pl use encoding 'shift-jis'; $pattern = '*'; @txt1 = (); while(<>){ if($_=~/$pattern/){ $in=index($_,$pattern); $temp=substr($_,0,$in); push @txt1,"$temp"; } } print @txt1; となっているのですが、これをコマンドプロンプト上で動かすと、 Quantifier follows nothing in regex; marked by <-- HERE in m/* <-- HERE / at hash.pl line 5, <> line 1. というメッセージが表示されます。 *関連で問題があるのはわかるのですが、どうしても解決策が見つかりません。 よろしくお願いします。

    • ベストアンサー
    • mtd15
    • Perl
    • 回答数3
  • use constantの意味が分からない

    以下の use constant SMAX => 50;とuse constant CMAX => 10; を $SMAX = 50; $CMAX = 10; に変更し、if ( SMAX < $max ) { $n = $max - SMAX; }も if ( $SMAX < $max ) { $n = $max - $SMAX; } と変更しましたが、機能してませんでした。 どこが間違っておりますでしょうか? 宜しくお願いします。 以下がCGIです。 #!/usr/bin/perl # 保存するコメント数 use constant SMAX => 50; # 表示するコメント数 use constant CMAX => 10; #----------------------------- if ($ENV{'REQUEST_METHOD'} eq "POST"){ read (STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; } @list = split (/&/,$buffer); foreach (@list){ ($key,$value) = split (/=/,$_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/ pack ("C",hex($1))/eg; $getdata{ $key } = $value; } $x = $getdata{ 'px' }; $y = $getdata{ 'py' }; $comment = $getdata{ 'com' }; $file = 'comment.dat'; open (IN,"$file"); @list = <IN>; close (IN); chomp(@list); $max = @list; if ( $x != '' ){ $writedata = $x.'<>'.$y.'<>'.$comment; if ( SMAX < $max ) { $n = $max - SMAX; } else { $n = 0; } open (OUT,"> $file"); flock(OUT,2); for ( ; $n < $max; $n++ ) { print OUT $list[$n]."\n"; } print OUT $writedata; close (OUT); } if ( CMAX < $max ) { $n = $max - CMAX; } else { $n = 0; } print "Content-type: text/html\n\n"; for ( ; $n < $max; $n++ ) { print $list[$n]."\n"; } if ( $x != '' ){ print $writedata; } exit ;

    • ベストアンサー
    • nkmyr
    • Perl
    • 回答数6
  • perlで、後ろの行を読んで、前の行に書き込むには?

    perl初心者です。 後ろの行を読んで、戻って、指定の行に、書き込む方法が、よくわかりません。 下記のようなファイルを読み込んで ---------------------------- アルファベット= 1A 2B 3C アルファベット= 1A 2B アルファベット= 1A 2B 3C 4D 5E 6F ------------------------------ 下記のように、「アルファベット=」にアルファベットを入れるには、どうしたらいいでしょうか? ------------------------------ アルファベット=ABC 1A 2B 3C アルファベット=AB 1A 2B アルファベット=ABCDEF 1A 2B 3C 4D 5E 6F -------------------------------- よろしくお願い致します。

  • use constantの意味が分からない

    以下の use constant SMAX => 50;とuse constant CMAX => 10; を $SMAX = 50; $CMAX = 10; に変更し、if ( SMAX < $max ) { $n = $max - SMAX; }も if ( $SMAX < $max ) { $n = $max - $SMAX; } と変更しましたが、機能してませんでした。 どこが間違っておりますでしょうか? 宜しくお願いします。 以下がCGIです。 #!/usr/bin/perl # 保存するコメント数 use constant SMAX => 50; # 表示するコメント数 use constant CMAX => 10; #----------------------------- if ($ENV{'REQUEST_METHOD'} eq "POST"){ read (STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; } @list = split (/&/,$buffer); foreach (@list){ ($key,$value) = split (/=/,$_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/ pack ("C",hex($1))/eg; $getdata{ $key } = $value; } $x = $getdata{ 'px' }; $y = $getdata{ 'py' }; $comment = $getdata{ 'com' }; $file = 'comment.dat'; open (IN,"$file"); @list = <IN>; close (IN); chomp(@list); $max = @list; if ( $x != '' ){ $writedata = $x.'<>'.$y.'<>'.$comment; if ( SMAX < $max ) { $n = $max - SMAX; } else { $n = 0; } open (OUT,"> $file"); flock(OUT,2); for ( ; $n < $max; $n++ ) { print OUT $list[$n]."\n"; } print OUT $writedata; close (OUT); } if ( CMAX < $max ) { $n = $max - CMAX; } else { $n = 0; } print "Content-type: text/html\n\n"; for ( ; $n < $max; $n++ ) { print $list[$n]."\n"; } if ( $x != '' ){ print $writedata; } exit ;

    • ベストアンサー
    • nkmyr
    • Perl
    • 回答数6
  • File::Findモジュールの例外処理

    サーバー内の入り組んだ階層の中にある全てのhtmlファイルをEUCコードに一括 変換処理したいと考えています。 但し、あるひとつのディレクトリ内とそのディレクト以下の階層にあるhtmlファイルは 処理したくありません。 require "jcode.pl"; use File::Find; find(\&fileProc, './public_html'); sub fileProc { my $fname = $_; return unless -f $_; #### ここに例外処理を書けばいいと思うのですが・・・ return unless /\.html$/; open IN, $fname; open TMP, ">$fname.temptemp"; # 存在しないファイル名 while (<IN>) { &jcode'convert(*_,'euc'); print TMP; } close IN; close TMP; rename "$fname.temptemp", $fname or warn "cannot rename $fname because $! \n"; } どう書けばいいのかよろしくご教授ください。

  • コマンドラインで通っているパスがブラウザからだと通っていない

    以下のようなcgiを組みました。  #! /usr/bin/perl -w    use Calendar::Simple;  use CGI::Carp qw(fatalsToBrowser);  use Data::Dumper;  use lib "/home/makoji/makoji00001/myperl/lib";    my @curr=calendar;  print Dumper(@curr); レンタルサーバー上のこのCGIをSSHで  perl calendar.cgi とやるときちんと作動します。 しかしながらブラウザから作動すると500 Internal Sever Errorが出ます。 エラーログを見ると、以下のようになっています。 [Fri Jun 12 23:53:51 2009] [error] [client 114.162.47.49] Can't locate Calendar/Simple.pm in @INC (@INC contains: /usr/lib/perl5/5.8.8/i686-linux /usr/lib/perl5/5.8.8 /usr/lib/perl5/site_perl/5.8.8/i686-linux /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl .) at /home/makoji/makoji00001/www/calendar.cgi line 3. [Fri Jun 12 23:53:51 2009] [error] [client 114.162.47.49] BEGIN failed--compilation aborted at /home/makoji/makoji00001/www/calendar.cgi line 3. [Fri Jun 12 23:53:51 2009] [error] [client 114.162.47.49] Premature end of script headers: calendar.cgi Calendar/Simple.pmが@INCの中に無いとエラーが出ています。3行目でコンパイルに失敗したのもやはりCalendar/Simple.pmです。 @INCにCalendar/Simple.pmのパスを通すためにcgi頭で  use lib "/home/makoji/makoji00001/myperl/lib"; を宣言しているわけです。 で、SSHを用いてコマンドラインから実行すると作動します。 なのに、何でブラウザからだと500 Internal Server Errorが出るのでしょう。 そもそも  use CGI::Carp qw(fatalsToBrowser); と宣言しているのに500 Internal Server Errorが出るというのも可笑しな話です。 何に問題があるのでしょうか。 ちなみに.bashrcは以下のようになっています。  # .bashrc    # Source global definitions  if [ -f /etc/bashrc ]; then   . /etc/bashrc  fi    # User specific aliases and functions  export MANPATH=/home/makoji/makoji00001/myperl/man  export PERL5LIB=/home/makoji/makoji00001/myperl/lib お手数をお掛けします。

  • 日付表示 月またぎ

    初めて質問させていただきます。 私は現在、cgiにて1週間予定を作成しております。 本日を基準に7日間、日にちを表示させたいのですが、月をまたぐ事が出来ず困っています。 5/26|5/27|5/28|5/29|5/30|5/31|6/1| という形で表示させたいのですが、何か良い方法はないでしょうか? cgi初心者なので、全くよくわかっていない状態ですが、現在は今日の日付を取得し、次の日には$d+1みたいな形で表示させています。 説明も下手ですいません。 どなたかご理解頂けた方がいらっしゃいましたら、ご教授下さい。 宜しくお願いします。 

    • ベストアンサー
    • chaporan12
    • CGI
    • 回答数1
  • サブルーチンの返値に配列のハッシュ

    いつもお世話になっております。 HTML::Templateを使用する為、サブルーチンの返値に配列のハッシュを入れたいと思っていますが、うまくいきません。 また、myの使い方が分からず、返値までの方法も若干気になります。 よろしくお願い致します。 use HTML::Template; @loop = &loop_make('aa<>ab<>ac','ba<>bb<>bc','ca<>cb<>cc'); my $template = HTML::Template->new(filename=>'sample.html'); $template->param(loop=>\@loop); print "Content-Type: text/html\n\n"; print $template->output; exit; sub loop_make{ @aaa = (); foreach $xxx (@_) { ($one,$two,$three) = split(/<>/,$xxx); push @loop, { one => $one, two => $two, three => $three }; } return \@aaa; }