CGIだけどなんか質問ある Pert 5.01
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/03 12:49ID:673UxTI50237nobodyさん
02/03/06 07:01ID:CkyOD57Tもっと詳しく書いてやれYO!
0238nobodyさん
02/03/06 10:32ID:CkyOD57T0239ぷうすけ
02/03/06 11:05ID:qVBo2uea$ret=mkdir($fname,0777);
perlのcgiプログラム内にて、ディレクトリを上記の方法で作成して、その
中にデータファイルを作成する、というようなことをやろうとしています。
Webブラウザからのアクセスにより、上記の文は実行され、ディレクトリは作
成されます。$retには成功の1が返っていますが、実際のパーミッションは
755となっています。これは、サーバの設定のせいなのでしょうか?または、
なにかプログラム的に対策が取れますか?なお、cgiの置いてあるディレクト
リのパーミッションは777になっています。
0240nobodyさん
02/03/06 13:41ID:???多分サーバーの設定だろう。
詳しくは俺もよく知らんが、perldoc -f umask が参考になるかもしれない。
等と適当な事を逝ってみる。
0241nobodyさん
02/03/06 14:34ID:???ユーザーの入力を格納した %hoge と %foo で5,6列目を上書きし、
write.txtに保存したいです。
以下のように配列 @temp を一時利用したコードを書いたところ、
\tでjoinしたにも関わらず、タブ文字でなく「\t」を区切り文字に連結されました。
つまり、
print "@temp[0]\\t@temp[1]\\t@temp[2]\\t 〜 @temp[8]\\t\\n";
を実行した時と同じ結果になりました。
望む結果を得るにはどうしたらいいのでしょうか?
$counter=0;
open READ, "read.txt";
open WRITE, "+>write.txt";
while ($input = <READ>){
$counter++;
@temp = split (/\t/,$input);
@temp[5] = $hoge{$counter};
@temp[6] = $foo{$counter};
print WRITE join('\t',@temp) ;
}
close READ;
close WRITE;
0242nobodyさん
02/03/06 14:42ID:???'\t'
"\t"
この二つの違いはわかるかい?
0243242
02/03/06 14:50ID:???てかそれだけヒントをもらえれば自分で調べます。
0244nobodyさん
02/03/06 14:56ID:???君は241だろ。(w
まぁ、がんばれ。
頑張って無理だったらここを見ろ。
ttp://tohoho.wakusei.ne.jp/wwwperl1.htm#String
ttp://tohoho.wakusei.ne.jp/wwwperl1.htm#Esc
0245243
02/03/06 18:46ID:???024675とか
02/03/07 00:36ID:???&jcode::convert(\$value,"euc","","z");
これが動作してませんでした。第3引数がダメなようですが、何故でしょう??
それから、sjis用対策をいろいろ教わりましたが、例えば、発言者名が全部半角カナだと
getcodeの返り値がundefなので文字化け対策の部分は全部素通りしてたのでした。
実際携帯から書き込む人は何故か名前を全部半角カナで書く人が多いし、
本文も全部半角カナで書かれても困るので、フォームから漢字一文字をこっそり送って
その漢字コードに全部合わせることにしました。
若干不明な点を残しつつも文字化けにおびえる日々からは開放されました..。
0247nobodyさん
02/03/07 06:17ID:WTUe3Qf10248ぷうすけ
02/03/07 17:26ID:+Mtxnc4D<input type=password name='pass' size=8 maxlength=8>
<input type=submit name='button' value='認証'>
<input type=hidden name='data' value='hoge'>
</form>
perlのCGIにて、このようなHTMLを出力して、パスワードを
入力させようとしています。テストはWin2000 + IE5.5です。
パスワード用のテキストボックスにパスワードを入力して、
「認証」ボタンをマウスでクリックすると、正しく3つの要素が
QUERYとして送信されます。しかし、キーボードでEnterを押したり、
スペースバーでボタンを押したような場合、
name='button' value='認証'
の情報が、まったく送信されません。どうしてこのようなことに
なるのでしょうか?
最後に、ありがとうございました。>240さん
助かりました。
0249nobodyさん
02/03/07 17:31ID:???認証を押してないから。
0250ぷうすけ
02/03/07 18:08ID:+Mtxnc4D押したYO!!
0251nobodyさん
02/03/07 18:19ID:???0252nobodyさん
02/03/07 20:08ID:???submitタイプにname属性はありません。
つーか、パスワードをGETで送るな。
0255nobodyさん
02/03/07 20:48ID:???俺はWin2k+IE5.5SP2でちゃんと送れる。
マウスクリック、スペースキー、エンターキー全て正常に送れた。
0256nobodyさん
02/03/07 21:01ID:???0257nobodyさん
02/03/07 23:26ID:???0258nobodyさん
02/03/07 23:51ID:???やってみたらテキストフィールドでのEnterだけ入らなかった。
スペースでもEnterでも、ボタンを押せば送られる、という事かな。
ついでに、<input type="button" name="button" value="認証"> だと何やっても送られなかった。
仕様なのかな。
0259258
02/03/07 23:53ID:???でした。
0260nobodyさん
02/03/08 00:57ID:???0261nobodyさん
02/03/08 01:13ID:???板違い
0262nobodyさん
02/03/08 09:05ID:???0264相撲車
02/03/08 09:39ID:ol/NmE/5CGIをperlで書いて、実験には成功したけど、これ設置したら不正アクセス禁止法に
触れますか?
取り合えず、プロバの契約内容には言及してなかったんだけど。
0265nobodyさん
02/03/08 09:43ID:???法律勉強しな。
一応それはsendmailで第三者中継させるのと大して変わらないね。
後、一般に自分のSMTPのアカウント晒して大丈夫なのか?と。
0266相撲車
02/03/08 09:44ID:ol/NmE/5だったため。大目に見て欲しいのですが、どうなんでしょうか…。
0268262
02/03/08 09:47ID:???~ s/(\W)/'%' . unpack('H2', $1)/eg;
ってやったらうまくいきました
0269相撲車
02/03/08 09:53ID:???即レスありがとうございます。
法律の概要には目を通してみましたが、サービスの範囲内の利用と思えた
ので使用してみました。法律本文を見ないとダメなんですかね?
mail from:プロバの自分のメアド
と書いておけばいいんでしょうか?
ちなみに、smtpサーバはなぜか認証要りませんでした。そして、メールは
自鯖へアクセスしてきた人がメンバー登録したときのパスワード送信用と
いう利用目的なので、設置したとしても利用者は内容を編集できないです。
そんなのでも危ないでしょうか?
0271nobodyさん
02/03/08 10:56ID:inegq+pM現在の@LINESに格納されている文字列全体が何バイトなのかを
知る方法ってないものでしょうか?
0272nobodyさん
02/03/08 11:08ID:???好きな方法を使えや。
1.
$size = length join "", @LINE;
2.
$size = 0;
$size += length for @LINE;
0273相撲車
02/03/08 19:39ID:ol/NmE/5意味がわからず、ネット中を転々…。
どこか有効な解説サイトご存知の方、教えてはくださらぬか?
DNSの役割はわかるけど、細かい用語が意味不明という程度の知識です。無いに
等しいです。
0274nobodyさん
02/03/08 20:50ID:JBnFAxe6いかないのですが、UserIDとPassをcsv or tabで管理するので、
それを一括で登録するだけのcgiってありますか?
0276相撲車
02/03/08 23:39ID:XJfzC2SF忠告どうもです。
でも、仕組み理解っていってもキリが無いと思うのですが、どの程度把握しておけ
ばいいのですか?普段全く使っていない頭をどうにか使いたいのですが。
昨晩から、ずっと悩んでいた問題は結局MXレコード記録してくれないDNSに登録して
いてもAレコード参照してくれるということで解決したっぽいです。そして現在Postfis
が動かないという問題に直面。
まぁ、オレみたいな厨は家庭内LANで実験でもしてからWANに繋げろ、ということで。
0277相撲車
02/03/08 23:42ID:???0278nobodyさん
02/03/09 14:09ID:qqwIDSpw配布しているCGIのデザインを変えたり、とかはあるんですが最初から作ったことが無いのです。
とりあえず掲示板やアクセスカウンタなどを作りたいのですが・・
KENTと作ろうPerlでCGI はどうでしょうか?
0284初心者
02/03/09 19:43ID:q9DQVSy0HTMLのinput type="text"
name="data0","data1","data2",..."dataX"までの入力データを
ループで処理したいのですが
$iがループするとして
$ran = "data$i";
$length = (length($in{"$ran"}));
$lengthが文字数をとってくれないのですが、おかしいところありますか。
0285nobodyさん
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:???■ このスレッドは過去ログ倉庫に格納されています