CGIだけど、なんか質問ある?Part 5
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
01/12/26 10:51ID:???Part 3 http://pc.2ch.net/test/read.cgi/php/988727833/l50
Part 4 http://pc.2ch.net/test/read.cgi/php/1000804655/l50
その他参考になるスレッドを >>2 に纏めたので、十分に調べた上で質問して下さい。
0127名無しさん@お腹いっぱい。
02/01/03 08:43ID:???0128名無しさん@お腹いっぱい。
02/01/03 08:47ID:???0129名無しさん@お腹いっぱい。
02/01/03 09:08ID:???何を?
0130名無しさん@お腹いっぱい。
02/01/03 09:10ID:???そのブックマークスクリプトを起動する際に
パスワード認証するようにして、
Refererを知って見に来た外部の人間には
見られないようにすればいいと思われ。
0131名無しさん@お腹いっぱい。
02/01/03 09:24ID:OYtOtVswでも、それだと"登録してる"って事実は漏曳しちゃうわけですよね。
うーん....
0132名無しさんに接続中…
02/01/03 10:21ID:KWfhi5kb自分で作るしかないようなきがするが
特にGIFの生成に関するのでフリーでというのは虫がよすぎる。
GIFの生成わりと簡単なのでネットで調べるとヨシ。
0133名無しさん@お腹いっぱい。
02/01/03 14:16ID:???JPGの縮小画像じゃだめなん?
0134名無しさん@お腹いっぱい。
02/01/03 19:08ID:???どうすればよいのでしょうか?
具体的にはimgboard.cgiの2ページ目、3ページ目…を
2.shtml、3.shtml…として呼び出したいです。
1ページ目はimgboard.shtmlに
<!--#exec cgi="cgi-bin/imgboard.cgi"-->
と書いて正常に表示されます。
2ページ目は2.shtmlに
<!--#exec cgi="cgi-bin/imgboard.cgi?page=2"-->
としてみましたがエラーが出てしまいます。
0135名無しさん@お腹いっぱい。
02/01/03 19:52ID:???2.shtml,3.shtml…それぞれに
<!--#exec cgi="cgi-bin/imgboard.cgi"-->
と書き、
imgboard.cgiの中で環境変数DOCUMENT_URIを調べて、
呼び出し元を判別すればよい。
0136名無しさん@お腹いっぱい。
02/01/03 21:42ID:rXCVYJ/4未記入は漏れなく許さない形にすると、if文の荒しになります。
if( $hage eq "" ){
print "Content-type: text/html\n\n";
print "<html><head><title>未記入です。</title></head>\n";
print "<body>\n";
print "<p>未記入です。</p>\n";
print "</body></html>\n";
}
if( $aage eq "" ){
print "Content-type: text/html\n\n";
print "<html><head><title>未記入です。</title></head>\n";
print "<body>\n";
print "<p>未記入です。</p>\n";
print "</body></html>\n";
}
...
と延々書いていくしかないんですか。非効率的な気がします。
0137名無しさん@お腹いっぱい。
02/01/03 21:48ID:???この場合未記入でもその後の処理は続いちゃいますよね?
if内処理の中に__END__を入れればいいの?
0138名無しさん@お腹いっぱい。
02/01/03 21:49ID:???print "Content-type: text/html\n\n";
print "<html><head><title>未記入です。</title></head>\n";
print "<body>\n";
print "<p>未記入です。</p>\n";
print "</body></html>\n";
exit;
}
0139名無しさん@お腹いっぱい。
02/01/03 21:54ID:???thx
0140名無しさん@お腹いっぱい。
02/01/03 21:59ID:???&error("aageが未記入です") if $aage eq "";
sub error {
my $msg = shift;
print <<"_EOE_";
Content-type: text/html
<html><head><title>未記入です。</title></head>
<body>
<p>$msg</p>
</body></html>
_EOE_
exit;
}
0141名無しさん@お腹いっぱい。
02/01/03 22:04ID:???require 'cgi-lib.pl';
&ReadParse;
foreach (values %in){
if(!$_){エラー処理;exit;}
}
0142名無しさん@お腹いっぱい。
02/01/04 03:53ID:???redirect.cgiとかそういうのを作って、redirect.cgi?url=http://foo/bar/
として呼び出すと
<meta http-equiv="refresh" content="0;url=http://foo/bar/">
というHTMLを吐くようにする。
んで、ブックマークスクリプトで表示するリストではredirect.cgiを使うよう
にすればOK。
0143名無しさん@お腹いっぱい。
02/01/04 07:04ID:???ありがとう。
下のような感じなのかな
www.users.yun.co.jp/~moriq/lang/cgi/tips.html
適当に改ページの処理らしき所に突っ込んでみたけど動作せず。
# ページを決める
$total_page=@PAGE_START;
if($FORM{'page'} > 0){
if($FORM{'page'} > $total_page){
$disp_page = $total_page;
}else{
$disp_page = $FORM{'page'};
}
}else{
$disp_page = 1;
}
$next_page = $disp_page + 1;
$pre_page = $disp_page - 1;
if ( $ENV{'DOCUMENT_URI'} ) {
$page_name = $ENV{'DOCUMENT_URI'};
}
else {
$page_name = $ENV{'PATH_INFO'};
}
if($pre_page > 0){
&output_kiji_html;
大本のCGI
www.big.or.jp/~talk/t-club/soft/mini_r6/imgboard122r6.zip
0144名無しさん@お腹いっぱい。
02/01/04 12:38ID:+vgAy2bq.comや.netや.orgや.to以外のドメインを弾く場合につかう
正規表現って?
.*@.*\.
この先がわかりません。
0145デフォルトの名無しさん
02/01/04 12:50ID:???>>144
ここよく読んで拝借しなされ
0146名無しさん@お腹いっぱい。
02/01/04 12:54ID:+vgAy2bqそんなに難しいもんなの?
if ( ! $mail eq .*@.\.[com,net,org] ){
ふせー
}
とか出来ないの?!萎えるなあ。。
0147名無しさん@お腹いっぱい。
02/01/04 12:58ID:???簡単と思うなら自分で考えろ、お前は自分で自分を簡単な事も考えられない
馬鹿だと言いたいのか?
実は正規表現知らんだけちゃうんかと
0148名無しさん@お腹いっぱい。
02/01/04 13:05ID:???0149これでいいのかな?なんだ簡単じゃん。
02/01/04 13:09ID:+vgAy2bqq{(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\} .
q{\[\]\000-\037\x80-\xff])|"[^\\\\\x80-\xff\n\015"]*(?:\\\\[^\x80-\xff][} .
q{^\\\\\x80-\xff\n\015"]*)*")(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x} .
q{80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|"[^\\\\\x80-} .
q{\xff\n\015"]*(?:\\\\[^\x80-\xff][^\\\\\x80-\xff\n\015"]*)*"))*@(?:[^(} .
q{\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\0} .
q{00-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[^\x80-\xff])*} .
q{\])(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,} .
q{;:".\\\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[} .
q{^\x80-\xff])*\]))*};
if ($email !~ /^$mail_regex$/o) {
print "不正なメールアドレスです\n";
}
0150名無しさん@お腹いっぱい。
02/01/04 13:11ID:???うんダサいね、少なくとも君の半分位はダサい
0151
02/01/04 13:28ID:SyaInDkyCGIを呼び出すと空白の結果が送られてきて困っています。
直接CGIを呼び出したときにエラーのHTMLを表示させるにはどう追加記述すればいいでしょうか。
0152>>151
02/01/04 13:32ID:+vgAy2bqprint "エラってる1\n";
}
0153>>151
02/01/04 13:34ID:+vgAy2bqprint "エラってる\n";
exit;
}
#これをスクリプトの上に置く
0154デフォルトの名無しさん
02/01/04 13:36ID:???>>149 まぁそんな感じで
>>151
環境変数を適当にチェックするか、フィールドをif($IN{hoge} eq ''){error;
みたいに検査すれば良い、、、、
が!、そんな認識でsendmailをopenしてるなら厨房の餌食にされる可能性が
凄く高いから根本的に本でも読むことをお勧めする
0155デフォルトの名無しさん
02/01/04 13:37ID:???0156
02/01/04 13:42ID:SyaInDkyスクリプトの一番上に追加したらいいのですか?
それでもまだ駄目なようですが。
0157名無しさん@お腹いっぱい。
02/01/04 13:46ID:???別のにしろ
0158
02/01/04 13:47ID:SyaInDkyなかなか良いのが無くて困っていたんです(;´Д`)
0159名無しさん@お腹いっぱい。
02/01/04 14:01ID:???print "Content-type: text/html\n\n";
print "<html><body>エラー</body></html>\n";
exit;
}
0160
02/01/04 14:11ID:SyaInDkyうまくいったようです。有り難う御座います。
あと送ってきたのホストを完全に取得する方法分かりますか?
今だったら、*.ocn.ne.jpのようにかなり曖昧なものなんです。
0161名無しさん@お腹いっぱい。
02/01/04 14:21ID:FMoA2DDOprint strftime "%Y%m%d\n", localtime;
こうやると年月日が出ると思うんですが、
この数字に7を足すことってできます?
ほかの方法があればその方法もご教授頂けるとありがdなんですが。
0162名無しさん@お腹いっぱい。
02/01/04 14:50ID:???一概に言えない、改造したいなら改造スレへ
>>161
このスレッドも立てたの? (呆
http://pc.2ch.net/test/read.cgi/php/1010092390/l50
自分で考えられないなら諦めなさい
1970年からインクリメントしてコンペアすれば良いけど
無茶苦茶負荷掛かるだろうね
0163名無しさん@お腹いっぱい。
02/01/04 14:54ID:FMoA2DDOスレッドは立てていないですけど助かってません!!
ほんと感謝してます♪
0164名無しさん@お腹いっぱい。
02/01/04 15:39ID:???これだろ
www2q.biglobe.ne.jp/~terra/cgi/webhandler.htm
前にサポート掲示板に同じようなこと書き込んだら
「cgiには直接アクセスするような用途は想定していませんとか言いやがった。
こりゃ駄目だと思って自分で改造したけどね。
0165名無しさん@お腹いっぱい。
02/01/04 16:02ID:???>>162も言ってるが、最もプリミティブなやり方ならフィールドを
分割した後ツェラーの公式で通算秒に直してやればいい
CPAN漁れば絶対有りそうだが、自分で書いても手間は掛からんだろ
ここは人が少ないんだから、次からはじっくり待つ方が良いぞ
0166名無しさん@お腹いっぱい。
02/01/04 16:48ID:ZcIQHoBD0167名無しさん@お腹いっぱい。
02/01/04 16:51ID:???0168名無しさん@お腹いっぱい。
02/01/04 16:56ID:ZcIQHoBD0169名無しさん@お腹いっぱい。
02/01/04 16:57ID:ZcIQHoBD0170名無しさん@お腹いっぱい。
02/01/04 17:39ID:???PETITのログには投稿日時が入ってるが変に整形されてしまっている。
だからログに細工して <>1000000000の 様なデータを追記して
書き出し時に比較するか、
元から入ってる、日本語表記の時刻から1970年からの秒数を割り出して
比較すればいい
0171名無しさん@お腹いっぱい。
02/01/04 18:22ID:+vgAy2bq(日本語やら記号やら全角は弾きたい)どう書くんでしょう。
$date =~ /[a-zA-Z]/
をifで使うと英数字がとりあえず入ってればよくなりますよね。
とにかく「全角物は排除」したいんですが。。。
0172名無しさん@お腹いっぱい。
02/01/04 18:24ID:???(日本語やら記号やら全角は弾きたい)
↓
(日本語やら全角記号やら全角は弾きたい)
0173名無しさん@お腹いっぱい。
02/01/04 18:27ID:???0174名無しさん@お腹いっぱい。
02/01/04 18:29ID:???すいません、むちゃくちゃ簡単な花氏でした。。
特殊文字を忘れてた。
0175名無しさん@お腹いっぱい。
02/01/04 18:30ID:???0176名無しさん@お腹いっぱい。
02/01/04 18:39ID:???でいいと思われ
0177名無しさん@お腹いっぱい。
02/01/04 18:40ID:???#date =~ /[^\wその他記号]/
だな
0178名無しさん@お腹いっぱい。
02/01/04 18:42ID:???0179あほ
02/01/05 19:53ID:???print <<EOE;
Content-type: text/html
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
</head>
<body>
<p>あほ</p>
</body>
</html>
EOE
return();
}
0180あほ
02/01/05 19:55ID:???{}の中にタブを入れるとエラーになる。。。
print <<
ってタブいれらんないの?
0181あほ
02/01/05 19:55ID:???0182名無しさん@お腹いっぱい。
02/01/05 20:07ID:???ヒアドキュメントの最後の文字(この場合EOE)の前には入れられないよ。
0184名無しさん@お腹いっぱい。
02/01/06 00:52ID:4gpFhzTEこれのOS判別にWinXPがないんですが、
簡単に追加とかってできますか?
Web制作の初心者スレッドでこちらに誘導されました。
よろしくおねがします。
0186名無しさん@お腹いっぱい。
02/01/06 00:56ID:d7n79FF9えらーい!
まずreport.cgiから以下の一行を探す。
elsif ($agent2 =~ /Wind?o?w?s? ?NT ?5/i) { $os = 'Win2000'; }
<Lesson2>
そしてこれをコピペで書き変える。
この行はWin2000の上にXPが無いと、XPも2000で
ヒットしてしまうから注意してくれ。
elsif ($agent2 =~ /Wind?o?w?s? ?NT ?5.1/i) { $os = 'WinXP'; }
elsif ($agent2 =~ /Wind?o?w?s? ?NT ?5/i) { $os = 'Win2000'; }
0188184
02/01/06 01:28ID:4gpFhzTEさっそく、そのように直してみました。
WinXPの人がくるのを楽しみにしときます。
ありがとうございました。
0189名無しさん@お腹いっぱい。
02/01/06 02:01ID:???としないのか小一時間(以下略
>>187
5.1じゃなくて 5\.1 だっぺよぉ。
0190名無しさん@お腹いっぱい。
02/01/06 14:01ID:IdoSmDBFなんか本には基本すぎるせいか書いてない・・・鬱だ・・・
0191名無しさん@お腹いっぱい。
02/01/06 14:04ID:???; を書きたい所でLの右隣のkeyを押せばいいんだよ
0192名無しさん@お腹いっぱい。
02/01/06 14:15ID:IdoSmDBF命令の終わりにつけるとか?
0193名無しさん@お腹いっぱい。
02/01/06 14:17ID:???取り合えず文の終りに付けとけ
ついでにその本捨ててまともな本買え
0194名無しさん@お腹いっぱい。
02/01/06 14:36ID:???rubyには特に;は必要ありません。
だから本にも書いてないのでしょう。
0195名無しさん@お腹いっぱい。
02/01/06 14:51ID:???MS-DOSバッチファイルでは;は必要ありません。
だから本にも書いていないのでしょう。
0196190
02/01/06 14:54ID:???すいませんperlです、InlineCの中にInlineAssemblerで書いています
それでは 是非回答願います
0197名無しさん@お腹いっぱい。
02/01/06 15:01ID:???ここでPerlのところを読むといいよ。
下手な本よりよっぽどマシ。
0198名無しさん@お腹いっぱい。
02/01/06 18:53ID:3vLHBFrhだんだんデータが重くなり、Excelにコピペするのもかなり大変。
で、1週間毎のデータになるよう、ある時間できって、前の週の
データを全部削除してお尻(後ろのカラム)のデータの並びが
時々おかしくなってるんで、それを直してると4時間はかかり
ます。普通はどんなやり方をやってるんでしょ?VBA?Perlで
スクリプト?なんかいいスクリプトの場所キボーン。
0199名無しさん@お腹いっぱい。
02/01/06 19:13ID:???まず、落ち着いて日本語を書こう。
Perlなら楽だよ。
0200198
02/01/06 22:09ID:cayoIMr7ブラウザ上に表示されたものをコピペでエクセルに貼付ける。
(しかし、2000件を超えたあたりからCtrl+Aでブラウザ上の
テキストを全て選択すると砂時計が回ったままになる、)
この時前の週のデータは全て削除し、今週のデータだけにします。
あと、しかるべきカラムにないデータを移動。
これが1万件ぐらいあると、スクロールして全部見るだけで、とても
時間がかかる、どうしよう?というのが質問の主旨です。
0201名無しさん@お腹いっぱい。
02/01/06 23:05ID:???書き込む前に読み返してる?伝わりにくいったらありゃしない。
で、質問が漠然とし過ぎてる。
顧客からどういうデータを取って、どういう集計をして
最終的にどういうデータを得たいのかをはっきりさせて、
今はどうしてるのかを書かないと誰も答えられないよ。
並びがおかしくならないまともな集計スクリプト書いて、
エクセルファイルで出力したら?としか言えない感じ。
0202名無しさん@お腹いっぱい。
02/01/06 23:32ID:???>ブラウザ上に表示されたものをコピペでエクセルに貼付ける。
>(しかし、2000件を超えたあたりからCtrl+Aでブラウザ上の
>テキストを全て選択すると砂時計が回ったままになる、)
IEだったら、「名前を付けて保存」っていうのがあるはず。
テキスト形式で一度それを保存して、そいつをExcelで開くように
したら?
つーかCGIの問題ですかこれ?
0203名無しさん@お腹いっぱい。
02/01/07 00:13ID:???IEか固まるのは多分CGIではどうしようも無ぃ
0204名無しさん@お腹いっぱい。
02/01/07 00:42ID:BlOU+qgTひどく一般的な気がするんです。
あちこちにあると思います。それこそ。
ただ、それつかってどういうことがやりたいのかとか、
どういう集計をしないといけないので手作業してて、4時間もかかるのか
とか、いろいろ具体的に書けば書くほど、アドバイスをもらいやすくなるんでしょうね。
こういう集計とかって、Perlの得意分野なので、内容次第では、
ここですごいアドバイスがもらえると思いますよ(笑)
0205名無しさん@お腹いっぱい。
02/01/07 06:55ID:HrNqkraEみんなが投稿できるようなタイプのものです。
そういったCGIを提供しているところご存知ありませんか?
0206名無しさん@お腹いっぱい。
02/01/07 10:22ID:???ttp://www2.inforyoma.or.jp/~tokaji/cgitech/upload.htm
0207名無しさん@お腹いっぱい。
02/01/07 20:43ID:???同じリモートホストからスレ立て制限する方法ってありますか?
0208マジレスしていいのか?
02/01/07 20:52ID:???スレ立て時にリモホを記録して、一定回数以上のリモホを弾く。
0210名無しさん@お腹いっぱい。
02/01/08 00:49ID:RDtLz+8f0211210
02/01/08 00:55ID:RDtLz+8fCGIと同じディレクトリにあるファイルを送りたいのです。
0212名無しさん@お腹いっぱい。
02/01/08 01:59ID:???0213名無しさん@お腹いっぱい。
02/01/08 02:00ID:???とりあえず、これでも読んどけ。
ttp://www.hypermail.org/rfcs/rfc2112.html
0214名無しさん@お腹いっぱい。
02/01/08 02:11ID:???その手のRFCの日本語訳しているページってどこでしたっけ?
0215名無しさん@お腹いっぱい。
02/01/08 04:55ID:bkocNLwMその方法でも、redirect.cgi が Referer として渡されちゃいますよね。
redirect.cgi がもっと広範囲で使われてるならいいんですが、
そのブックマーク用スクリプトからしか呼ばれないのなら
結局同じような気がします。
(redirect.cgi から来た → ブックマークされとる)
0216名無しさん@お腹いっぱい。
02/01/08 07:03ID:???0217名無しさん@お腹いっぱい。
02/01/08 07:24ID:???あひっ、試したら Referer 渡されてませんでした。
試しもしないで偉そうなこといってごめんなさーい。
ありがとうでした。
0218名無しさん@お腹いっぱい。
02/01/08 07:30ID:mMhN1vkmerrry-to やreply-to って、つけるべきなんでしょうか?
Fromだけで十分ではないんでしょうか?
0219名無しさん@NEmacs
02/01/08 07:42ID:IRCUA1xTErrors-To: は非標準フィールドなので、つけても無意味です。内部的にこの
フィールドを利用してエラーメール返送する MTA がありますが、それを期待
するべきではありません。(これは UUCP 時代の名残です。)
Reply-To: は、返信先を指定したいような事情があるときにつけます。MTA は
通常これを参照しません。これを参照するMTAは腐っています。
必要であれば、エンベロープ送信者も指定します。エラーメールはこのアドレ
スに返送されます。(sendmail の -f オプション)
MTA = Mail (Message) Transfer Agent
# From: とエンベロープ送信者、To:, Cc: とエンベロープ受信者は別物です。念のため。
0220名無しさん@お腹いっぱい。
02/01/09 00:15ID:nYi4jqfK半角のみ(ゴルァとか)でデコードすると、文字化けして転送されてしまいます。
コードは'sjis'で設定してるんですが、ほかに何か割るいとこがあるんですか?
おまえら押しえてください。
0221名無しさん@お腹いっぱい。
02/01/09 00:30ID:???0222名無しさん@NEmacs
02/01/09 01:34ID:EMrXtxph(「半角」が混じると、EUC-JP と Shift_JIS の判定が困難になる。)
# ここで、「半角」= JISX0201 Kana
0223よみ
02/01/09 10:32ID:C5sUC2Kcあるファイル(10行のファイル)をOpen読み込んでたとえば5行目とかを消すもしくは置き換えるのにはどうしたらよろしいでしょうか?
お教えください
0224名無しさん@お腹いっぱい。
02/01/09 11:26ID:???Perlかな? 一番簡単な方法、たぶん。
# ファイル(hoge.txt)を開いて配列に突っ込みます
open FH,"+< hoge.txt" or die $!;
@lines = <FH>;
# 5行目をあぼ〜んする場合です
splice @lines,4,1;
# 5行目を置き換える場合です
$lines[4] =~ s/NO/YES/;
# 書き戻します
truncate FH,0; seek FH,0,0;
print FH @lines; close FH;
exit;
0225名無しさん@お腹いっぱい。
02/01/09 12:11ID:???DB_FileのDB_RECNOを使う
use DB_File;
use Fcntl qw(:flock);
my $db = tie @lines, DB_File => 'hoge.txt', O_RDWR | O_CREAT, 0666, $DB_RECNO or die $!;
# ロックする場合
open DBF, '+<&=' . $db->fd or die $!;
flock DBF, LOCK_EX or die $!;
undef $db;
# 5行目をあぼ〜ん (spliceは実装されてない?)
delete $lines[4];
# 5行目を置き換える
$lines[4] =~ s/NO/YES/;
untie @lines;
0226よみ
02/01/09 12:32ID:C5sUC2Kc親切にありがとうございました。
しかし我ながら223のようなわかりにくい文章書いてるな。
あーはずかし!
0227よみ
02/01/09 13:01ID:C5sUC2Kcしつもんです。
lines[4] =~ s/NO/YES/; だと、5行目のNOのところだけYesに置きかわるんじゃないですか?
■ このスレッドは過去ログ倉庫に格納されています