• ベストアンサー
  • 暇なときにでも

メッセージが上に追加される掲示板

Perl超初心者ですが、お願いいたします。 掲示板(本当は、友人の原稿をホームページに自分で載せてもらうスクリプト)を、だいたい以下のように組んでみました。 require "cgi-lib.pl"; require "jcode.pl"; $naiyou = $in{"naiyou"}; &ReadParse;&jcode'convert(*naiyou,"euc"); $datafile="data.txt"; $tempfile="hokan"; open (TEMP,">$tempfile"); print TEMP "<font size=\"2\">$naiyou</font>"; open(DATA,"$datafile"); while (<DATA>) { print TEMP $_; } close(DATA) ; close(TEMP) ; rename($tempfile,$datafile); ところが、ローカルでは動いたものの、私が借りた、CGIを使える無料のサーバーでは、パーミッションを777に設定できません。(詳しい説明がないのですが、他のユーザーに書き込み権限を与える設定はどれも駄目そうです) そこで、リネームを使わないで、上に追加していくスクリプトを作れないものでしょうか。無理ですか? サンプルがあるホームページなどを紹介していただけるとうれしいです。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数32
  • ありがとう数1

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

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

open (TXT,"$datafile"); @lines = <TXT>; close(TXT); unshift(@lines, "$naiyou\n"); seek(TXT, 0, 0); open(DATA,">$datafile"); print DATA @lines truncate(DATA, tell(DATA)); close(DATA) ; でできたはず。 だめなときは補足してください。 ではでは☆

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。できました!  最初、jcode.plを なぜか大文字のファイル名にしたりディレクトリ構造が 違っちゃったりして、直すまで3時間くらいかかりました。(^^;) しかし、ともかく、おかげさまで、一応のものですが 設置できました。 本当にどうもありがとうございました。m(__)m

関連するQ&A

  • cgiのopenについて

    cgiのopenを使って下記のソースを作りました。 が、読み込んだテキストの一行目しか読み込みませんToT require 'cgi-lib.pl'; &ReadParse(*answer); $data = "$answer{'text'}"; require 'jcode.pl'; &jcode'convert(*data,'sjis'); open(dataright,"<data.txt"); $data= <dataright>; close(dataright); print "Content-type:text/html\n\n"; print <<EOF; <html> <head> <title>メール送信フォーム</title> </head> <body> ------------------<br> お知らせ<br> $data ------------------<br> </body> </html> EOF exit; ちなみにテキストは改行に<br>を入力してあります。 ぜひアドバイスをお願いいたします。

    • ベストアンサー
    • CGI
  • cgi出力での文字コードについて

    下記のソースをsjisで作っていて、出力するdata.txtをuft-8で保存したいです。 どのようにすればよいでしょうか? 下記ソースでは、data.txtはsjisになっています。 尚、htmlはsjisなのでそのまま使用したいです。 どなたか教えてください。 宜しくお願いします。 ############################# #!/usr/local/bin/perl require 'jcode.pl'; require 'cgi-lib.pl'; &ReadParse; $datafile='data.txt'; ←これの保存のみutf-8にしたい open(FH,">$datafile"); print FH "$in{'name'}"; close(FH); rint "Content-type:text/html\n\n"; print "<meta http-equiv='Content-Type' content='text/html; charset=Shift_JIS'>"; print "<html><head></head><title>テスト</title><body>\n"; print "<center>入力完了しました。</center><hr /><br>\n"; print "<b>名前:</b>$in{'name'}<br>\n"; print "<hr />\n"; print "</body></html>";

    • 締切済み
    • CGI
  • mkdirでのファイルロック

    私はCGIの経験がほとんどなく超初心者です。下記のようなファイルを作りましたがファイルのロックをしなければデータが書き込まれないようなので困ってしまっています。flockはつかえないようなのでmkdirでロックをかけたいのです。 #! /usr/local/bin/perl $| = 1; require './jcode.pl'; require './mimew.pl'; require './cgi-lib.pl'; &ReadParse(*FORM); $thisfile = 'mother'; $countfile = './mother.txt'; $predatadir ='./mom'; $fromname = "sabra net"; $fromemail = '***@****.co.jp'; $act = $FORM{'act'}; #### main始動 #### if($act eq "indata"){   &getnumber;   &datamod;   &inputDB;   &mailsend;   &view; } else{   &datamod;   &kakunin; } #### main終了 #### #### メッセージ番号設定 #### sub getnumber {   open(COUNTER,"$countfile") || &error('countfileが開けない');     $this_num = <COUNTER>;   close(COUNTER);     $this_num++;   open(COUNTER,">$countfile") || &error('countfileに書きこめない');     print COUNTER "$this_num";   close(COUNTER);   if( length($this_num) == 1 ){     $this_num ="000000" . $this_num;   }   elsif( length($this_num) == 2 ){     $this_num ="00000" . $this_num;   } } #### datafileへ入力 #### sub inputDB {   $datafile = "$predatadir/userdata01.csv";    open(DB,">>$datafile") || &error('datafileに書きこめない');      print DB "$yourname,$email\n";    close(DB); }

    • 締切済み
    • CGI
  • &jcode'convert(しても文字化けする

    cgiにある日本語文書contents.txtをメール受信すると文字化けします。 解決策を教えてください。 require './jcode.pl'; open(FH, ">contents.txt"); print FH @contents; close(FH); #連結 $contents=""; foreach $key (@contents) { $contents=$contents.$key; } &jcode'convert(*contents,'jis');

    • ベストアンサー
    • CGI
  • if構文を追加するとうまくうまく動きません。。。

    すみません、CGIの初心者なのですが、下記のプログラムをしたところうまく起動せず困っております。ifの構文を抜いた場合はうまく動くのですが、名前欄等を入力されなかった場合、エラー表示を出したく、if文を追加したのですが、うまく動きません。どなたか原因おわかりになりますでしょうか? #!C:\Perl\bin\perl # ライブラリ require 'cgi-lib.pl'; # デコードサブルーチン &ReadParse(*form); # ライブラリ require 'kaiin_sub.pl'; #名前欄、メールアドレス欄、住所欄、郵便番号欄がのチェック if($form{'name'} eq""||$form{'mail'} eq""||$form{'post'} eq""||$form{'jyusyo'} eq""){ #必要事項が空白のとき #エラーコードを表示するサブルーチン &input_error; #cgiプログラムの終了 exit; }else{ # ライブラリ require 'jcode.pl'; # 文字コード変換サブルーチン &jcode'convert(*form,'sjis'); # 連想配列から値だけを取り出し、区切りのハイフンを追加 $data = "$form{'name'}\n$form{'furigana'}\n$form{'mail'}\n$form{'post'}\n$form{'jyusyo'}\n$form{'jyusyo1'} \n$form{'kansou'}\n\n----------\n\n"; # 追加書き込みモード open(ENQ, ">>enquete.dat") || die "File 'enquete.dat' Open Error."; flock(ENQ, 2); print ENQ $data; flock(ENQ, 8); close(ENQ); # -----ここから出力 ----- print "Content-type:text/html\n\n"; print << "END_OF_HTML"; <HTML> <HEAD> <TITLE>(^_^)</TITLE> </HEAD> <BODY bgcolor="cornflowerblue"> <CENTER> <B><FONT size="6"> <FONT color="white"> <BR> 会員登録は完了致しました。 <P> ご協力ありがとうございました。</FONT> <P> <FONT color="white">(^O^)/~</FONT> </B> </CENTER> </BODY> </HTML> END_OF_HTML } またkaiin_sub.pは以下となります。 # -- 入力不足エラーを表示するサブルーチン -- sub input_error { print "Content-type:text/html\n\n"; print << "END_OF_ERROR"; <HTML> <HEAD> <TITLE>エラー</TITLE> </HEAD> <BODY> <CENTER> <FONT size="6" color="red"><B> <BR> お名前欄、メールアドレス、郵便番号、住所のいずれかが空白です <P> もう一度入力して下さい。 </B></FONT> </CENTER> </BODY> </HTML> END_OF_ERROR } 宜しくお願い致します。

    • 締切済み
    • CGI
  • jcode.plの使い方

    最近cgiを始めたばかりの者です。 HTMLでフォームを作り、 FORM action="view.cgi"method="GET" でcgiに渡すようにしました。 CGIで受け取った文字に全角があると %83%8B%83i%83e%83B%83N%83X のような文字化けをします。 調べてみたところjcode.plを使えば 文字化けを回避できるようですがうまく いきませんでした。 質問1.jcode.plを読み込ませるのは 上記のview.cgiで良いのでしょうか。 質問2.require "jcode.pl";といれた後 具体的にどのように受け取ったデータを jcodeに渡せばいいのでしょうか? @data = split(/&/,$ENV{QUERY_STRING}); で@dataに受け取った情報を渡しています。 ご教授頂ければと思います。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • CGIで二つの仕事をしたい

    464487で質問したOtanoshikeです。 メール送信CGIは_mer_さんに教えて頂いたように直したら、無事動くようになりました。 今度は、このCGIの中で、メール送信後にファイル転送をしようとしています。 一応動いてはいるようなのですが、最後の確認ページが出ません。 どこが悪いのでしょうか?恐らくはまた基本的なことを無視しているのでしょうね。 よろしくお願いいたします。 (a.cgi) #!/usr/bin/perl require '../mimew.pl'; require '../jcode.pl'; $sendmail = "/var/qmail/bin/sendmail"; $master_id = "ho\@hoge.net"; $msg="メッセージ"; &jcode'convert(*msg,'jis'); open (ML,"| $sendmail $master_id"); print ML $msg; close(ML); $filename=$ARGV[0]; $file="/~/~/$filename"; $filetype='x-exe'; print "Content-Disposition:attachment;filename=\"$filename\"\n"; print "Content-type:application/$filetype\n\n"; open(FILE,"$file"); while(<FILE>){ print "$_"; } close FILE; print "Content-type: text/html\n\n"; print "<html><head>\n"; print "</head>\n"; print "<body>sent.\n"; print "</body></html>\n"; exit;

    • ベストアンサー
    • CGI
  • perlで作った掲示板、エラーが出てしまう。

    課題でperlの掲示板を作成したのですが、動作せず困っています。間違いを教えてください。 #!C:/Perl/bin/perl require 'html_data.pl'; require 'cgi-lib.pl'; require 'jcode.pl' if($ENV{'REQUEST_METHOD'}eq"POST"){ &ReadParse(*answer); $name=$answer{'name'}; $mail=$answer{'mail'}; $title=$answer{'title'}; $text=$answer{'text'}; $name=~s/,/,/g; $name=~s/&/&/g; &name=~s/"/"/g; $name=~s/<</g; $name=~s/>/>/g; $mail=~s/,/,/g; $mail=~s/&/&/g; &mail=~s/"/"/g; $mail=~s/<</g; $mail=~s/>/>/g; $title=~s/,/,/g; $title=~s/&/&/g; &title=~s/"/"/g; $title=~s/<</g; $title=~s/>/>/g; $text=~s/,/,/g; $text=~s/&/&/g; &text=~s/"/"/g; $text=~s/<</g; $text=~s/>/>/g; $data="$name,$mail,$title,$text"; &jcode'convert(*data,'sjis'); if($name ne""&& $title ne""&& $text ne""){ ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time()); $mon=$mon+1; @youbi=('日','月','火','水','木','金','土'); $time="$mon月$mday日$youbi[$wday]曜日$hour時$min分"; $all_data="$time,$data\n"; open(ANSWER,"<answer.dat"); @all=<ANSWER>; close(ANSWER); unshift(@all,$all_data); open(ANSWER,">answer.dat"); flock(ANSWER,2); print ANSWER @all; flock(ANSWER,8) close(ANSWER); } } &form; open(ANSWER,"<answer.dat"); @all=<ANSWER>; foreach(@all){ ($time,$name,$mail,$title,$text)=split(/,/,$_); &toukou; } close(ANSWER); &footer; exit;

    • ベストアンサー
    • Perl
  • jcode.plアップロード不要の場合の設定変更

    CGI設置にあたり、設定変更で悩んでいます。 jcode.plがサーバーにプリインストールされているためアップロードは不要で、require 'jcode.pl'; と記載するようにとのことです。 require "./jcode.pl"; となっているものについては問題なかったのですが、 $jcode = './jcode.pl'; 中略 require $jcode; と記述されているものを、どのように書き換えたらよいのか分かりません。 ご教授のほど、どうぞよろしくお願い致します。

    • 締切済み
    • CGI
  • 指定行に書込み

    open( IN, "log.cgi" ); @f_data = <IN>; close( IN ); $i = '1'; open( OUT, ">dat.cgi" ); select OUT; print "document.open();\n"; print "document.write('"; foreach( @f_data ){ if( $i > 5 ){ last; } ( $f_data1, $f_data2, $f_data3, $f_data4 ) = split( /<>/ ); $f_data1 =~ s/ //g; print "$f_data1"; $i++; } print "');\n"; print "document.close();\n"; select STDOUT; close( OUT ); 上記スクリプトで、指定された行数、又は指定された場所でdat.cgiに 書き出したいのですが、どのように書けばよろしいのでしょうか? 例えば、 ・100行目に書き出す。 または、 ・指定された文字列の間に書き出す。 (例)<!--開始-->ここに書き出す。<!--終了--> このどちらかが出来ればいいのですが、上記スクリプトをどのように変更すれば可能になるでしょうか?お手数ですが、どうぞ宜しくお願いいたします。

    • ベストアンサー
    • Perl