電子書籍の厳選無料作品が豊富!

perlでファイルへの書き込みができません!
教えてください.
webプログラミング初心者なのですが,

フォームから送信されたデータをshift-jisに変換させてからbbs1.txtへの内容の書き出しを行いたいのですが,

#!/Applications/XAMPP/xamppfiles/bin/perl
print "Content-type: text/html; charset=utf-8\n\n";

# フォーム部分を表示する
print <<EOL;
<html>
<body>
<h2>一行掲示板</h2>
<form method="post" action="bbs1.cgi">
メッセージ:<input type="text" name="message" size="60">
<input type="submit" value="送信">
</form>
<hr>
EOL

&ReadParse(*form);

# フォームの値を取得
$message = $form{"message"};

use Encode;
use Encode::Guess qw(euc-jp shiftjis 7bit-jis);
encode("shiftjis",decode('Guess',$message));

# ログファイル読み込み
open(IN, "bbs1.txt");
@log = <IN>;
close(IN);

# メッセージが入力されているときは書き込み処理を行なう
if ($message ne "") {
# ログ先頭にメッセージを格納
unshift @log, "$message\n";

# ログファイルに書き込み
open(OUT, "> bbs1.txt");
print OUT @log;
close(OUT);
}

# ログ表示
foreach $data (@log) {
chop $data;
print "$data<br>\n";
}

print "</body>\n</html>\n";

このような感じにし実行して後でtxtファイルを見ると何も書かれていません><
なぜでしょうか...?
教えて下さい><
今気づいたのですがそれに関連してなのかログも表示されていませんでした...><
txtファイルのアクセス権は読み書き可になっています

encodeはあえてつかっています.

A 回答 (1件)

適当。

表示がくずれるので、空白2文字を全角空白にしていることに注意

use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI::Pretty;
use Encode;
use Fcntl ':flock';

use constant LOG_FILE => '/tmp/data.txt';

my $q   = new CGI;
my $sended = $q->param('send');
my $text;
if ( defined $sended ) {
  my $message = $q->param('message');
  $text = overwrite_file( LOG_FILE, $message );
}
else {
  $text = read_file(LOG_FILE);
}

my $script_name = $q->script_name;
my $html    = << "END_HTML";
<html>
  <body>
    <h2> one line comment</h2>
      <form method="post" action="$script_name">
        Message : <input type="text" name="message" size="60">
        <input type="submit" name="send" value="send">
      </form>
      <hr>
      <pre>$text</pre>
  </body>
</html>
END_HTML

print $q->header( -type => "text/html", -charset => 'UTF-8' ), $html;

### Sub Routines

sub read_file {
  my $file = shift || die "Require file";

  my @lines = ();
  if ( open my $fh, '<:encoding(shiftjis)', $file ) {
    flock $fh, LOCK_EX;
    @lines = <$fh>;
    close $fh or die "$!:$file";
  }
  return join q{}, @lines;
}

sub overwrite_file {
  my $file = shift || die "Require file";
  my $message = shift;

  my @lines = ();
  my $exist;
  my $fh;
  if ( open $fh, '+<:encoding(shiftjis)', $file ) {
    $exist = 1;
  }
  else {
    open $fh, '>:encoding(shiftjis)', $file or die "$!:$file";
    $exist = 0;
  }

  flock $fh, LOCK_EX;
  if ($exist) {
    @lines = <$fh>;
    seek $fh, 0, 0;
    truncate $fh, 0;
  }

  $message .= "\n";
  my $utf8
    = Encode::is_utf8($message)
    ? $message
    : Encode::decode_utf8($message);
  unshift @lines, $utf8;
  print {$fh} @lines;

  close $fh or die "$!:$file";
  return join q{}, @lines;
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!