Perlコーディング初心者質問スレ Part 50
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/06/26(月) 00:46:38ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0002nobodyさん
2006/06/26(月) 00:47:26ID:???CGI: Common Gateway Interface part 13
http://pc8.2ch.net/test/read.cgi/php/1126436361/
【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc8.2ch.net/test/read.cgi/php/1034645635/
Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc8.2ch.net/test/read.cgi/php/1030548610/
★三 【 スクリプト改造工房 PART 9 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1143834740/
【 スクリプト改造依頼スレ 】(丸投げ) part5
http://pc8.2ch.net/test/read.cgi/php/1141174205/
0003nobodyさん
2006/06/26(月) 00:48:09ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
0004nobodyさん
2006/06/26(月) 00:49:09ID:???Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
0005nobodyさん
2006/06/26(月) 00:49:50ID:???part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/
0006nobodyさん
2006/06/26(月) 00:50:46ID:???part31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記)
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
part35 http://pc5.2ch.net/test/read.cgi/php/1085557731/
part36 http://pc5.2ch.net/test/read.cgi/php/1089779036/
part37 http://pc5.2ch.net/test/read.cgi/php/1093106507/
part38 http://pc5.2ch.net/test/read.cgi/php/1097158988/
part39 http://pc5.2ch.net/test/read.cgi/php/1101522903/
part40 http://pc5.2ch.net/test/read.cgi/php/1106816922/
0007nobodyさん
2006/06/26(月) 00:52:13ID:???part41 http://pc8.2ch.net/test/read.cgi/php/1110383236/
part42 http://pc8.2ch.net/test/read.cgi/php/1116970588/
part43 http://pc8.2ch.net/test/read.cgi/php/1123777607/
part44 http://pc8.2ch.net/test/read.cgi/php/1129477637/
part45 http://pc8.2ch.net/test/read.cgi/php/1134049707/
part46 http://pc8.2ch.net/test/read.cgi/php/1137518266/
part47 http://pc8.2ch.net/test/read.cgi/php/1141195171/
part48 http://pc8.2ch.net/test/read.cgi/php/1146042050/
part49 http://pc8.2ch.net/test/read.cgi/php/1149017548/ (前スレ)
part44-621氏による過去ログ倉庫
ttp://user.ftth100.com/mirrorhenkan/perl/
0008nobodyさん
2006/06/26(月) 00:53:27ID:???[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/
[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/
[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.8/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0009nobodyさん
2006/06/26(月) 00:54:30ID:???[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0012nobodyさん
2006/06/26(月) 20:55:18ID:???オブジェクト指向より、いい指向ってないのかな。
大き目のプログラム組んで何ヶ月か、又は何年か後に見てみたら
全体の流れとそれぞれの処理を理解するのに数日かかってしまうのがいや。
これはオブジェクト指向とは無関係だけど。
プログラムを専門にやってないから思い出すのとあわせて、いつも
「なんでこんなイケてないんだこれ」
と自己嫌悪に陥る。
オブジェクト指向ってモジュールとか確かにべんりだけどさ。
完ぺき主義というか極端な自分としては全てをオブジェクト指向的にやろうとして、
うんざりする。
もっといいやりかたないのかね。
うんスレ違いだ。すみませんでした。
0013nobodyさん
2006/06/26(月) 21:30:04ID:???それはプログラムの組み方の問題なんじゃないのかなあ。
プログラム組むときって、ノートに処理の流れとかメモするでしょ?
テキストエディタとかで
編集
|- 検索
|- 次を検索
|- 前を検索
とかってあるけど、これもオブジェクト指向といえばオブジェクト指向だし。
編集::検索->次() みたいな。
これで例えば 「次を置換」 とか改造して入れるために、また一からプログラム全体を把握し直さなきゃわかんない、とかそーないと思うんだけど。
なんか変なとこにこだわりすぎてんじゃない?
0014nobodyさん
2006/06/26(月) 21:48:52ID:???> 完ぺき主義というか極端な自分としては全てをオブジェクト指向的にやろうとして、
> うんざりする。
> もっといいやりかたないのかね。
Ruby 使っとけ。
0015nobodyさん
2006/06/26(月) 22:04:56ID:???sub noward {
local($flag);
foreach ( split(/\s+/, $no_wd1) ) {
if (index("$in{'name'} $in{'sub'} $in{'comment'}",$_) >= 0) {
$flag = 1; last;
}
}
if ($flag) { $err .= "不適切な文字が含まれています。"; }
if ($err) { &error($err); }
}
禁止ワードのサブルーチンなんだけどコレを改行で区切る事が出来ないのだがどうすればいいのか教えてほしい。
お願いします。
0016nobodyさん
2006/06/26(月) 22:19:27ID:???文からするとサブルーチンを改行で区切りたいように読めるけど…。
0017nobodyさん
2006/06/26(月) 23:07:40ID:???0018nobodyさん
2006/06/26(月) 23:26:42ID:???悪い癖をおぼえる前にもう少しましな手本を探したほうがいいような
気がする。
0019nobodyさん
2006/06/26(月) 23:38:21ID:???古くてアレなスクリプトを配布する事による弊害を気にした方がいいね。
いまどきperl4だけの鯖なんてないし。
0020nobodyさん
2006/06/27(火) 00:04:59ID:???以前使っていたレンタル鯖がCのCGIを許可していたので
Cでゴリゴリ書いていましたが、別の業者に移管されてしまい
そこの業者はCのCGIが不可、Telnet不可とCGIが全て使えなくなってしまいました。
昔、ちょろっとPerlの本を見たことがあるのですが、コードがC以上に記号ばかりでゴチャっとしていて
追いにくいなぁと直ぐに本を閉じてしまった記憶があります。
C12年/C++3年/VB5年程です。。
0021nobodyさん
2006/06/27(火) 00:10:32ID:???独特の癖があるので人のコードを読むのは苦労するかもしれんが、
書く分には好きなように書ける。
TIMTOWDIバンザイ
0022nobodyさん
2006/06/27(火) 01:00:12ID:???sub内でローカル宣言した変数がリファレンス(Cでいうポインタ)で参照できちゃう気持ち悪い部分もあってw、
あまりに自由すぎるのがperlの欠点といったとこでしょか
0023nobodyさん
2006/06/27(火) 01:15:43ID:???Cのポインタの概念は無いんで、文字列ポインタ動かしたりはできません。
だからといって文字列は配列でもないので、配列操作にもしないことです。
Cだけの人がとりあえず書いてみたPerlのプログラム読んだ事あるけど
思いっきりCぽくて、全然Perlじゃなかったなあ。
ていうか、Perlのソース読む方が理解が早いかも。
0024nobodyさん
2006/06/27(火) 01:38:26ID:???次に構文の違い(elsifとかswitchとか)につまづいて
コンテキストの理解につまづいて
関数の仮引数が無いのにつまづいて
リファレンスをポインタだと思い込んでつまづいて
・・・がんばってください。
0025nobodyさん
2006/06/27(火) 02:08:24ID:ms3DPBt4まず、書き込みページを出力して、
データを受け取って文法チェックをして 結果を出力して、
次のデータ受け取りでファイルに書き出しをするプログラムなのですけど、
どうしても原因が見つけれないエラーが出ていて困っています。
ただ、これ自体が大きすぎるので少し違うルートで質問します。
500 Internal Server Error
というのはどのような条件下で出てくるのでしょうか?
細かい説明などをくれるとうれしいです。
それともうひとつ
プログラムやルーチンの文法ミスもないし、ファイルの参照ミスもないのに
ファイル書き込み等をしているどこかでエラーが出てくる場合
どういうミスの可能性があるでしょうか?
ずいぶんと分かりにくくなってしまっていますが、お願いします
0026nobodyさん
2006/06/27(火) 02:36:42ID:???文法ミスならローカルで実行したときわかるし、
違うなら処理の途中でためしに exit して、どこまでならエラーでないか、って突き詰めていけばわかるよな?
それでもどこもエラーないなら、
print "Content-type: text/html\n\n"; の前に何か print してる、くらいしか思いつかない。
>>25
要するに、知らんがな、ってこと。
ブラウザだけでやってんの? ちゃんとエラー文のせようよ。
0027nobodyさん
2006/06/27(火) 02:52:04ID:???> ただ、これ自体が大きすぎるので少し違うルートで質問します。
お勧めしません。逆効果です。
> 500 Internal Server Error
> というのはどのような条件下で出てくるのでしょうか?
それが、CGI が何なのかを理解せずに書いたプログラムなら、ほとんどどのような条件下ででも。
> ファイル書き込み等をしているどこかでエラーが出てくる場合
> どういうミスの可能性があるでしょうか?
あらゆるミスの可能性、及び誰のミスでもない可能性があります。
どういうミスかはわかりません。ただ、「誰のミスか」であれば、この場合は控え目に言って 99.8% 程度の確立であなたのミスです。
# 助けてあげたくてもこの質問じゃ何もできないよぅ・・・orz
0028nobodyさん
2006/06/27(火) 03:53:29ID:H9M/RMpI# CGIヘッダーの出力
print "Content-type: text/html\n\n";
# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>Hello HTML</title></head>\n";
print "<body><p>こんにちは。これはHTML文書の例です。</p></body>\n";
print "</html>";
というCGIのプログラムがあったんですが
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";はどういう役割をしているんでしょうか??
0029nobodyさん
2006/06/27(火) 04:05:08ID:???板違いなのでWeb制作技術板へ行ってらっしゃい。
0030nobodyさん
2006/06/27(火) 04:09:20ID:???何それ?
0031nobodyさん
2006/06/27(火) 04:13:07ID:???こういう事かな。レキシカルな $s が外から見える。
sub hoge {
my $s = "ababababa";
return \$s;
}
my $s_ref = hoge();
print $$s_ref;
0032nobodyさん
2006/06/27(火) 04:54:57ID:???0033nobodyさん
2006/06/27(火) 06:30:44ID:???基本的にCGIのエラーは500しか出ません。
パーミッションのミスでも文法ミスでも全て500が出ます。
>プログラムやルーチンの文法ミスもないし、ファイルの参照ミスもないのに
>ファイル書き込み等をしているどこかでエラーが出てくる場合
>どういうミスの可能性があるでしょうか?
例えば代入式の途中でexit()で終了した場合なんかは
perlがエラー→何も出力されない→500となったりします。
(が、たぶんそのエラーじゃ無い気がしますが・・・
要するに一度にいっぺんに書きすぎて、デバッグできなくなった状況ですよね。
=c
=cut
という技があるのでそれで半分づつエラーの範囲を絞ってみてはどうでしょうか?
(それ以前に全部コメントアウトしprint "\n\n"だけ書いて動くのかとかも要確認。
それが動けばそこから少しずつ増やしていけば何でエラーが起きてるのか特定できるはず・・・
0035nobodyさん
2006/06/27(火) 08:46:11ID:???static宣言見たいのがあればなぁ・・・と思うわけですよ
0037nobodyさん
2006/06/27(火) 14:12:21ID:XmLciTUK・ファイルがなければ新規にファイルを作成し$dataAを書き込んでから$dataBを書き込む。
・ファイルがあれば(すでに$dataAは書き込み済みなので)$dataBを書き込む。
2: それでこんな風にやってみたが・・・
unless ( -e $file ) {
open ( OUT , "> $file" ) or die;
flock ( OUT , 2 );
seek ( OUT , 0 , 0 );
print OUT $dateA;
truncate ( OUT, tell ( OUT ) );
close ( OUT );
}
open ( OUT , "+< $file" ) or die;
flock ( OUT , 2 );
いろいろ処理
seek ( OUT , 0 , 0 );
print OUT $dateB;
truncate ( OUT , tell ( OUT ) );
close ( OUT );
3: こんなエラーが出て上手く行かなかった。
エラーは出てないんですが、これって同時アクセスがあった場合に
ファイル壊れる可能性ないですか?
他に良い方法があればアドバイスよろしくお願いします。
0038nobodyさん
2006/06/27(火) 14:45:28ID:???他にもある気がするが、-eしてから>でopenまでの間に割り込まれると壊れるな。
File::Tempで一時ファイルを作ってリネームするとよさげ。
003937
2006/06/27(火) 15:20:15ID:???やっぱり壊れる可能性ありますよね。
>File::Tempで一時ファイルを作ってリネームするとよさげ。
ありがとうございます。
一度それでやってみます。
他にもアドバイスがあればよろしくお願いします。
0040nobodyさん
2006/06/27(火) 15:28:09ID:???・ロック用ファイルをロック
・ファイル存在チェック
・無ければ生成
・オープン
・処理
・書き込み
・ロック用ファイル閉じ
モジュール使わずコレでどうでしょう
004137
2006/06/27(火) 15:47:13ID:???アドバイスありがとうございます。
一連の流れを全てロックしてしまえ、ということですね。
ただ、ロックファイル自体が信用できるかどうか怪しい代物なので
ちょっと二の足を踏んでしまいます。
0042nobodyさん
2006/06/27(火) 15:55:10ID:cuOoVNQcその時間になったら自動で指定ファイルをFTPで別サーバー
へ移動するという処理は可能でしょうか?
Perlでcrontabに書き出すことができればと思いましたが
レンタルサーバーでそれは許可されておりません。
cronを使用せずにperlにより指定時間になっているかどうかを
チェックして時間になっていたらFTPでファイルを移動
するような処理は可能なのでしょうか?
どなたかご存知の方居られましたら宜しくお願い致します。
0043nobodyさん
2006/06/27(火) 15:57:12ID:???こっち行ったほうがいいかな。
0044nobodyさん
NGNG004537
2006/06/27(火) 16:32:46ID:???勘違いしてました。
flockでロックファイルをロックすれば良いだけでしたね。
ロックファイルが残り続けるのがちょっと気持ち悪いですが簡単に処理できるのは良いですね。
>>43
誘導先見ましたが、どちらかと言うとロックの追究が主のようで、例えば
open ( OUT , "+< $file" ) or die;
flock ( OUT , 2 );
いろいろ処理
seek ( OUT , 0 , 0 );
print OUT $dateB;
truncate ( OUT , tell ( OUT ) );
close ( OUT );
このコードのロック自体の有効性についての議論が中心のように見受けました。
わざわざ紹介していただいたのに不躾な言い分ですが、
私は上のようなロックでまず大丈夫という前提に立っているので
誘導先のスレよりもこちらで質問した方が適切だと思いますので
すみませんが、こちらに居させて下さい。
0046nobodyさん
2006/06/27(火) 16:38:21ID:???そうおっしゃらずにどうかお願いします。
過去ログ見てみても無かったので…
0047nobodyさん
2006/06/27(火) 17:35:31ID:???cron使いたくない(or 知らない)けど定時的に何かしたいってのは。
0049nobodyさん
2006/06/27(火) 18:26:33ID:???Locationでダウンロードするファイルに飛ばした後に
unlinkしてもダウンロードが始まる前にファイルが消えちゃう。
0050nobodyさん
2006/06/27(火) 18:29:53ID:???失敗してても消すのならできそう。
0051nobodyさん
2006/06/27(火) 18:34:47ID:???そこでcronですよ。
削除リストファイルを作ってそこにあるファイルは定期的に起動するcgiで削除する。
で、ファイルのダウンロードはcgiから以外にはできないようにしておく。
一度ダウンロードしたものは2度とできないようにしておく。
0053nobodyさん
2006/06/27(火) 18:40:24ID:???Content-type: application/octet-streamで検索
005449
2006/06/27(火) 18:49:19ID:???やっぱりcronかぁ。
ダウンロード自体の頻度はかなり低い(月に数回程度)ので
すごく無駄な気がしてしまふ・・・。
>ファイルのダウンロードはcgiから以外にはできないようにしておく。
そんなことってできるんスか!?
refererでチェック?でも、簡単に偽装できるから意味ないか。
>一度ダウンロードしたものは2度とできないようにしておく。
これもやり方がさっぱり思い付かない。
パーミッション変更?
でも、いつダウンロードが終了したかは確認できんよな。
これもcron?って、それならパーミッションいじるより削除した方が早いよな。
>>53
ダウンロード頻度が低い、つまり削除の頻度も低いので
定期的に削除というよりは都度削除希望であります。
でも、無理なら仕方ない、といった感じであります。
検索して調べてきます。サンクス!
0055nobodyさん
2006/06/27(火) 19:06:41ID:???つまり、CGIがファイルを読み出して出力、全部出力したらファイル削除。
素のファイルには .htaccess などでアクセスできないように設定しておく。
0056nobodyさん
2006/06/27(火) 20:19:59ID:???print "content-type:MIME-type\n\n";
open fp,"downfile";
print <fp>;
close fp;
unlink "downfile";
ただしMIME typeをちゃんと指定しないと、textで無理やり表示されたり、めんどくさい感じ・・・
あと、ダウンロード→キャンセルでもうファイルが消えてるので、結構使いづらいかも?
.htaccess使うまでもなくパーミッションを600とかにしとけば普通に見えない。
ところで、UPは誰がどういう風にするのかが気になる・・・
それによってはもっといいアイデアがあるかも??
0057nobodyさん
2006/06/27(火) 20:42:38ID:???Content-Type: application/octet-stream
か
Content-Type: application/x-download
とでもしてDLさせればいいんでない?
005849
2006/06/27(火) 21:36:29ID:???とか初見だったんで最初はよく分からんかったけど。
ファイル読み込み
↓
出力
↓
ファイル削除
で出来ますた!サンクスであります。
>>56
それとほぼ同じ形に収まった・・・2時間以上かけてだけどw
UPは特定の仲間内(?)の任意の誰か、
またはすでにあるログから情報を抽出加工したものを新規ファイルとして作成、
という何とも分かりにくい感じ。深く気にしないでね。
ところで、少し気になったんだけど、
>>53>>55>>56>>57
の言おうとしてる内容はほぼ同じって解釈で合ってるよね??
0059nobodyさん
2006/06/27(火) 21:54:28ID:???006056
2006/06/27(火) 22:01:59ID:???なるほど、そういうmimeタイプがあるんですね。知らなかったです。
nameを指定するオプションとかも使えそうな感じ・・・(?
006149
2006/06/27(火) 22:38:41ID:???open直後にunlinkしても内容は保持されるみたいだね。
てか、UNIXなんかのテンポラリファイル使う場合は常套手段だとか。
>>56の例で言えば、
open fp,"downfile";
unlink "downfile";
print <fp>;
close fp;
って感じだな。
こうした方が、異常終了の際にファイルが消えてないってリスクが減るのでベターなわけだ。
006425
2006/06/28(水) 00:51:27ID:Ty2xiiJRlocalでは、問題が見つからなかったのでサーバにアップロードしたらエラーが出まして
自分が考えれるところを確認しましたが、分からなくなってます。
ttp://hisazin-up.dyndns.org/up/src/11946.txt
再びいろいろといじっているせいで若干おかしなものも混ざっているかもしれませんが、
このような形です。
何の引継ぎなどがない場合には78行目の処理が行われて、
別ルーチンから投稿フォームが出力されます。
その投稿フォームから出力された場合に85行目からの処理が実行されて、問題がなければ
投稿OKかどうかの確認ページの出力
その確認ページからデータを引き継いだら143行目の処理に入るのですが、
143行目の処理の中で
ローカルでは問題なく結果が表示されるのですが、
サーバへアップするとどうしても500エラーとなってしまいます
0065nobodyさん
2006/06/28(水) 01:54:52ID:???0066nobodyさん
2006/06/28(水) 02:00:58ID:???0067nobodyさん
2006/06/28(水) 02:05:10ID:???どうせヘッダ出力してないとかそういうのだろうけどな。
0068nobodyさん
2006/06/28(水) 02:58:08ID:???nothing_log: <<<これは一体?
print "その記事はすでに削除されているので書き込みできません\n";
exit;
}
0070nobodyさん
2006/06/28(水) 03:45:51ID:???まず、require文とhtml_head("掲示板")だけで動くのか報告よろ。
どうせ晒すなら全部晒してもらうとこっちでもテストできるんだけど・・・
0071nobodyさん
2006/06/28(水) 03:58:15ID:???あるいは html_head("掲示板"); print "test\n"; とか
82行目のifをスルーした場合どこにもヘッダを出力する
ルーチンがないので、普通にエラー・・・・・・・・・・・・
0072nobodyさん
2006/06/28(水) 04:19:30ID:???form_vew_make($pop_name,$pop_title,$pop_msg,$pop_icon,$pop_color,$pop_password,$pop_mail,$pop_home,$pop_thread);
こういう代入はあまりにも毒々しいので、$popなんとかは全部1つのリファレンスにまとめた方がいい。
あるいは%FORMをそのまま放り込んで、$pop系の変数を全部捨てた方がいい。
$lenなんとかはlenごときで変数作るなよと、wその程度だったら
必要な時にlen_count($なんとか)で取れば十分。
あと$view_flagのgoとbackは、goとbackを代入してるif文のところで
そのまま処理すればよいので不要
0073nobodyさん
2006/06/28(水) 08:40:19ID:???BASIC認証するときのサーバの負荷について教えてください。
[ID]:[PASS]
というようなユーザファイルあると思うんですが、
何件ぐらい大丈夫なんでしょうか。
5万、10万件ぐらいは平気な感じでしょうか。
データベースでなく、ただのテキストファイルの検索って
どれぐらい大変なのかわかりません。
レンタルサーバじゃ実験できないし、
apacheのインストールの勉強も途中という
初心者ですので。
よろしくお願いします。
0075nobodyさん
2006/06/28(水) 09:34:48ID:???0076nobodyさん
2006/06/28(水) 10:04:15ID:???73です。
たしかに、1をよく読んだら全然違ってました。
初心者、perlつながりで質問してしまいました。
旅に出ます。><
0077nobodyさん
2006/06/28(水) 17:08:53ID:???0078nobodyさん
2006/06/28(水) 17:13:29ID:???0079nobodyさん
2006/06/28(水) 17:38:43ID:JW7kjnCG検索エンジンでは記号の検索ができないので、調べようにも調べられずに困っています・・・。
0081nobodyさん
2006/06/28(水) 20:12:24ID:xzEYpxD80082nobodyさん
2006/06/29(木) 00:16:50ID:???$hoge->{piyo} $hoge はハッシュへのリファレンス
$hoge->() $hoge はコードブロックへのリファレンス
$hoge->piyo() $hoge はオブジェクト(メソッドコール)
っていう理解でいいですか?
0083nobodyさん
2006/06/29(木) 00:18:42ID:???ただリファレンスじゃなくて
リファレンスの参照というか、デリファレンスというか
008482
2006/06/29(木) 00:33:58ID:???デリファレンスしてるのはアロー演算子ですよね?? 混乱してきた。。。
0085nobodyさん
2006/06/29(木) 00:37:48ID:???合ってる。$hogeは配列へのリファレンス。
0086nobodyさん
2006/06/30(金) 00:52:51ID:???if( $txt にURLが5個以含まれる ){
はじき処理
}
の場合は、IF文のカッコ内にどのような文字を入れるとよろしいでしょうか。
よろしくお願いします。
0089nobodyさん
2006/06/30(金) 10:18:19ID:???0090nobodyさん
2006/06/30(金) 10:41:50ID:???#saltはランダムです
$crypted_pass = crypt($password, $salt);
$crypted_passは、$password='1111';$saltはランダムなので毎回違った
文字列になります。すごい疑問なんですが、これをBASIC認証のための
.htpasswdファイルに書き込むと、'1111'でも$crypted_passは毎回違う
文字列ができるのに、何回$crypted_passを作ってもBASIC認証の
ダイアログに'1111'を入れると認証されます。
すごいバカなので全然理解できないです。
わかりにくいとあれですので、やってみたいことを細くします。
フォームから入力されるパスワードを$FORM{'pass'}
.htpasswdファイルにすでに書いてあるパスワードを$pass_htpasswdとします。
パスワードが正しかったら〜するって言うことが目的なんです。
if( crypt($FORM{'pass'}, $salt) eq $pass_htpasswd){hoge処理;}
こういうことがしたい場合は、$saltを固定しないとperlでは
できないんでしょうか?固定するとこの処理で大丈夫みたいです。
ランダムだと毎回違う文字列が出てきてだめです。
サーバだとなんで、'1111'ってわかるんでしょうか。
perlでもなんか処理のしかたありますか。
ちょっと、長い文章で申し訳ないですが、よろしくお願いします。
0091nobodyさん
NGNG0092nobodyさん
2006/06/30(金) 12:01:59ID:???cryptの戻り値(digest)にはsaltの情報も含まれているのであとで確認したいときは
それをsaltとしてそのまま食わせればいいことになっている。
When verifying an existing digest string you should use the digest as the salt (like
"crypt($plain, $digest) eq $digest"). The SALT used to create the digest is visible as part of
the digest. This ensures crypt() will hash the new string with the same salt as the digest.
This allows your code to work with the standard crypt and with more exotic implementations. In
other words, do not assume anything about the returned string itself, or how many bytes in the
digest matter.
0093nobodyさん
2006/06/30(金) 15:14:17ID:???>>92
90です。
ありがとうございます。
できました!!!
saltといっしょだったんですね。
cryptだとパスワードそのまま、saltにできるんですね。
すごく便利です。
ありがとうございました。
0094nobodyさん
2006/06/30(金) 15:22:58ID:???0095nobodyさん
2006/06/30(金) 16:17:19ID:???↓
受信 ↓傍受 送信 この場合、パスワードが傍受されるから
サーバー←←←[パスワード]←←←クライアント 生でパスワードを送るのはダメ
第三者 パスワードからハッシュ関数で生成した
↓ ダイジェストを送信すれば、傍受されても
受信 ↓傍受 送信 ダイジェストからパスワードは復元できない
サーバー←←←[ダイジェスト]←←←クライアント (できるけど、とてつもなく時間がかかる)ので安全
ダイジェストを受け取ったサーバーは、自分が持っているパスワードをダイジェスト化して
それと送られてきたダイジェストを比べる事で、パスワードが合っているか判断する
っていう理解でおk?
0097nobodyさん
2006/06/30(金) 16:38:41ID:???パスワード入力 ランダムなサルト
↓ ↓
crypt($password, $salt);
↓ 登録時
保存(ダイジェスト化されたパスワード)
├──────┐ 照合時
↓ │
照合 │頭にくっついているサルトだけが
↑ ↓ 自動で取り出される。
crypt($password, $salt);
↑ パスワードとサルトが同じであれば
パスワード入力 出てくるダイジェストが同じものになる
0098nobodyさん
2006/06/30(金) 16:45:56ID:???セキュリティは難しいです>< 結城たんのアリス本でも読もうかな・・・
0100nobodyさん
2006/06/30(金) 17:12:00ID:???90です
if( crypt($FORM{'pass'}, $pass_htpasswd) eq $pass_htpasswd){hoge処理;}
$saltの文字列が長いときは、crypt関数が、
頭から2文字saltを取ってきてくれて、.htpasswdに記録されている
パスワードをそのまま$saltに入れても大丈夫
っていうことかと思ったのですが。
違いましたでしょうか?
スクリプトは正常に動いてるみたいです。
よくわかりませんが、BASIC認証は通信を暗号化
しないとだめなんですよね。
たしか。
0101nobodyさん
2006/06/30(金) 17:18:35ID:???>>93の
> saltといっしょだったんですね。
から>>100の意味は読み取れないぞ。
それに、書くなら、
crypt関数は$saltの先頭2文字をsaltとみなして計算するから、
とかするのが正しいだろう。
ロジックが重要なプログラムの世界で、言葉遣いぐらい、と思っているとひどい目に遭うぞ。
■ このスレッドは過去ログ倉庫に格納されています