Perl コーディング初心者質問コーナー Part33
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/03/01 02:46ID:1GeWO7LH【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0514nobodyさん
04/03/16 15:41ID:???0516nobodyさん
04/03/16 16:45ID:VuQW4BOKHP宣伝掲示板を設置しているのですが、
何度もしつこく投稿してくるサイトのURLを
拒否設定にして、「そのURLは投稿できませんよ」
と、表示させているのですがしつこく登録を試みてきます。
で、拒否表示ではなく、ロケーションなどを使って
空白のページに飛ばすか、500エラーを返すか
どっちが効果的か悩んでいるのですが、
皆さんはこういう場合、どうされますか?
0517487
04/03/16 17:24ID:???$buf = "abc=def";
$buf =~ tr/&=/\0/;
%in = split(/\0/,$buf);
}
for (0..500000){
$buf = "abc=def";
foreach (split(/&/,$buf)) {
($n,$v)=split(/=/);
$in{$n} = $v;
}
}
foreachの方が1.2倍以上早かった。
日本語だったりするともっと差が出そうだ。
データの取り方はこんな感じでいいですか。
0521517
04/03/16 20:10ID:???データはたくさん取りましたが。
0523nobodyさん
04/03/16 22:15ID:???SDBM, GDBM など色々あって正直何を使えばいいのかわかりません…。
それぞれのメリットデメリットは何があるのでしょうか?
試しに、SDBM, GDBM を使ってみたところ、
SDBM は pag と dir ファイルが生成されて、ファイルサイズは 1024 バイト。
GDBM は、ファイル名を指定できて、ファイルサイズは何もデータが入っていなくても 12288 バイトのものができました。
GDBM についてはデータを増やすと、それに比例してファイルサイズも増えていくみたいです。(12288バイト以下には絶対ならない)
これって、ちょっとしたデータに使う場合は、GDBMだと毎回10Kくらいのファイルが作られちゃうってことなのでしょうか?
また、SDBMは、1KB以上のデータは扱えないのでしょうか?扱うとどうなるのでしょうか?
Perl のバージョンは5.6、OSはLinuxです。
0524nobodyさん
04/03/16 22:41ID:???http://perldoc.com/perl5.8.0/lib/AnyDBM_File.html
http://perldoc.jp/docs/modules/BerkeleyDB-0.20/BerkeleyDB.pod
個人的には、多機能で制限の少ない DB_File をよく使う。
レコードサイズが 1KB で充分で、どんなサーバで使うか
分からないような時は使える可能性が高い SDBM を選ぶ。
0525523
04/03/16 22:53ID:GOniTDMIレスありがとう。
DB_File がなんとなくよさそうな気がしてきました。
(比較表が抽象的でいまいちわかりませんでした…)
それと、DBMファイルは全部ロック機能はサポートしているのでしょうか?
GDBM は自動で flock がかかると聞いたことがありますが。。。
0526nobodyさん
04/03/17 04:19ID:???ご存じの方がいましたら教えていただきたいのですが。
perlスクリプト中のperl呼び出し時に起動オプション[-w]を付けて書いています。
そうしても処理結果自体は欲しい結果が得られるのですが、
警告文として、以下のものが出力されます。
警告文
Use of uninitialized value in string eq at test.cgi line 10.
Use of uninitialized value in string eq at test.cgi line 52.
該当スクリプト記述
10 : if ($ENV{'REQUEST_METHOD'} eq "POST") {
52 : if ($form{'key'} eq '')
http://www.att.or.jp/perl/man/perldiag.1.html
ここの情報で未定義値を初期化しないで使用しているという
原因までは解ったのですが、if文のeqに対してどう初期化を
行えば良いのか、解決策を探すことができませんでした。
この問題の解決方法をどなかたご教授下さい。
0527nobodyさん
04/03/17 06:34ID:???if (defined $ENV{REQUEST_METHOD} && $ENV{REQUEST_METHOD} eq 'POST'){
0528nobodyさん
04/03/17 08:37ID:???perlのソートを使おうとしているんですが、微妙に意味が分からない事になりました。
sort {$a <=> $b} @aaa;
数字を並べる時、この書きかたが一般的だと思うのですが、
$aと$bってなんでしょう。
「イツのまに、なにが代入されたのでしょうか?」←これが質問1。
で、実際のソートは、返ってくる数字「-1」「0」「1」の三種類によってsortが返すリストの順番だと思ったのですが、
「それは正解ですか?」←質問2
もし、正解ならば「-1」「0」「1」の三種類が発生する形式ならば可能ですか?
それとも、必ず「$a」「$b」を使うような形式にする必要がありますか?←質問3
詰まる所、$aと$bの中身がよく分からないので、sort自体がよく分からない物になってしまってます。
m(__)m
0529nobodyさん
04/03/17 08:49ID:???@values = split(/■/, $aiueo);
$i = 0;
foreach $value (@values){
if($value eq ""){
@values[$i] = "NULL";
}
print "$i : @values[$i]\n";
$i++;
}
これを実行すると、
0 : 1
1 : 2
2 : NULL
3 : NULL
4 : 3
5 : 4
こう表示されます。
しかし、最後の5以降はsplitでは無視されてしまうようです。
自分としては
0 : 1
1 : 2
2 : NULL
3 : NULL
4 : 3
5 : 4
6 : NULL
7 : NULL
8 : NULL
としたいのですが可能でしょうか。
0530nobodyさん
04/03/17 09:29ID:???書籍やインターネットでやり方を調べていく中で、次のような
注意事項が記載しているものを見つけました。
1:$dbh = DBI->connect(****);
2:$sth = $dbh->prepare(*****);
3:$sth->execute();
4:$sth->finish();
5:$sth = $dbh->prepare(*****);
6:$sth->execute();
7:$sth->finish();
8:$dbh->disconnect();
の様に一回のDBコネクション中で2回のコマンド発行を
するときは、一回目(上記2〜4)と二回目(上記5〜7)で
ハンドル変数名を変えなければならない(例えば5〜7は
$sthではなく、$sth2にする)というものです。
自分の環境下の簡単なプログラム中では問題なく
動いているのですが、本当に注意すべき内容なのでしょうか?
0531nobodyさん
04/03/17 10:03ID:???こっちはあんたの質問がよく分からんよ…
物凄く簡単に言うと、リストから2つ取り出して$a、$bに代入されて { } 内を呼び出すというのを
何回も繰り返すのがsortの基本動作。
$a、$bってのはこの名前で決まってるから変更できない。
{ } 内では -1、0、1 のどれかを返しさえすればどんな式だっていい。
$a、$bを参照しなくてもかまわないけど、それじゃソートを使う意味がまったくない。
0532nobodyさん
04/03/17 10:20ID:???http://perldoc.com/perl5.8.0/pod/func/sort.html
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_sort_SUBNAME_LIST
>>529
http://perldoc.com/perl5.8.0/pod/func/split.html
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_split__PATTERN__EXPR_LIMIT
>>530
http://pc2.2ch.net/test/read.cgi/php/1015943725/
0534199☆
04/03/17 11:00ID:???エラー、ファイルが開けませんって出ます。
助けてください
0535nobodyさん
04/03/17 11:13ID:???@list = (A,B,C,D,E,F);
ってのがあって
EとFだけ取り出して別の配列に入れたい
場合ってのはどうやってやればいいんでしょうか
0536nobodyさん
04/03/17 11:16ID:???http://www5a.biglobe.ne.jp/~n_rieko/perl/3.htm
0537nobodyさん
04/03/17 11:27ID:???element1 => [ 1, 2 ,3, 4, 5],
element2 => [ 3, 4 ],
element3 => [ 5, 6 ],
);
print "Content-type: text/html\n\n";
for ($i=0; $i<= (@hash{"element1"} -1) ;$i++){
print $hash{"element1"}[$i] . "<br>";
}
てっいうスクリプトがあるんですが、
$i<= (@hash{"element1"} -1)
の部分、リファレンスに関する知識が乏しいために、
苦し紛れに書いていて、見苦しいです。
もっとスマートに($#などを使って?)書くには
どうすればいいのでしょうか?
というか、こういう場合、普通、
$i<= (@hash{"element1"} -1) の部分はどうやって書くもんなのでしょうか?
0538nobodyさん
04/03/17 11:35ID:8yt30+/4foreach(@data) {
if($_ eq ("E" || "F")) {
push(@tmp,$_); next;
}
push(@new,$_);
}
print @tmp;
print @new;
0539501
04/03/17 11:39ID:???> てっいうスクリプトがあるんですが、
ホントか?あるのか?
@hash{"element1"}って何表わしてる?
ホント動いた?
> $i<= (@hash{"element1"} -1) の部分はどうやって書くもんなのでしょうか?
$i < @{$hash{"element1"}}
0540nobodyさん
04/03/17 11:39ID:8yt30+/4foreach(@list) {
if(($_ eq "E") || ($_ eq "F")) {
push(@tmp,$_); next;
}
push(@new,$_);
}
0541nobodyさん
04/03/17 11:41ID:8yt30+/4$_の値がEもしくはFだったら
というifの書き方だけど
if(($_ eq "E") || ($_ eq "F"))
以外にいい方法ない?
0542nobodyさん
04/03/17 11:44ID:???亀レスでスマソ
http://216.239.53.104/search?q=cache:xeL-yvLnImUJ:member.nifty.ne.jp/hippo2000/perltips/Cgi.htm+cgi.pm+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%80%80%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA&hl=ja&ie=UTF-8
-private_tempfiles
CGI.pmはアップロードされたファイルを処理することができます。
通常、アップロードされたファイルはテンポラリ・ディレクトリに
スプールされ、処理が終ると削除されます。
しかし、これには「ファイル・アップロード」セクションでも説明
しているように盗聴の危険性があります。
それが秘密の情報であっても、アップロードの途中に他のCGIスクリプト
の作者が覗き見ることができます。
UNIXシステムでは、-private_tempfilesプラグマは、テンポラリ・ファイル
を開かれると、何かデータが書込まれる前に、すぐに削除されるようにします。
これにより盗聴の危険性を減らしますが、完全ではなりません。
(まだ潜在的に可能な状態です)アタッカーに厳しく対応するためには、
プログラムは一時ファイル名をやって来たHTTTPヘッダの32ビットチェックサム
を計算することで選択します。
0543nobodyさん
04/03/17 11:45ID:???続き〜
一時ファイルが他のCGIスクリプトが読むことが出来ないことを保証するには、
スクリプトを実行するためにsuEXEC または CGI ラッパを使ってください。
一時ファイルはモード 0600(ワールドもグループも読むことが出来ない)で
作成されます。
一時ディレクトリは以下のアルゴリズムを使って選択されます:
1. 現在のユーザ(例えば"nobody")がホーム・ディレクトリに"tmp"と
いうディレクトリを持っていれば、それを使います(Unixシステムのみ)
2. 環境変数TMPDIRがあれば、示された場所を使います
3. そうでなければ、以下の場所を当たります /usr/tmp, /var/tmp, C:\temp,
/tmp, /temp, ::Temporary Items, and \WWW_ROOT.
それぞれの場所はそれがディレクトリであるか、書きこみ可能かをチェックされます。そうでなければアルゴリズムは次の選択を挑戦します。
0544nobodyさん
04/03/17 11:46ID:???> if(($_ eq "E") || ($_ eq "F"))
foreach $list(@list) {
if(grep{$list eq $_ }qw(E F)) {
push(@tmp,); next;
}
push(@new,$list);
}
比較対照を動的にできる
0546nobodyさん
04/03/17 11:48ID:???0547nobodyさん
04/03/17 12:00ID:???($values[0], $values[1], ・・・・ $values[8]) = split(/■/, $aiueo);
0548nobodyさん
04/03/17 12:05ID:???についてお聞きしていいでしょうか。
一方は自分の所有するレンタルサーバーで、すでにCGIを幾つか設置してあるのです。
もし、フリーのHP(ここではisweb)のCGIから自分のサーバーのCGIを呼び出す、
いわばスクリプトの流用ができれば作業も楽だし
iswebのサーバーにも余計な負担がかからなくて良いかなと思って試しています。
レンタル鯖のCGIは今は単にテキストデータを処理してprintで画面に出力するだけです。
具体的にはshowdat.cgiでlog.datの内容を整形して1行ずつ書き出しています。
この、動的に出力された整形済みのデータを他のHPから呼び出し、CGIで利用したいのです。
レンタル鯖のほうで整形済データをfixedlog.dat等に書き込んでからそれを外部から読むのではなく、
�@iswebのreaddat.cgiにアクセス
�Aiswebのreaddat.cgiの内部で、レンタル鯖のshowdat.cgiにアクセス
�Bレンタル鯖のshowdat.cgiが動作し、レンタル鯖のlog.datの内容を整形して返り値とする
�C返り値をiswebのreaddat.cgiが受け取り、表示する
という流れなのですが・・・・・・
0549548
04/03/17 12:05ID:???上の�Aの所が方法がわからず、
readdat.cgi内で
open(LDAT, "<http://rentalhost/showlog.cgi") || die "file open error!";
while(my $line = <LDAT>) {
print $line;
}
close(LDAT);
としてみたのですがうまくいきませんでした。外部のサーバーのものに限らず、
「CGI内でCGIにアクセス」というのはどう実現するものなのでしょうか?
質問が長くなって申し訳ないのですが、ヒントだけでもよいのでどなたかお願いします。
0550nobodyさん
04/03/17 12:06ID:???0551nobodyさん
04/03/17 12:13ID:???�@iswebのreaddat.cgiにアクセス
�Aiswebのreaddat.cgiがshowdat.cgiを叩く
�Bレンタル鯖のshowdat.cgiがlog.datの内容を整形してそいつをGET/POSTでreaddat.cgiを叩く
�Cパラメータ受け取ってiswebのreaddat.cgiが表示する
だろな
0552nobodyさん
04/03/17 12:32ID:???0553548
04/03/17 12:39ID:???まさにそれです、
>GET/POSTでreaddat.cgiを叩く
この部分が方法がわからず困っています・・・
iswebのフォームからaction=http://rentalhost/showlog.cgiとする手もあるのですが、
一度isweb内の独自のCGIに通して追加処理をしてから表示させたいのです。。
使う関数名だけでもいいので、教えていただけないでしょうか。
>>550552
ネタではないです・・・。
0554nobodyさん
04/03/17 12:39ID:???0555nobodyさん
04/03/17 12:40ID:???0556nobodyさん
04/03/17 12:45ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq4.html#How_can_I_tell_whether_an_list_o
0557nobodyさん
04/03/17 12:55ID:???実際に動かせる鯖はかなり限られると言うのに。
0558nobodyさん
04/03/17 13:06ID:???�@iswebのreaddat.cgiにアクセス
�Aiswebのreaddat.cgiが空フレームを作りそこにshowdat.cgiを表示
どだ?
あ、という事はreaddat.htmlでいいじゃん
0559548
04/03/17 13:41ID:???どうもです。しかしフレーム内に表示させるだけでなく、
受け取ったデータをisweb側のCGIで追加処理させたいのです。。
>>555
LWPはソケット通信のモジュールだったでしょうか。
POST/GETについて調べていて今、
ttp://tohoho.wakusei.ne.jp/lng/200003/00030338.htm
というのを見つけたのですが、>>551にあるGET/POSTもソケットが前提だとすると、
方法はソケットに限るという事になるでしょうか・・・
0560nobodyさん
04/03/17 14:04ID:???0561t
04/03/17 14:09ID:???0562nobodyさん
04/03/17 14:44ID:???open に失敗したら、自作のルーチンに引数でエラー文字列を渡したいんですが、
もしかすると、open に失敗した時点で die してしまうので print_error にすらいかないのでしょうか?
myopen( FH, 'test.txt' ) or print_error( $! );
sub myopen( $$ ) {
open( $_[0], $_[1] ) or return;
close( $_[0] );
}
sub print_error( $ ) {
print $_[0];
exit;
}
0563nobodyさん
04/03/17 15:33ID:???else { print_error($!); }
#perlって括弧なしで書けたっけ?
0564nobodyさん
04/03/17 15:46ID:???そう書くならmyopenでtrueなりfalseなりを返さないといかんのでは?
0565nobodyさん
04/03/17 16:50ID:llxz20WZ質問の内容がこちらで適切かどうか判断しかねるのですが…
トップページでクッキー及びセッションIDを設定、
クッキー及びIPで、トップで一括して荒らしのアクセス拒否をして、
セッションで中に直接飛べないようにしようとしています。
クッキーの設定の部分について質問なのですが、
---------------------------------------------------
print "Content-type: text/html\n";
if (length($str_cookie) == 0) {
$str_cookie = (gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2) . time);
print "Set-Cookie: クッキー名=クッキーデータ; expires=Thu, 1-Jan-2030 00:00:00 GMT; path=/cgi-bin;\n";
}
print "Set-Cookie: セッション名=セッションデータ; path=/cgi-bin;\n";
---------------------------------------------------
以上のようにすると、
http://www.どこか.com/cgi-bin/index.cgi
という形でアクセスしたときにはうまく動作するのですが、
http://www.どこか.com/cgi-bin/
でアクセスするとクッキー及びセッションが発行されません。
これは、パスの設定の仕方が悪いのでしょうか?
0567965
04/03/17 18:35ID:???うう・・すみません
混乱から醒めて、冷静に見たら関係ないですね。。
よく見たら初心者質問スレってのがあったので、移動します。
失礼しました。
0568nobodyさん
04/03/17 20:20ID:???>>534
放置されてるのはわかってるんだが、一言だけ。
「二度と来るな」
まあ、それだけじゃアレなんで。
「作った奴に聞け」
0569nobodyさん
04/03/17 23:23ID:???@values = grep{ $_ ne '■' } split(/(■)/, $aiueo);
>>541
(・ε・)キニシナイ!!
0574nobodyさん
04/03/18 10:13ID:imQmJK7bnumber<TAB>name<TAB>mail<TAB>text
というタブ区切りのデータがあります。
これらのnumberの部分だけを取り込みたいのですが、
open(DATA, "<$log");
@data=<DATA>;
foreach $temp (@data){
($number,$name,$mail,$text)=split(/\t/,$temp);
}
このように書くと、$numberしか使わないのですが、他の変数も生成してしまい、
perl -cwでチェックすると怒られます。
こういう場合はどのように記述したらいいのでしょうか?
0575nobodyさん
04/03/18 10:23ID:???でよろし
0578nobodyさん
04/03/18 11:46ID:DQQyLTpV($num, undef, undef, undef) = split...
でもok
0579nobodyさん
04/03/18 12:39ID:???ご親切に有難うございます。
$mail = (split(/\t/,$temp))[2];
($num, undef, undef, undef) = split...
どちらも便利そうな使い方なので、よく覚えておきます。
0581nobodyさん
04/03/18 14:01ID:???0582nobodyさん
04/03/18 14:05ID:???0583nobodyさん
04/03/18 14:43ID:???こ こ ま で 春
--------------------------
0585nobodyさん
04/03/18 16:36ID:imQmJK7bプププププ
0586nobodyさん
04/03/18 19:10ID:LItTEfZFプププププヴァーカ
0587nobodyさん
04/03/18 20:03ID:msXg0fxAプゲラゲラッチョ( ´,_ゝ`)
0588nobodyさん
04/03/18 20:57ID:???0589nobodyさん
04/03/18 21:09ID:???splitの第3引数をきちんと設定すると余計な処理が減るからサーバーに優しい。
数が明確なら第3引数をしっかり渡す事を勧める。
0590nobodyさん
04/03/18 21:17ID:???>余計な処理が減るから
すまん、解説キボンヌ。
$mail = (split(/\t/,$temp))[2];
(undef, undef, $mail, undef) = split(/\t/,$temp);
これでも下のコードのほうがいいってこと?
0591nobodyさん
04/03/18 21:25ID:???なんのこっちゃ。
$mail = (split(/\t/, $temp, 4))[2];
の様にすれば良いってだけかと。
第三引数に最大分割数を指定できるって話ね。
0592577
04/03/18 21:26ID:???> これでも下のコードのほうがいいってこと?
splitの第三引数、って言ってるじゃん
$mail = (split(/\t/,$temp,4))[2];
(undef, undef, $mail, undef) = split(/\t/,$temp,4);
だよ
分けるのは四つだ、と明示できるなら明示せよ、ということ
0593nobodyさん
04/03/18 21:26ID:???第「3」引数。
$mail = (split(/\t/,$temp,4))[2];
こうすると、splitは4分割で処理を終了する。
全ての場合で早くなるとは限らないが、ほぼ全ての状況で早くなる。
まぁ>574みたいに確実に行の戦闘にあるなら、substringとindex使った方が速いんだろうが。
0594nobodyさん
04/03/18 21:36ID:???0595nobodyさん
04/03/18 21:42ID:???my $str = "number\tname\tmail\ttext";
timethese(1000000,{'TEST1'=>'&test1($str);','TEST2'=>'&test2($str);','TEST3'=>'&test3($str);','TEST4'=>'&test4($str);','TEST5'=>'&test5($str);','TEST6'=>'&test6($str);', });
sub test1{
my $str = shift;
my ($number,$name,$mail,$text) = split(/\t/,$str);
}
sub test2{
my $str = shift;
my ($number,undef) = split(/\t/,$str,2);
}
sub test3{
my $str = shift;
my $number = (split(/\t/,$temp,2))[0];
}
sub test4{
my $str = shift;
my $number = substr($str,0,index($str,"\t"));
}
sub test5{
my $str = shift;
$str =~ /^([^\t]+)/;
my $number = $str;
}
sub test6{
my $str = shift;
$str =~ /^(.*?)\t/;
my $number = $str;
}
0596nobodyさん
04/03/18 21:42ID:???TEST1: 3 wallclock secs ( 3.00 usr + 0.00 sys = 3.00 CPU) @ 332889.48/s (n=1000000)
TEST2: 4 wallclock secs ( 2.46 usr + 0.00 sys = 2.46 CPU) @ 406008.93/s (n=1000000)
TEST3: 3 wallclock secs ( 2.54 usr + 0.00 sys = 2.54 CPU) @ 393236.34/s (n=1000000)
TEST4: 2 wallclock secs ( 2.30 usr + 0.00 sys = 2.30 CPU) @ 434216.24/s (n=1000000)
TEST5: 1 wallclock secs ( 2.01 usr + 0.00 sys = 2.01 CPU) @ 496770.99/s (n=1000000)
TEST6: 1 wallclock secs ( 1.93 usr + 0.00 sys = 1.93 CPU) @ 517063.08/s (n=1000000)
正規表現も使い方次第で速くなるのな。
0597nobodyさん
04/03/18 22:25ID:???今自分がやっているのはログをsplitで分割するだけなので、
「この行を全部タブがある部分で区切れ」よりも、
一行に存在するタブで区切られたデータの個数はわかっているので、
「この行にはタブで区切られたデータが4つあるから4つに区切れ」というように、
指定可能ならばsplitの第三引数を渡した方がいいということですね。
0598nobodyさん
04/03/18 22:47ID:???貴殿には「詳説 正規表現 (オライリー)」を薦める
0600nobodyさん
04/03/18 22:52ID:???そのままhoge.txtにprintするのって危ないですか?
ファイル名は time() の値にする予定です。
0602nobodyさん
04/03/18 23:34ID:???フォームから入力した文字列をjcode.plでsjisに変換したものを
$text として、
$file = time().'.txt';
open(FILE, ">$file") || error('open error');
print FILE $text;
close(FILE);
とする予定です。
ファイル名を決める部分を'.html'にするとブラクラやウイルスなどの危険性があるので
'.txt'としたのですが、'.txt'にしてもやはりウイルスなどの危険性があるのでしょうか。
0603nobodyさん
04/03/18 23:40ID:v217X1kZ0604nobodyさん
04/03/18 23:45ID:???0605nobodyさん
04/03/18 23:47ID:???サニタイズの話なのか、ファイル名の話なのか。
HTMLを解釈するブラウザでそのまま開くつもりなら、
<と>を実体参照に置き換えるのが手軽。
コーディング方法としては単純で、単純にs///で置き換えれば良い。
ファイル名なんてのはそんなの好きにすれば良いと思うってかここで聞く事じゃない。
拡張子なんてどうでも良い。ファイルの中身が問題だろう。
#質問内容とは違うけどtime()だと同時投稿されるとファイル名が被るという問題が
公開しない、自分が読むためだけのコメント投稿フォームでも作ってるのか?
0607nobodyさん
04/03/18 23:58ID:???HTMLタグが含まれるだけで、HTMLとして表示してくれるよ。
0608nobodyさん
04/03/18 23:59ID:???テキスト投稿CGIを作ろうとしています。
投稿者がテキストを投稿したら、time().txtで保存、
同時にindex.htmlにテキストへのリンクを付け足す、という流れです。
普通の掲示板の場合<と>の置換をしていたのですが、
txtの場合実体参照などがそのまま>などと表示されるので、
置換作業は一切行わないことにしました。
ですが、やはりtxtを表示するのもブラウザである以上、
悪意を持った何者かが何か細工すればブラクラ程度に機能してしまうのでは、
と不安になり質問しました。
0609nobodyさん
04/03/19 00:11ID:???ということはブラクラなどを仕込もうと思えば幾らでも仕込めちゃうってことですね……。
なんとかhtmlで保存してみます。
#なかなか書き込めない…´Д`ナジェディス
0610nobodyさん
04/03/19 01:04ID:koDF+TRW郵便番号の - を除くプログラムが出てきますた
$_ = "123-1234";
s/(\d\d\d)-?(\d\d\d\d)/$1$2/;
?の意味って何ですか?
?がなくとも同じ結果が得られると思うのですが。
0613nobodyさん
04/03/19 03:57ID:KxdLBMtCサンクス
■ このスレッドは過去ログ倉庫に格納されています