【Perl】初心者コーナー Part17
■ このスレッドは過去ログ倉庫に格納されています
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
010296
02/10/17 17:25ID:???http://www.mikeneko.ne.jp/~lab/perl/des/
0103nobodyさん
02/10/17 20:41ID:???何度も別のスクリプトからもらってきて
試してみたんですが、無理でつた。
僕の知識不足です。
さすがに、生のパスワードがそのままログに
残ってしまうのは、もしも漏れた時に・・と考えると・・・。
それに、自分では来訪者のパスワードが見れてしまうので
気持ち悪いのです。。
>>95
わざわざ説明ありがとうございますた。
今試してみたのですが、記事削除時の比較がなかなか上手く
できないです。もう少し頑張ってみます。ペコリ
0105nobodyさん
02/10/17 23:44ID:???吊るされに逝ってきます
0106nobodyさん
02/10/18 01:16ID:eCvV6YKPError 500
CGI エラー - Content-Type ヘッダが正しくありません。
CGI 出力メッセージ:
"my" variable $year masks earlier declaration in same scope at C:\www\up\upload.cgi line 1366.
flock() is not available on Win95!
と出てしまったのですが、OSが95で flock() を含むスクリプトは使えないってことですか?
何か解決策はありませんでしょうか?
0107nobodyさん
02/10/18 01:32ID:???0108107
02/10/18 01:50ID:???eval{ flock() };
0110nobodyさん
02/10/18 13:52ID:lRuefofgperlで作れるのは掲示板とかチャットとかです。
パスワード発行のやり方とかは知りません。
0113nobodyさん
02/10/18 17:46ID:???掲示板やchat作れるんならパスワード認証くらい簡単なはず。
一。<form action="hoge.cgi"></form>の中にメールアドレスとパスワードを入力する画面の設計。
二。hoge.cgiでメールアドレスとパスワードをファイルにかき出す。
三。メールアドレスを集めて、sendmailで用意したメール本文を送信。
ところで、パスワードは何に使うのかなぁ
0114名無しさん@カラアゲうまうま
02/10/18 19:40ID:???0115110
02/10/18 19:48ID:???メールの送る内容(情報)を選べるようにしたいので、
会員登録後もIDとパスワードでログインして送信設定などを各会員にやってもらう予定なのです。
会員システムの時、IDとパスワードをユーザーが自分で決める方式と
IDは任意でパスワードは自動発行のだいたい二通りがあると思うんですけど
これってどっちがいいんでしょうか。別にどっちも大して変わらないんでしょうか。
0116超凄腕プログラマー
02/10/18 20:22ID:???0117nobodyさん
02/10/18 22:04ID:XuCvNIceCJ-CLUB の I-BOARD2001
のアイコンの種類と文字色の種類を増やしたいんですが、
set.cgi で増やしても
500 Internal Server Error
が出てしまいます。
他に書き換えなければならない部分があるのでしょうか?
エディタは秀丸とメモ帳でやってます。
改行は自分では入れていません。
0118nobodyさん
02/10/18 22:30ID:???0120nobodyさん
02/10/18 23:08ID:???自動発行ってトリップみたいなものかな?
実状は自分で決めたパスワードさえ忘れてしまう人が呆れるほど多かったりする罠。
自動発行だと忘れる人は倍増する気もするけど、
メールでしっかり忘れないようにするなら逆に忘れられても大丈夫かもしれない。
0121nobodyさん
02/10/18 23:56ID:Ts+deQMHどんな原因が考えられるでしょうか?
まったく見当がつかなくて困っています。
おながいします。
0122nobodyさん
02/10/19 00:00ID:???・CGIが使えない設定
・Perlやシェルの場合のパス違い
・パーミションの実行権なし
・アップロード時の文字コードまたは改行の設定ミスあるいはバイナリモードでアップした
0124デフォルトの名無しさん
02/10/19 00:45ID:???0125nobodyさん
02/10/19 00:53ID:SecGkhKpどう書けばイイですか?
0126121
02/10/19 01:17ID:???べんきょうになりますた。
>>124
すっげー根詰めてやってたから、和んだ(w
メールアドレスの@が犯人でした
ありがとうございました
0127rubyist@カラアゲうまうま
02/10/19 09:13ID:???糞言語に相応しい糞なやりとりだな。
0128デフォルトの名無しさん
02/10/19 09:36ID:???あんたさあ、糞言語の糞スレなんか読んでないで、
rubyスレでまともな発言したらぁ
0129nobodyさん
02/10/19 09:51ID:???()で変数にしたい部分を囲む。
したら$1という変数に勝手に入る。
正規表現のとこに書いてあるだろ。
0130名無しさん@カラアゲうまうま
02/10/19 15:26ID:5SBDqdQD0132nobodyさん
02/10/19 15:31ID:???perlと格闘してますがぁ、
^Mがどうしても消せません!!!!!!!!!!!!!!!
^Mがどうしても消せないのです!!!!!!!!!!!!!!!
chompやchopでは
^Mがどうしても消せません!!!!!!!!!!!!!!!
どうやって消すのでしょうか?
0134nobodyさん
02/10/19 16:05ID:???perl -e 'BEGIN{}' -p ファイル名 引数
みたいに、-e 、-pを共存してかけますか?
0135nobodyさん
02/10/19 16:38ID:???できますか?
perldoc perlstyle
perldoc.jpなどに日本語訳あり
>>134
こういうこと?
perl -pe "..." file1 file2 ...
>>135
出来るけど、ブロックだと何か困ることでも?
f() while EXPR;
0137135
02/10/19 17:01ID:???あっ、そうだった・・・
質問間違えてた。EXPRが真なら処理A(ループ含む)をし、偽なら処理B(ループ含まない)なんてことできますかね?
べつにブロック使って困ることはありませんが、できそうになかったので敢えて質問してみました。
処理を関数にすれば、普通にifなり三項演算子なり使えば問題なさそうだけど。
sub A
{
ループする処理
}
sub B
{
ループしない処理
}
if(EXPR){
A()
}else{
B()
}
0141nobodyさん
02/10/19 17:55ID:M9PYtBQykiseiという配列があって、その中には数字のみのデータが入っているのですが
(こんな感じに→ @kisei=(256, 512, 4444); )
$idという変数にも何か数字が入っているとして、$idが@kiseiに含まれているかどうか
調べる為にはどうすれば良いでしょう?
やはりforeachで配列を回して探さなければいけませんか?
0143通行人さん@無名タレント
02/10/19 18:41ID:???ハッシュかな、、、、簡単にプログラムするなら
0144134
02/10/19 18:42ID:???-peではまとまって書かなければならないですよね。
そうではなくて、
-p hoge.pl
のhoge.pl内の変数に対し、
-e 'BEGIN{}'
で初期値の設定がしたいのです。
0145nobodyさん
02/10/19 19:04ID:???"─"
を含む行を消す時ってsedだと
sed /─/d
のように短く出来るけど、perlだと結構冗長にならない?
0147141
02/10/19 19:17ID:M9PYtBQyまじで?
0148nobodyさん
02/10/19 19:18ID:???perl -ibak -ne "print unless /―/"って感じかな?
sedみたいに特化してないから、仕方ないと思うけど。
0153デフォルトの名無しさん
02/10/19 20:38ID:???もっとまとめて簡潔に質問してください。
grep $id, @kisei;
rubykitchさんを調べてるのですか?
0155nobodyさん
02/10/20 07:05ID:???URLに使える文字以外をエスケープしようと思うのですが
下記のようにすると、記号の前に\が入ったりします。
(http://hogehoge.com/\~xxx/)
どうしたらいいでしょうか?
s|([^\w\[\];/\?:@&=\+$,-\.!~\*'\(\)])|'%'.unpack('H2',$1)|eg;
0156デフォルトの名無しさん
02/10/20 11:15ID:???rubykitchのidは、正規表現ラッパーになってると
聞いてるが、何か?
0157nobodyさん
02/10/20 21:52ID:???0158nobodyさん
02/10/20 23:20ID:S0+M+/Ux$total 全体
$A 求めるもの
$percent パーセント
おながいします。
0160nobodyさん
02/10/20 23:56ID:???0161nobodyさん
02/10/21 00:02ID:???0162nobodyさん
02/10/21 00:15ID:???$pai 円周率。
おなかしいます。
0163nobodyさん
02/10/21 00:18ID:???0164nobodyさん
02/10/21 00:30ID:???perldoc て日本語訳ありますこ?
0165nobodyさん
02/10/21 00:34ID:???0166nobodyさん
02/10/21 00:49ID:???http://perldoc.jpで日本語化が進行中
0168nobodyさん
02/10/21 15:22ID:???リファレンスの使い方は一応わかったんですけど、どんな時に使うのかがわかりません。
0169nobodyさん
02/10/21 16:08ID:???ちょっと高度なことをするとき。
よく使う場合はねぇ、
配列引数をサブルーティンに複数渡すとき、
多元配列を扱うとき、
ハッシュ変数にアクセスするとき、
だやね。
0170nobodyさん
02/10/21 16:34ID:???0171nobodyさん
02/10/21 16:47ID:???そのまま何も変えないで使うとデータファイルはaska.logです。
で、このlogファイルは投稿内容や暗号化された削除キーなどが記録されています。
そのlogファイルをブラウザからアクセスすると容易に閲覧できます。
投稿内容だけならともかく、投稿者のホスト名や暗号化された削除キーが載っています。
これはセキュリティ的に危険だと思うんですがこんなんでいいんでしょうか。
管理者以外にlogファイルを見られなくする方法は.cgiファイルにすれば見れないと
前に知りましたがこの方法が一番簡単なんでしょうか。
0173nobodyさん
02/10/21 17:23ID:nGDYlndqCGIで
パスワードを入力してボタンを押す
↓
パスワードが合ってるか? →エラーの為のHTML出力
↓(YES) (NO)
管理人しか見れない様なHTML出力
という風に同一CGI内でパスワードの処理をしたいんです。
んで、
<form action=\"$URL\" method=\"POST\">\n
<input type=\"hidden\" name=\"mode\" value=\"admin\">\n
<input type=\"password\" name=\"pass\" size=\"8\">\n
<input type=\"submit\" value=\"管理用\"></form>
というのを出力してみたのですが、
ここからパスワードを取得して、比べる→その結果によって出力っていうのがどうやったら良いのかわかりません。
どなかたご教授お願いします。
分からなければCGI.pmとかcgi-lib.plでも使え。
・分岐は if を使う。
・出力は print を使う。
0175173
02/10/21 17:30ID:nGDYlndqやってみます。
ありがとうございました。
0179_
02/10/21 18:01ID:???ログファイルの名前を分かり難い物に変える。
(英字と数字を組み合わせて「a5mhp3f」とか。)
パーミッション600等が使えれば600にしておく。
0180173
02/10/21 18:33ID:nGDYlndqcgi-lib.plの使い方はわかりました。
>>173の
<input type=\"submit\" value=\"管理用\">
この部分でできたボタンを押したことを感知するイベントハンドラ(?)みたいな処理にしないとマズいですよね?
そこを押したらpassを取得して比べるという事をしなければならないので。
そーいったのはどうすればできるのでしょうか?
0181nobodyさん
02/10/21 18:44ID:???> <input type=\"hidden\" name=\"mode\" value=\"admin\">\n
mode が admin な時に実行すれば?
0182nobodyさん
02/10/21 18:53ID:???パーミッション600だと読み込みが出来なくなっちゃうのでダメですよね。
結局見せたくないなら、手っ取り早くcgiファイルにしとけって事ですかね。
プロの人はどうやってるんでしょうか。
0183173
02/10/21 19:09ID:nGDYlndq%form = &read_input('euc');
$iptPass = $form{'pass'};
$mode = $form{'mode'};
if($mode eq admin){
# ---パスワード認証された時の処理
if ($iptPass = $PASS){
(略)
}
# ---パスワードが間違えてた時の処理
else{
(略)
}
}
>>181さんを参考にして、こんな風に付け足ししてみたんですけど、ダメでした。。。・゜・(ノД`)・゜・
もうちょっと詳しく解説して戴けますか?
>パーミッション600だと読み込みが出来なくなっちゃうのでダメですよね。
suexec対応の鯖使え。
共有鯖でsuexecでCGI動かしてない鯖は糞だから見限れ。
>結局見せたくないなら、手っ取り早くcgiファイルにしとけって事ですかね。
・見られたくないファイルはHTTP経由で見れないディレクトリに置く。
・suexecでCGIが動く鯖を使う。
・.htaccessでdenyる。
どれかにしる。
>>183
if ($iptPass = $PASS){
↓
if ($iptPass eq $PASS) {
だべさ。
0186173
02/10/21 19:56ID:nGDYlndqどうもありがとうございます。
でもできないです…。
0187173
02/10/21 20:05ID:nGDYlndqhttp://www.geocities.co.jp/SiliconValley-Sunnyvale/6220/chlog.zip
0188nobodyさん
02/10/21 20:18ID:???http://www.strangeworld.cx/cgi-bin/remix/bbs.cgi?area=soft15
0189nnd
02/10/21 21:51ID:j4V+CWpA$count =1;
$data = "$count" . ".html";
上のように自動に作成された1.htmlというファイルですが、
特定のフォルダ下に自動作成するにはどうしたらいいのでしょうか?
/html/1.html
という様にhtmlというフォルダの下に1.htmlというファイルを
自動的に作る場合はどのように指定してやればよいのでしょうか?
どなたかご教授お願いします。
0190nobodyさん
02/10/21 22:07ID:5oRhJ4R+open(FH,">./html/$count.html");
close(FH);
がむばれ
0191nobodyさん
02/10/21 22:13ID:???キミは決定的な勘違いをしている。
パスワード入力画面を出力したプロセスで
その結果を受け取れるワケがない。
ブラウザ「cgi呼び出し」
↓
CGI「パスワード入力画面出力」
↓
ブラウザ「パスワード入力画面表示」
これで1プロセス。ここでCGIの実行は終了。
この操作と同時に「CGIが吐き出したフォームに書き込まれる内容」を
CGI自身が受け取れるわけがない。
同じCGIの中でパスワードのチェックもしたいなら、
CGIが実行する一番最初の処理に
「パスワード付きの呼び出しが来たらこっちで処理」
という分岐をいれなければダメだ。
0192nobodyさん
02/10/21 22:17ID:???> 結局見せたくないなら、手っ取り早くcgiファイルにしとけって事ですかね。
> プロの人はどうやってるんでしょうか。
プロじゃなくっても、サーバいじれるなら、.datへのアクセスを
禁止しておくのが普通でしょ。
0193nobodyさん
02/10/21 22:26ID:5oRhJ4R+それか、httpでアクセスできないとこに設置するとか。
0194作ってみた
02/10/21 22:34ID:???これじゃだめか?
#!/usr/local/bin/perl
# パスワード
$pass='pass';
# このファイル名
$file='pass.cgi';
read(STDIN,$_,$ENV{'CONTENT_LENGTH'});
foreach (split(/&/)){
($name,$_)=split(/=/);
s/%([a-fA-F0-9][a-fA-F0-9])/pack('C',hex($1))/eg;
$input{$name}=$_;
}
print "Content-tyep:text/html\n\n<html><body>";
if($input{'pass'} ne ''){
if($input{'pass'} eq $pass){
print "本物";
}else{
print "偽者";
}
}else{
print '<form action="'.$file.'" method="POST"><input type="password" name="pass"><input type="submit"></form>';
}
print "</body></html>";
0195189
02/10/21 22:35ID:j4V+CWpA明日試して見ます。すいません。今日はもう寝させてくださいzzz
0197173
02/10/21 23:33ID:nGDYlndq難しい…。
何となく前半はわかったのですが、後半がよくわかりません。
もう少し考えさせてください。m(_ _)m
>>194
わざわざ作っていただいてありがとうございます。m(_ _)m
>print "Content-tyep:text/html\n\n<html><body>";
Content-tyepではなくて、Content-typeですよね?
でも、それを直してうpしても、エラーが出ちゃうんですよね…。(^^;
0198nobodyさん
02/10/22 00:27ID:???しとかないと大変なことになるよね。
パーミッションしっかりしてれば問題ないけど、それなら.cgiにする必要もないし。
0199173
02/10/22 00:29ID:EEwgqraoごめんなさい、エラーが出たのは私めのせいでございました。。。
パーミッションを変えないという初歩的なミスを…。
ちゃんと動きました、ごめんなさい。
敬具
0200nobodyさん
02/10/22 00:54ID:???いろいろな共有鯖で使う尼向け配付にはもってこいの気もする
・・・・・・・・・・なんだ結局尼むけだなぁ
仕事に使ったらAFOってことで
0201nobodyさん
02/10/22 02:35ID:???$_ = reverse($_);1
の1って何でしょう?
■ このスレッドは過去ログ倉庫に格納されています