トップページ⇒php
1001コメント328KB

CGIだけど、なんか質問ある? Part 8

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/09/22 23:15ID:???
CGIの運用に関する質問スレッドです。

※CGIは特定の言語に依存するものではありません。

※Perlのコーディングに関する質問は専用スレがありますのでそちらでお願いします。
  ↓
  Perl 初心者コーナー Part16
  http://pc.2ch.net/test/read.cgi/php/1032070299/l50

過去ログ・関連スレッドは >>2
0136nobodyさん02/10/07 13:45ID:???
>>133
漏れはできるぞ
0137133==13402/10/07 13:47ID:???
>>136
じらさないでおせえれ。
教えてくださいませ。
0138nobodyさん02/10/07 14:15ID:???
検索条件の例は?
0139133==13402/10/07 14:47ID:???
>>138
あっ、すません。日本語(euc-jpあたり)で1語ていいっす。
0140133==13402/10/07 14:53ID:???
そいで、その単語の入っている文を抜く。「。」から「。」まで。
0141133==13402/10/07 16:25ID:???
>>133につきましては、解決いたしました。(初心者スレで)
貴重なスレスペースを汚しまして、失礼いたしました。
0142nobodyさん02/10/07 23:19ID:jF69Rk9S
cgi初心者です。
ttp://www.*******.com
にアクセスすると、OS別に(index.html)や(/i/index.html)に自動でジャンプするcgi等はありますか?
情報キボーン
0143nobodyさん02/10/07 23:31ID:???
>>142
キミなんかカコワルイね
0144nobodyさん02/10/07 23:45ID:jF69Rk9S
age
0145nobodyさん02/10/07 23:48ID:???
>>142=>>144 きみまだいるのか・・・

UAで振り分ければ?
0146nobodyさん02/10/08 11:33ID:???
>>142,144
mod_rewrite。これ最強。
しかしこれを頼むと次から店員にマークされるという危険も伴う、諸刃の剣。
cgi初心者にはお薦め出来ない。
まあお前、ドcgi初心者は、HTTP_USER_AGENTでも食ってなさいってこった。
0147nobodyさん02/10/08 15:17ID:???
>>146 センスが全く感じられないのは俺だけじゃないはず。
0148nobodyさん02/10/09 13:12ID:???
「CGIの運用に関する質問スレッドです。」と書かれているのでスレ違いかもしれませんが・・・・

今はCGIといえばPerlですよね。
CGIが開発された当初はどのような言語がよく使われていたんですか?
C言語ですか?
014914602/10/09 13:34ID:???
>>147
コテハン晒さないでよかったぽ。

>>148
sh かね。
0150nobodyさん02/10/09 14:15ID:???
>>148
CGI を実装したのって NCSA httpd 1.0 が最初でいいんだっけ?
ttp://hoohoo.ncsa.uiuc.edu/docs/Upgrade.html

リリースされた正確な年月日が分からんが、
ttp://www.webhistory.org/www.lists/www-talk.1993q4/0811.html
1993年末って事でいいんだろうか。

その時既に Perl は 4 から 5 への移行期だ。
ttp://www.perldoc.com/perl5.6/pod/perlhist.html

なら最初から Perl 使ってた人も多いんじゃない?
015115102/10/09 17:33ID:c2qNWBgI
今でもC言語使ってますが、マズイすか?
0152nobodyさん02/10/09 19:06ID:uuWUlWUQ
>>142
初心者ならCGIからJavascriptの道へ転進したらいい
0153Perl初心者スレ84502/10/09 19:13ID:1+Y7R6lC
Perlスレで質問したら、こちらのスレに行くように
勧められたんでこちらに書き直します。
CGI.pm を使ってCGIを書いているのですが、

my $query = new CGI;
my $value = $query->param("text");

print
  $query->header
  (
    -type=>'text/html; charset=euc-jp'
  ),
  $query->start_html
  (
    -title=>"値の表示",
    -lang=>'ja'
  ),
  $query->h1($value . "の値"),
  $query->end_html;

として$valueを取得して表示する場合、
文字コードの扱いはどうなるんでしょう?

自分は、クライアント環境のコードがそのまま
飛んでくるだろうと考えていたのですが、
UNIX上のブラウザから試してもWindows上のブラウザから
試しても化けずに表示されました。

もしかして、CGI.pm は適切に文字コードを変換するところまで
やってくれているのですか?

0154nobodyさん02/10/09 19:30ID:???
>>153
OSに関係なく多くのブラウザが、ページがShift_JISならShift_JISで、EUC-JPならEUC-JPで送信すると思うけど・・・
0155nobodyさん02/10/09 19:49ID:???
アクセスしてきたアドレスが「....test.cgi?name=mona&msg=age」
となっているとき、monaやageは、どうやって取得したらよいの
でしょうか?
015615402/10/09 19:53ID:???
>>153
とりあえずNetscape7.0(Linux)では>>154で言ったとおりだった。

>>155
getenv()などで環境変数QUERY_STRINGを参照。
0157nobodyさん02/10/09 20:03ID:???
>>156
ヒントありがとうございました。
助かりました。
0158nobodyさん02/10/09 20:04ID:???
>>153
Use the source, Luke!
0159nobodyさん02/10/09 20:05ID:???
>>155に似た質問なんですが、ブラウザに直接「....test.cgi?name=mona&msg=age」
を入力してきたユーザと、正式にフォームのボタンをクリックしたユーザを
見分けて処理することはできるのでしょうか?
0160nobodyさん02/10/09 20:19ID:???
>>159
環境変数HTTP_REFERERを見れば判別できるかもしれないが、それはクライアントが送るものだから信用できないといえば信用できない。
0161nobodyさん02/10/09 20:22ID:???
>>160
なるほど!とりあえずいろいろやってみます。
016215302/10/09 21:16ID:???
>>154
なるほど。この場合は
  $query->header
  (
    -type=>'text/html; charset=euc-jp'
  ),
とやって、Content-Type ヘッダが

Content-Type: text/html; charset=euc-jp

となるようにしているためにEUC-JPでかえってきている
っつーことですか。
ありがとうございます。
0163nobodyさん02/10/09 21:26ID:???
>>155
すぐ上(>>153)にやり方が上がってるがソレじゃ嫌なのか?
016415502/10/09 21:59ID:???
>>163
Perlじゃないんです。
016516302/10/09 22:34ID:???
>>164
申し訳無い。
>※CGIは特定の言語に依存するものではありません。
の言葉を噛みしめて逝ってきます。


0166nobodyさん02/10/10 00:34ID:???
若干スレ違い(板違い?)かも知れませんがよろしくお願いします。
CGIからあるアドレスにメールを送信したところ
User unknownとなり送信されませんでした。
普通にメーラーからテスト送信すると送信元によって挙動が異なり
送信されたり、User unknownとなったりします。
これはメールサーバのどのような設定が関係していると思われますでしょうか。
よろしくお願いします。
0167名無しさん02/10/10 03:07ID:M5uzoLnQ
今、KENTさんのpostmailを使ってみてるんですが、
フォームに記入したあと「この内容で送信する」を
押すと、Write Error : ./*****.tmp
というエラーが表示されます。(*****の部分は毎回違う数字)

これはどこがいけないんでしょうか?
初心者なんでよろしくお願いします。
0168nobodyさん02/10/10 06:13ID:???
perlのcgi.pmってなんでHTMLタグを出力する命令まであるんでしょう?
絶対直接printで書いたたほうが早いのにどうしてメモリの無駄遣いするかな。
0169ぼるじょあ ◆yBEncckFOU 02/10/10 09:00ID:???
■■■■■■■■■■■■■■ 終了 ■■■■■■■■■■■■■■■■■
0170nobodyさん02/10/10 09:22ID:???
>>167
cgiを置いているディレクトリのパーミッションにその他ユーザに対する書きこみ許可が無いため
cgi(=その他ユーザ)が作る新しい***.tmpファイルを書き込むことが出来ない。
対策
その他に書きこみ許可を与える。



つまりパーミッションを777にしろ。
0171nobodyさん02/10/10 10:05ID:lLciuzr5
cgiプログラムを見る方法って無いですか?
名前に点数をつけますってので自分の名前が
2点だったので少しむかついて。どんなアルゴリズムか知りたいので。

http://www.cc.rim.or.jp/~ksa/cgiland/namae.html
0172nobodyさん02/10/10 10:11ID:???
>>165
君が逝く必要は無いじゃないか。
使用言語を書いていない>>155が悪いのだから。
0173nobodyさん02/10/10 10:12ID:???
>>171
作者に聞きなさい。
0174nobodyさん02/10/10 10:14ID:hlW8Speq
すいません。教えて下さい。perlだとcgiが動くのに
Cだと動きません。昨日まで動いていたCGiなのでソースが間違ってることは
ありません。
昨日、サーバーの設定をいじったら動かなくなりました。
どなたかご存知ないでしょうか?
お願いします。
0175nobodyさん02/10/10 10:49ID:???
>>174
サーバ上でコンパイルしなおしても動かないか?
017617502/10/10 10:52ID:???
>>174
もしかして、サーバソフトがAN HTTPdだったりする?
あれは設定によっては問答無用でプログラムを(たとえば)Perlに渡すようになるよ。
つまり、コンパイル済みのバイナリをPerlに渡してエラーと・・・・

以前、プログラム板のCスレッドでそういう状況におかれた人がいたよ。
017717402/10/10 10:53ID:hlW8Speq
ローカルでコンパイルしたものをあげています。IISなので。
昨日まではそれで動いていたのですが、POST送信を受け付けないため
いろいろといじったらエラー表示になってしまいました。
どうしたら直るのか、またCで動かす場合にはそういう設定が必要だった事を
知らなかったので激しく後悔しております。。。
0178nobodyさん02/10/10 11:39ID:???
>>174
実行権がスクリプトのみになってるとかじゃないの
017917802/10/10 11:41ID:???
>>174
拡張子は.exeですよね。
018017402/10/10 11:48ID:hlW8Speq
実行権はスクリプト及び実行可能ファイルになっています

拡張子は.cgiです。exeだと動くのですが、気に入らないので.cgiで使ってました
もしかして.exeで使わないといけないんですか?昨日は.cgiでも
動いたのですが…
0181nobodyさん02/10/10 12:24ID:e9euvxTv
iputのcheckboxのvalueの初期値ってどなたかご存じないですか?
0182nobodyさん02/10/10 12:57ID:???
>>181
規定は無いんじゃないかな。
IEとネットスケープは 'on' になってるけどちゃんとvalue=で指定しといた方が良いと思うよ
0183nobodyさん02/10/10 13:42ID:???
<form>の、<textarea>の部分に入力したテキスト文章の
取得はどうやればよいのでしょうか?
0184nobodyさん02/10/10 13:43ID:???
いつもどおりやればよし
0185nobodyさん02/10/10 13:51ID:???
>>181
HTML 4.01 では type="checkbox" の時 value 属性は
省略不可のようだが。
ttp://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html#edef-INPUT
省略不可 = 初期値は UA 依存だろうな。
0186nobodyさん02/10/10 13:51ID:???
具体的なコードを教えて欲しい。
$access=$ENV{'QUERY_STRING'};
じゃ、取得できなかった。
0187nobodyさん02/10/10 13:54ID:???
<form>の、<textarea>の部分に入力したテキスト文章の
取得はどうやればよいのでしょうか?

$access=$ENV{'QUERY_STRING'};
では取得できなかったわけなのだが、、、
018817802/10/10 13:58ID:???
>>174
.cgiで動いていたということは今まで.cgiにmapping(関連付け)がされていなかったということですね。
動かなくなったのは.cgiの拡張子をperl.exeかなんかにmappingしたからじゃないでしょうか。
”C"のcgi用とその他cgi用にそれぞれ仮想フォルダを作ってmappingを別々にすればいいんじゃないかな。
018917802/10/10 14:02ID:???
>>186
method="POST"を削除しる。
またはmethod="GET"に書き直す。
0190nobodyさん02/10/10 14:14ID:???
>>189
やってみます。
0191nobodyさん02/10/10 14:52ID:JYC0+kzs
>>168
HTMLタグの出力まで CGI.pm が面倒見てくれるおかげで
PerlのソースがHTMLタグに侵食されずに済むんじゃないか。
タグをソースに直でうめこんでいったあげくに、
ヒアドキュメントとか使っちゃたりすると悲惨だぞ。
どんどんソースが醜くなっていく。
019217802/10/10 14:53ID:???
GETだと255文字までしか送れないからね。
0193nobodyさん02/10/10 14:53ID:hlW8Speq
>>188
うわぁその通りでした。ありがとうございます。
でも、疑問なのですがIISでPOSTとかGETって選択できないのでしょうか?
他のサーバーソフトは出来るのに…
こういうのがIISが使われない理由ですか?
0194nobodyさん02/10/10 14:58ID:???
%82%A0%82%A2%82%A4%82%A6%82%A8%0D%0A
↑
「あいうえお」と入力したらこのようなもじになってしまったのですが、
これを「あいうえお」に戻すにはどうしたらよいのでしょうか?
0195nobodyさん02/10/10 15:07ID:???
>>194
ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Escape
0196nobodyさん02/10/10 15:10ID:???
>>195
うまくいけました。
ついでに役に立ちそうなサイトまで教えていただいて
ありがとうございました。
0197nobodyさん02/10/10 15:12ID:???
>>194
まず、+を半角スペースに置き換える。
次に%のあとの二文字を16進数字列とみなして数値におきかえる。
0198nobodyさん02/10/10 15:15ID:???
>>195
その方法は完全じゃないと思う・・・
$str=~tr/+/ /を忘れているよ。
0199nobodyさん02/10/10 15:18ID:???
>>193
IISでCGIを使おうとする特異なあなたが悪い。
020019402/10/10 15:18ID:???
じゃあ、結論は
$str=~tr/+/ /;
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;
とするということでよろしいのでしょうか?
0201nobodyさん02/10/10 15:19ID:???
>>200
よろしいも何も、>>194 の解説を最後まで読んだか?
020220102/10/10 15:20ID:???
s/194/195/
0203nobodyさん02/10/10 15:21ID:???
改行コードの処理において質問があります。

<form>の<textarea>で取得した文字列をファイルに書き込んでいると、
改行コードが無駄に1つずつ多くなっています。
この問題を解決するにはどうしたらよいのでしょうか?
$str =~ tr/\x0D\x0A//d;
これを書いたりすると、全ての改行コードが消えてしまうのですが、
それでは駄目なんですよね。
0204nobodyさん02/10/10 15:23ID:???
>>203
CRLFをLFに置き換えて、CRをLFに置き換えればいいんじゃないの?
0205nobodyさん02/10/10 15:25ID:???
>>203
ttp://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
0206nobodyさん02/10/10 15:29ID:???
なんで\r\nとかかないんだろう。
020717802/10/10 15:43ID:???
>>206
>>205ということだそうです。
自分もずっと\r\nって書いてました。ていうかMacのhttpサーバってあるの。
0208ghj02/10/10 15:49ID:W9t6/tYv
[email protected]
このメールアドレスにウイルスでも送れ!!
020920302/10/10 15:52ID:???
>>205
ここの人ってとても親切なんですね。
ありがとうございました!!!
0210nobodyさん02/10/10 15:52ID:???
>>201
(^^;
0211181です02/10/10 17:20ID:???
どうもありがとうございます
指定は無かったのでどうやって受け取ろうと思っていたのです。
UA次第と言うことはonでいいのかな。
021217802/10/10 18:09ID:???
>>193
POSTを受け取るにはCのソースを書き直さないとダメなのではないでしょうか。
0213名無しさん02/10/10 18:44ID:GPH/xVcD
167です。
>>170さん、ありがとうございます。
指摘通りに設定したら送信することができました。

でも「すべてを許可(777)」にするのはセキュリティ上、少々危険と書いてあるの
ですが、大丈夫なのでしょうか?
0214nobodyさん02/10/10 18:57ID:UnVw6+XJ
>>213
共有サーバだったら他のユーザからCGIを使っていたずらされる危険性はあります。
そのため多くのレンタルサーバが、CGIを所有者権限で実行するようになって来ています。
0215nobodyさん02/10/10 19:29ID:???
>>206
\n が 0x0A だったり,0x0D0x0A だったりするからでしょ?
0216名無しさん02/10/10 19:54ID:GPH/xVcD
では、パーミッションを777にしなければメールを送信できない、現在 私が使ってる
サーバは危険という事ですね。

私はメール送信フォームでcgiを使っているのですが、このパーミッションの設定は
メール送信フォーム特有というよりも、サーバ側の問題ということでよろしいでしょうか?
0217nobodyさん02/10/10 20:23ID:???
>>216
三番目に悪いのは、CGIプログラムが中途半端な
権限で動くよう設定されているサーバ。

二番目に悪いのは、作業ファイルをプログラム本体と
同じディレクトリに作ろうとする postmail.cgi 。

一番悪いのは、与えられた環境で最良の方法を
考えようとしない人。
0218初心者まーくん02/10/10 20:32ID:7MoYhVdn
あのー、
”会場”という漢字が、変数$place内に含まれているか
をチェックするのって、perlで、どうやるのでしょう?
jperlでなく、perl 5.0Xです。

if( $place =~ /kaijyou/ ) {
 .....
}

のkaijyouが"会場"であって欲しいのですが。


0219あ02/10/10 20:35ID:Rtf9aPMO
TripodでアクセスログのCGIをアップロードして
http://cgi.tripod.co.jp/member_name/cgi-bin/****.cgi
にアクセスしたら次のようになってしまいました。
ちゃんと説明どおりにアップロードしたのでもうどうしたらいいかわかりません。
なぜこのようになってしまうのでしょうか?
ご教授お願いします。

以下のエラーが発生しています。
Your script produced this error:
(Maybe you didn't strip carriage returns after a network transfer?)
0220nobodyさん02/10/10 20:49ID:UnVw6+XJ
>>219
ascii mode ka text mode de upload siru
0221nobodyさん02/10/10 21:12ID:???
>>218
if($place =~ /会場/)
/\Q会場\E/ の方が汎用性は上がるが。

if(index($place,'会場') > -1)
のが速いが。
0222初心者まーくん02/10/10 21:29ID:7MoYhVdn
>>221
jperlでなくても、コードをeucにしておけば
perlで動作するのでしょうか?221のコードは?
0223あ02/10/10 21:40ID:Rtf9aPMO
>>220
一応アスキーとバイナリーモードを
ファイルによって変えました。
ところでテキストモードって何ですか?

ascii mode ka text mode de upload siru
0224nobodyさん02/10/10 21:59ID:???
>>223
アスキー=テキスト
Macのfetchではテキストモードと呼んでます。
0225nobodyさん02/10/10 22:56ID:???
>>166
それは、そのサーバーが時々ダウンしている。おそらく、ADSL接続
かなんかで接続を切ったり繋いだりしているhome Serverだな。

#何やねんこのスレ。1日見なかったら普段の100倍の書き込みが
#あるがな。どうしちゃったの?
0226あ02/10/10 23:37ID:Rtf9aPMO
TripodってCGIファイルの1行目のPerlのパスって
設定不要ですよね?
0227nobodyさん02/10/10 23:47ID:???
試せば?
0228あ02/10/10 23:58ID:Rtf9aPMO
自分は219なのですが、いろいろ試しまくっているのですが
わからないのです。
ダウンロードしたCGIの説明のページを見ると
1行目のPerlのパス、パーミッションを正しく設定する。
ダウンロードしたファイルをアスキー、バイナリーでアップする。
ってあるのでやってみたのですがなぜかできません。
Tripodは1行目のPerlのパス、パーミッション設定不要とあったのですが、
ここをいじったりしたほうがいいのかなと思って聞いてみました。
0229あ02/10/11 00:14ID:PQAg8rHh
助けて・・・
0230nobodyさん02/10/11 00:34ID:ZG/BpU41
逝けよ
逝ってみろ
逝ってみれば分かるさ
迷わず逝け!
0231nobodyさん02/10/11 01:09ID:7TLGC75k
ssiを使いincludeで外部ファイルを読み込んで
1つのファイルにまとめるようなことを
perlのopen関数でやろうとしたのですが、
うまく外部ファイルを読み込んでくれません。
タグとかがあるとダメなんでしょうか?
0232nobodyさん02/10/11 05:02ID:???
>>219
英語が読めないの?
windowsだかDOSだかMacの改行コードをunixの改行コードに
変えなされ。
一行目の#!/usr/bin/perlみたいなのは残しておいても
まったく関係なし。
0233nobodyさん02/10/11 05:03ID:???
>>231
>ssiを使いincludeで外部ファイルを読み込んで
まず、ssiとは書かずSSIと書きます。
>includeで外部ファイルを読み込んで
「Cを使っていますが、includeで外部のヘッダーファイルを読み込んで」
なら分かりますが・・・
>perlのopen関数でやろうとしたのですが
>うまく外部ファイルを読み込んでくれません。
さきほどは、ssiでincludeで読み込んだのではありませんか?
perlにCを組み込んだのですか?
>タグとかがあるとダメなんでしょうか?
どんなタグですか。htmlファイルのタグは、まったく関係ないです。
0234あ02/10/11 06:11ID:PQAg8rHh
FTP Explorerでパーミッションの変更ってどうやるのですか?
ファイルやフォルダを右クリックしたら、
「属性変更」とか「アクセス権変更」とかあるはずらしいのですが、
ありませんでした。
0235nobodyさん02/10/11 07:38ID:???
>>234
>>232でおまえの質問に答えてるのに反応なし。
こういうヤシはみんなで無視しる。
0236nobodyさん02/10/11 07:55ID:???
http://www.google.com/intl/ja/
自分で調べない人って最近多いの?
■ このスレッドは過去ログ倉庫に格納されています