![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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はあえてつかっています.
No.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;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
window.open でのファイル指定方法
-
fgets で値が取得できない
-
MATLABのm-fileについて
-
WindowsでPerlをする際,1行目の...
-
ファイル全てを .xlsm に変更し...
-
ファイルの存在の有無を確かめ...
-
巨大なテキストの最終行を取得...
-
fortranのopen文について。
-
行を指定して削除する方法PERL
-
JSP URLに表示される拡張子 .jsp
-
PerlでHTTPを扱いたい
-
VBAでCSVファイルの特定行を書...
-
ReadLineでの読み出し行を指定する
-
awkスクリプトでダブルクォーテ...
-
VBAで巨大なファイルの途中から...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
htaccessで特定のディレクトリ...
-
fopenでディレクトリ内の全ファ...
-
ファイル出力の改行コードをLFに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python renameについて
-
fgets で値が取得できない
-
window.open でのファイル指定方法
-
巨大なテキストの最終行を取得...
-
ファイル全てを .xlsm に変更し...
-
read() on unopened filehandle...
-
csvファイルの横方向への改行に...
-
VBAコードを張り付け後のエクセ...
-
Firefox で file:// で始まる U...
-
JSP URLに表示される拡張子 .jsp
-
drtファイルはどうしたら開...
-
並び方、
-
重複ファイル名ある場合ファイ...
-
VBA テキストファイルを読み取...
-
cgiでサーバーにファイルを追加...
-
HTMLのフォームで画像と文...
-
WindowsでPerlをする際,1行目の...
-
バイナリファイルの出力
-
Perlでのパーミッション変更の仕方
-
foreach内での変数の扱い?
おすすめ情報