CGIだけどなんか質問ある Pert 5.01
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/03 12:49ID:673UxTI50285nobodyさん
02/03/09 20:11ID:???$length = length($in{"$ran"});
ところで、$ranの内容は?
当然それくらいデバッグしてんだろ?
0286nobodyさん
02/03/09 23:36ID:???とかファイル名に ./ を付けた形で呼び出しますよね?これは必須ですか?
あと、その呼ばれた CGI が内部で呼び出すデータファイル等にも時々 ./ が
ついてたりしますが、環境 (httpd 等) によっては無いと不味いんでしょうか?
いや、unix 系で安全の為にカレントは PATH に含めて居ないのは知っていますし
その場合の実行方法が PATH を含めなきゃいけないのも知っています。
もしかして RFC の規定とかでしょうか?
0288nobodyさん
02/03/09 23:40ID:???CGIはURLと言う文字列によって場所が一意に決まる。
httpdはURLとファイルシステムをマッピングし、実行する。
URLにはPATHと言う概念がないため、誤実行の恐れはない。
0289286
02/03/10 00:05ID:???やっぱそうですよねぇ。
web 上のサイトで (本は持ってないので) よく見かけるんですが、
あれは一体どういう理由で付けてるんでしょうねぇ。
まぁ本人に聞かないとわからないのかもしれませんが、みんな一様に
あの記述方でしたのでずっと気になっていますた。
結論: ./ は要らない。
0292nobodyさん
02/03/10 00:13ID:???呼び出し元のファイルの場所がカレントになるんだから./は冗長ではあるが間違いではない。
使える以上否定するのは得策ではない。
0293nobodyさん
02/03/10 00:19ID:???0294291
02/03/10 00:19ID:???私の頭が少し unix shell 寄りだったという事ですね (苦笑
0295初心者
02/03/10 00:50ID:nlk31vWZレスありがとうございます。
追加して状態の説明です。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−
ループ内に
$ran = "data$i";
print "RAN2:$in{$ran}<br>";
↑を組み込むと、ちゃんと$in{$ran}を出してくれます。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−
$i=1のとき
$in{"data1"}の内容は日本語文字であったり英語半角であったあり色々ですが、
$length = (length($in{'data1'}));
print "$length";
print "$in{data1}";
では両方とも正常に値を出すのですが、
{}内に変数を入れるとうまく動きません。
$length = (length($in{$ran})); →何の数字も出しません。
$length = (length($in{"$ran"})); →何の数字も出しません。
$length = (length($in{'$ran'})); →$ranを変数として認識しません。
0296nobodyさん
02/03/10 00:53ID:???リストと勘違いされても文句は言えん。
0297nobodyさん
02/03/10 02:03ID:???話終わったみたいだけれど ./が無いと動かないshellあるべさ?
./にPATH通ってないの。
unixよりとか云々じゃなくPATHを理解してないんじゃ?
0299nobodyさん
02/03/10 04:03ID:OHdoISBH一昼夜くらいで早く作ってくれる所あるでしょうか。
難しい改造ではないので、わかる人にはちょちょいだと
思うのですが。
0300nobodyさん
02/03/10 04:16ID:???キチンと説明出来るなら、やってくれる人居るかもね。
スクリプト改造工房 Part4
http://pc.2ch.net/test/read.cgi/php/1012839651/l50
0301nobodyさん
02/03/10 05:33ID:8R88bCKCシンプル。観覧者による一行レス可能。
画像UPロード(これはタグで回避できるからいいとして)
みたいなのないですかね?
探してみたものの、一応あったんだけど、レス生成欄がでかすぎたりとか…。
ゴミゴミしてるとか。カレンダー形式とか。
要望に会わないのばかりで困ってます;-;
とにかくシンプルでタグ可能観覧者による一行レス可能。
な日記CGIないでしょうか?
知ってる方いましたら教えてくれると嬉しいです。
0302Name_Not_Found
02/03/10 05:56ID:???0303nobodyさん
02/03/10 05:59ID:???スレ違い。
0305nobodyさん
02/03/10 06:40ID:???探してますスレッドありました><
すいませんでしたー。
向こうで聞いてミマス!
0306 ◆a/globe2
02/03/11 03:22ID:WZhG/BNpMacからだと拡張子を取れないようです
どうすればいいんでしょうか
0307nobodyさん
02/03/11 03:40ID:???環境変数にコンテントタイプが出てるかもしれない。
投稿者にファイルの種類も投稿してもらえば手間がないけど,信頼度は低い。
ファイルのヘッダ調べるのが確実だけど,手間がかかるためほとんど使われない。
0308 ◆a/globe2
02/03/11 03:44ID:WZhG/BNpコンテントタイプの振り分けを細かくすればいいんですかね、、、。
一応拡張子を入力してもらう欄を設置するとか(Macの場合のみ表示で)
0309nobodyさん
02/03/11 04:35ID:???ファイルヘッダ読むのは難しいですか?
できそうなら↓とかが参考になりますよ
http://www.wotsit.org/default.asp
0310A Patch
02/03/11 06:35ID:7j09hA/VAnHttpd のように Perl.exe のパスを決め打ちできないでしょうか?
プロバイダにアップする CGI で #!local/usr/bin などと書いておきたいので
#!C:/Perl だと困るんです。アップするたびに書き換えるのも面倒だし
それがために Perl を C:\local\bin にインストールなんて馬鹿げたことも
したくないです(複数のサーバを持っていてそれぞれ Perl のパスが
違ったら終わりじゃない?)。
出来ないのであれば素直にあきらめますが何か設定があれば
あるいは何らかの方法があれば教えていただきたいです。
0312nobodyさん
02/03/11 19:44ID:???うちの近所の本屋はCGI関連の本が少ないんですよ。
だからkentと作ろう〜の内容もよく知らないんです。
そこで聞きたいのですが、kentと作ろうperlでCGIには
Windows98にperl本体をインストールするところや
if文などの関数についても解説してるでしょうか?
0313nobodyさん
02/03/11 20:08ID:???ttp://tohoho.wakusei.ne.jp/
ここの方がよっぽど親切。
0314 ◆a/globe2
02/03/11 21:00ID:1vbRZmtL指定した投稿できるファイルの最大容量
よりファイルサイズがちっさいのにエラーになります
インターナルサーバーエラなのでCGIだしてるエラーではないようです
cgi-lib.plのReadナントカっていうサブルーチンを取り込んでるんですが
それが問題かなともいます
imgboradなどではそのようなエラーは出ないようなので
どういうことなのかなと思っております
わかる人がいらっしゃれば教えてください
0318310
02/03/12 00:40ID:???すみません、意味がわかりませんでした。
0319nobodyさん
02/03/12 01:15ID:???SSIで一括表示してるんですが、リンク先のURLを変えずクリック数をカウントするにはどうしたらいいでしょうか
0320nobodyさん
02/03/12 01:27ID:???リンク先にアクセス解析を入れてもらう。
0322sage
02/03/12 03:08ID:XpAJ+W0c>リンク先のURLを変えず
って部分が引っかかるのだけど・・・
結果的に表示されるページが変わらなかったらいいって事?
それとも<a href="http://www.hoge.com">という
タグ自体が変わったらまずいって事?
通常は321さんの方法を使うけど、これだとタグ自体が変わるしね。
0323ぷうすけ
02/03/12 07:00ID:al7KKwB3言語はperlです。
0325ぷうすけ
02/03/12 10:10ID:NiSfFmxxすんません、書き方悪かったです。
わかる方、方法を教えてください。私は何処へいくべきでしょうか?
0326nobodyさん
02/03/12 10:17ID:???googleに行って「LWP」や「socket」を「perl」と組み合わせて検索。
0327nobodyさん
02/03/12 14:20ID:???CGIを UTF-8 で保存して実行してみたら、一行目でエラーが出ました。
> perl -v
This is perl, version 5.005_03 built for i386-freebsd
>perl utf8.cgi
Unrecognized character \357 at utf8.cgi line 1.
テキストエディタで見るとちゃんと先頭は #!/usr/bin/perl で始まっていて、
改行も LF になってるのですが、バイナリエディタで見ると、
# の前に EF BB BF というなぞのコードがくっついており、
これのせいでエラーが出ているようです。
これを動くようにするにはどうしたらいいんでしょう。
作成に使ったのは Windows 用の Dana というテキストエディタなのですが、
バイナリエディタで先頭3文字削除しても、
また Dana で編集するとその3文字がくっつくし…。
つか、CGI を UTF-8 に改造するってページ検索したけど、
こんな問題どこにもなかったし。秀丸とかだといいのかなあ。
…長文スマソ。入り口以前のところでつっかかってて泣きそうです。
0328nobodyさん
02/03/12 15:13ID:???utf8に対応しているのはperl5.6以降です。新しいperlを入れましょう。
それとutf8プラグマ使った方が良いでしょう。use utf8;
Perlのユニコードの対応は万全とはいえないので、・・・(以下略)
0329nobodyさん
02/03/12 15:58ID:???アドバイスありがとうございます。
たしかにWin用のActive Perl(5.6.1)では動きました。
そこで、perl5.6 が入っている biglobe にアップして
実験してみたのですが、500エラーになります。
さっきとは違うエラー内容なのですが、やはり
#!/usr/bin/perlの行でひっかかってます。
エラーログには utf8.cgi: Exec format error としかないのですが、
まったく同じ内容のスクリプトを SJIS で保存してうpすると
こっちは問題なくうごきます。
ちなみに、テストスクリプトは
#!/usr/local/bin/perl
print <<__EOD__
Content-type: text/html;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;">
<title>UTF-8 で出力するCGI のテスト</title>
</head><body>
<h1>UTF-8 マンセー( ´∀`)</h1>
</body></html>
__EOD__
こんな感じです。
0331nobodyさん
02/03/12 16:04ID:???0332nobodyさん
02/03/12 16:39ID:???げ!
まあ、2行目のprint 以下になんもないので、見逃してください。
>>331
telnet でシェルに入って実行した時のエラー
>./utf8.cgi
./utf8.cgi: 鏤殖!/usr/local/bin/perl: not found
use: not found
: not found
print: not found
>
( ゚д゚)…ミンナハドウヤッテクリアシテルノカワカラナイヨ
あきらめて SJIS で HTML4.01 Strict な CGI にします・゚・(つД`)・゚・。
0333327=329=332
02/03/12 16:43ID:???0334nobodyさん
02/03/12 17:00ID:???#!/usr/local/bin/perl
↑これはあっているの?
#!/usr/local/bin/perl5 とかだったりしない?
0335332
02/03/12 17:14ID:???同じソースをSJISでうpすると動くんですぅ。
SJIS で動作している CGI をそっくりそのまま UTF-8 に変換して
エラーが出てるんです。
UTF-8 に変換したのがローカルで perl utf8.cgi で動いてるのも確認してるし、
use utf8; もいれたし、
FFFTP でアスキー送信のボタンがへっこんでるの確認して送信してるし、
うpされたファイルのバイト数が減ってる(CRの分)確認してるし。
他にどこを確認したらいいでしょうか。
0336nobodyさん
02/03/12 17:49ID:???0337nobodyさん
02/03/12 17:53ID:???>作成に使ったのは Windows 用の Dana というテキストエディタなのですが、
>バイナリエディタで先頭3文字削除しても、
>また Dana で編集するとその3文字がくっつくし…。
これが原因でperlのパスがおかしくなってると思う。
>>332のエラーは実行するプログラムが見つからないってことでしょ。
普通のテキストエディタ使おうよ。
0338332
02/03/12 17:53ID:???utf8.cgi を
#!/usr/local/bin/perl
use utf8;
require "utf8.pl";
にして、ascii で保存。
utf8.pl を
print <<__EOD__;
Content-type: text/html;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;">
<title>UTF-8 で出力するCGI のテスト</title>
</head><body>
<h1>UTF-8 マンセー( ´∀`)</h1>
</body>
</html>
__EOD__
1;
にして、UTF-8 で保存。サーバーにうpして動きました。
よその人がどうやってるのかわからんけど、
今後はこの方法で作成します。みなさんありがとう。
0339332
02/03/12 17:55ID:???普通のテキストエディタってどんなのかわからないんですが、
xyzzy も terapad も同じように先頭3文字くっつきやがりました。
疲れました。
0340nobodyさん
02/03/12 18:18ID:???秀丸はEF,BB,BF=BOM(Byte Order Mark)付いてないみたい。
ほとんど秀丸しか使ってないからそういうものだと思いこんでしまった。ゴメン。
EmEditorは付けるか付けないか選べた。notepadは付いてた。
とにかく#!をシェルに読ませないことには動かないでしょう。BOMは邪魔だね。
0341nobodyさん
02/03/12 18:32ID:???xyzzyだとM-x change-fileio-encodingでutf8nするとはじめの3バイトつかないよ。
utf8だと付く。
ってことでがんばれー。
0342nobodyさん
02/03/12 18:36ID:ip/rxryKuse File::Basename; で宣言してbasenameを使いたいんだけどうまくいかないです。
$filename = 'C:\tmp\mona.jpg';
$basename = basename($filename,"");
だけど$basenameには全く処理のされないまま$filenameと同じモノが…
何が悪いのかな?
0343339
02/03/12 18:36ID:???なるほど。先頭につけないエディタもあるんですね。
xyzzy に utf8 と utf8n と2つあるのはそういう意味だったんですか。
とりあえず、メインエディタを Dana から xyzzy に移行することにします。
ありがとう。
0344nobodyさん
02/03/12 18:45ID:???こんなんでどう?
use File::Basename;
fileparse_set_fstype(MSDOS);
$filename = 'C:\tmp\mona.jpg';
$basename = basename($filename,"");
print $basename;
0345342
02/03/12 18:55ID:???fileparse_set_fstype(MSDOS); ってのが多分ミソなんでしょーけど
これを自動判定させる方法って無いもんでしょうか?
敵はUNIXもMacも想定せなアカンので…
0346nobodyさん
02/03/12 19:08ID:???0347nobodyさん
02/03/12 19:15ID:YNqS+HR0って、タイムアウトを設定できますか?
0349nobodyさん
02/03/12 19:26ID:YNqS+HR00350ぼくフェロー
02/03/12 19:54ID:/5Jn0bAAある変数 $a に入っている文字列が数値を表すか否か
判断するにはいかなる手段がありますでしょうか?
たとえば,次のように判別したいのですが.
$a = 100 ==> 数値
$a = -1.0 ==> 数値
$a = 1e-100 ==> 数値
$a = 'abc' ==> 数値ではない.
0351342
02/03/12 19:58ID:???$FORM = new CGI;
$filename = $FORM->param('img');
fileparse_set_fstype(MSDOS) if $^O eq 'MSWin32';
if ($filename) {
だらだら処理
}
反応してくれないよ…
0352346
02/03/12 20:38ID:???「敵はUNIXもMacも〜」って、CGIを動かすブラウザがUNIXかMacかわからんってこと?
UNIXかMacかわからないサーバで動かせるスクリプトを組もうとしているのかと。
$basename =~ ($filename =~ /[\/\\:]([^\/\\:]+)$/)[0];
でいい?
\とか:とか/が入ってるファイル名は上手く取れないが、一応Win/unix/Mac対応。
0353346
02/03/12 20:39ID:???○ $basename = ($filename =~ /[\/\\:]([^\/\\:]+)$/)[0];
スマソ。
0354nobodyさん
02/03/12 23:18ID:???0355nobodyさん
02/03/12 23:20ID:???とかってスレッド立ててください!
0356nobodyさん
02/03/12 23:52ID:OrWEi2X1と同じように同一ページに持っていきたいです。識者の方、教えてください。
http://uho.s7.xrea.com/cgi-bin/yy2ch/
0357識者
02/03/12 23:55ID:???0358nobodyさん
02/03/12 23:55ID:???新着スレ表示するところで<BR>を書かない。
ページにフォームを書き出す。
0359名無しさん
02/03/13 00:48ID:???・・・というのはここで相談してOK?
0360nobodyさん
02/03/13 01:37ID:???0362nobodyさん
02/03/13 06:41ID:P3iVCwDD0363nobodyさん
02/03/13 06:44ID:???0364nobodyさん
02/03/13 22:30ID:0MaZQ+xJ0365nobodyさん
02/03/13 22:35ID:12II/YOS0366nobodyさん
02/03/13 22:41ID:???↑このスレッドで聞いた方がいいのでは?
Perl,CGIってなってるから、Perl限定じゃないでしょ。
0367nobodyさん
02/03/13 22:43ID:???月宮あゆのPerl教室 Part.4
http://pc.2ch.net/test/read.cgi/php/1014096840/l50
君と同じ質問してた人がいる。
後、いい答えも出てる。
0368nobodyさん
02/03/13 22:53ID:12II/YOS助かりました、どうもです!
0369nobodyさん
02/03/14 11:58ID:zKtt7BTbたとえばVC++でCGI作って、特定のIPとデータ交換するとか。
ボケボケの質問でスマソ。
0370nobodyさん
02/03/14 12:34ID:???なんでVC++?
普通にperlで組んでクライアント側にHTTP処理するコード書けば良いだけでは?
0371369
02/03/14 13:24ID:jSrpksxZユーザの要求なもんでどうにも・・・。
あと、サーバーごと納めるんで、コードとか見せられないんですよ。
0372nobodyさん
02/03/14 13:33ID:???もちろん出来ますが、CGIでやる意味が分かりません。
クライアントの要求が来てから、データ交換にいそしんで、
長い間応答しないのは問題があると思います。
なぜデータ交換をCGIでやらないといけないの?
0373369
02/03/14 15:07ID:OQoEp2Bkデータ量そのものはたいしたものではないのですが、
とある機器(WEBサーバーLAN内にある)を、インターネット経由で
ブラウサから制御しようとしているんです。
その辺の知識がまだ乏しいので、今のところCGIでできるかな?
と思っているのです。もっといい方法があるのでしょうが
今の私には思いつきません(あせ
0374nobodyさん
02/03/14 18:47ID:???それ、トロイの木馬という気がしてきた・・・。
セキュリティホールになる可能性大ですぞ。
外部の馬の骨−CGI(80番はファイアウォールで許可)−内部からしかアクセス出来ない機器
0375perlでgzipされたhtmlファイルの作成
02/03/14 20:06ID:gUGqkp2Cgzipで圧縮した、htmlファイルを作成する方法を教えてください。
0377nobodyさん
02/03/14 23:41ID:yfgde3s4ドキッ!!
ちょっとまだ良く理解できてないですが、なんかまずそう?!
そういう構成のシステムそのものに問題があると言うことですか?
0378nobodyさん
02/03/14 23:50ID:???例を挙げると、ブラウザから打ち込んだコマンドを実行し、結果を返すだけのCGIがある。
CGIはサーバサイドで動くので、CGIの実行権限の範囲でCGIの使用者は何でも出来ることになる。
(CGI設置者であったりnobodyであったり。)
そのCGIに認証が必要ないとすれば、誰でも使えるシェルが公開されているに等しい。
ファイアウォールでいくら外部からのアクセスを拒否したとしても、そんなCGIがあれば
簡単に外部からの侵入を許すことになる。
いくら対外的なセキュリティを強化しても、外部の人間の言いなりになる産業スパイが自社にいてはまったく意味がない。
みたいな。
0379nobodyさん
02/03/15 00:28ID:jooXMX1Oわかるようなわからないような。うう・・・。
認証と言うことは、たとえばパスワードのようなもので
ログインみたいなことをさせるとか、同時にそのCGIを使えるのは
一人のみに制限するとか(できるのかしら?(あせ))
CGIの持っている機能そのものは、当然コードに埋め込まれているものだけですが、
その存在だけで、第3者がサーバーに侵入できてしまうと理解して良いんですよね。
インターネット経由での遠隔操作でそういう制御をやってる人って
どうやって実現しているんだろう。
インターネットは使わないほうが良いって事なのかしら?
ふ〜、この世界って奥が深いのですね。どーしよ。
0380名無し ◆Rr5/ytdE
02/03/15 00:36ID:YznOuxlhこのBBSをhttp://netfirms.com/の
無料鯖に置くにはどうしたらいいですか?
cgi-binに画像ファイルが置けないのでこれでファイルをアップしても
保存できないのです。他の場合でもどう対処したらよいでしょうか?
お願いします。
0381名無し#
02/03/15 01:37ID:???0382nobodyさん
02/03/15 07:16ID:???ミミ彡ミミミ彡彡ミミミミ
,,彡彡彡ミミミ彡彡彡彡彡彡
ミミ彡彡゙゙゙゙゙""""""""ヾ彡彡彡
ミミ彡゙ ミミ彡彡
ミミ彡゙ _ _ ミミミ彡
ミミ彡 '´ ̄ヽ '´ ̄` ,|ミミ彡
ミミ彡  ゚̄ ̄' 〈 ゚̄ ̄ .|ミミ彡
彡| | |ミ彡
彡| ´-し`) /|ミ|ミ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ゞ| 、,! |ソ < そんなに急ぐなよ道は長い
ヽ '´ ̄ ̄ ̄`ノ / \________
,.|\、 ' /|、
 ̄ ̄| `\.`──'´/ | ̄ ̄`
\ ~\,,/~ /
\/▽\/
0383perlでgzipされたhtmlファイルの作成
02/03/15 11:26ID:2gjP1S/1gzipが/bin/gzipにあります。
CGIでページをgzip化して表示できるので、このデータをそのままHTMLに書き出せたらと思ったのですが。
0384nobodyさん
02/03/15 11:30ID:???cgi-binに画像が置けないのなら別のディレクトリに置けばいいだけの話。
初期設定で画像のおき場所をフルパスで指定すれば良し。
ex:$datafileurl = 'http;//www.2ch.net/imgdir/';
リンク先を見てないのでうまくいかないかも。
■ このスレッドは過去ログ倉庫に格納されています