トップページ⇒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
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/
自分で調べない人って最近多いの?
0237nobodyさん02/10/11 08:01ID:horUUgUp
クッキーを設定しようとしたら
Set-Cookie: YY_CHAT=やました<><><>0<>10; expires=Mon, 09-Dec-2002 22:56:49 GMT
↑がそのまま画面の方に表示されてクッキー保存されないんですよね。
どういったことが原因だか教えてくれる人はいませんでしょうか?
0238nobodyさん02/10/11 08:11ID:???
>>237
ヘッダ終了の空行を出力しちゃった後に
print "Set-Cookie…"を出力した。
0239nobodyさん02/10/11 08:18ID:horUUgUp
>>238さん
返信ありがとうございます。

# クッキーを発行
&set_cookie;

print <<"EOM";
<html>
<head>

このように書き出しているのですが
ヘッダ終了の空行の出力とは
print "Content-type: text/html\n\n";
のことですか?
0240nobodyさん02/10/11 08:34ID:horUUgUp
>>238さん
print "Content-type: text/html\n\n";
が問題だったようです。解決できました。
NPHスクリプトでやってるのですがそれは関係ないのですかね?
binmode(STDOUT);
print "HTTP/1.1 200 OK\r\n";
print "Connection: close\r\n";
を付けるのを忘れていて付けたら解決したので…

ありがとうございました。
0241nobodyさん02/10/11 08:39ID:???
>>233
SSIでincludeっていったら普通<!--#includeのことでしょう
0242nobodyさん02/10/11 10:57ID:???
よくFLASHである、Now Loadingみたいなので
何%ダウンロードしました というメッセージがリアルタイムで表示されますよね。
あれの仕組みはちょっと知らないんですが、それと同じようなことをCGIでやる事可能ですか?
なんかJAVAとかじゃないと出来ないんでしょうか。
0243nobodyさん02/10/11 13:56ID:YuplvdMT
すいません質問です。
携帯サイトで透過GIFを使ってアクセスログを取りたいのですが、CGI側に
print "Content-type:image/gif\n\n";
print `/cgi-bin/ 透過GIF`;←透過GIFのディレクトリ
と書いてもhtml側には□に×と出てしまいます。
透過GIF自体は携帯は対応してるようなんですが・・・どうやれば消せるのでしょうか?
教えてください。
0244nobodyさん02/10/11 14:02ID:???
>print `/cgi-bin/ 透過GIF`;←透過GIFのディレクトリ

・・・
0245nobodyさん02/10/11 14:07ID:YuplvdMT
>>244
検索で調べた際に
print `/bin/cat log.gif`;とあったのですが(こちらも試した)、これは
透過GIFの置いてある場所しょうか?よく分からなかったので>>243
のように書いてみたんですが。
0246nobodyさん02/10/11 14:07ID:d3mMTY3q
掲示板を作ってテストしたらHTTPのヘッダー(?)のような表示が時々出るんです。
出ないときもあります。ひどいときは真っ白なページが表示されるだけ。
でも再読込をするとキチンと表示されます。
どこが原因なのかわかる方いたら教えてください。

HTTP/1.1 200 OK
Date: Fri, 11 Oct 2002 04:57:40 GMT
Server: Apache/1.3.26 (Unix) PHP/4.2.2
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
0247nobodyさん02/10/11 14:11ID:d3mMTY3q
↑246を訂正
掲示板のCGIを書き換えてテストしたら……
すいません。作ってません。作れません。
0248nobodyさん02/10/11 14:17ID:???
CGIにてリンク集のページを作っているんですが
芸能コーナーを作ろうと思い
cgi内に$page[13] = "芸能?";
と記入したのですが
芸能の『能』の字が表示されないのですが
jcodeに対応していないのでしょうか?
また、表示する方法があればご教授ねがいたいのですが。
0249nobodyさん02/10/11 14:20ID:???
$page[13] = "芸能\?";
0250nobodyさん02/10/11 15:10ID:???
厨房が大量に発生している気がするのは漏れだけ?
0251nobodyさん02/10/11 15:20ID:???
>>243
そういえば<FORM ACTION="/sbin/sendmail">とやってもメールが送信されないんですけど。と言った人がいたなぁ。
0252CGI初心者02/10/11 15:23ID:oWAZZFQ5
CGIを使ってとってきた画像を色数落として携帯に送る方法知りませんか。
一度画像を保存してまたとりにいくのではなく、そのまま送りたいのですが。
0253nobodyさん02/10/11 15:26ID:???
>>252
一行目はなんとなくわかるが、二行目とあわせるとなにが言いたいのかわからなくなる。
0254nobodyさん02/10/11 15:34ID:4FavTUhm
<input type=file value="ファイルうp">というタグを利用して
バイナリファイルアップロード用のCGIスクリプトを作ろうと思うのですが、
そのものずばりの勉強ページを教えてください。
できれば既存のCGIと連携させたいので、Perlで書きたいです。
よろしくお願いします。
0255nobodyさん02/10/11 15:37ID:???
Google
0256nobodyさん02/10/11 15:37ID:???
http://tohoho.wakusei.ne.jp/wwwxx034.htm
すみません、数分で自己解決しました。
0257nobodyさん02/10/11 15:37ID:???
うpなどというやつは死ね。
025824302/10/11 15:39ID:Q6IVHh/3
厨房ですいません。
+iモード 透過GIF アクセスログでググっても分からなかったもので
そもそも何でcgiを読みこむのに透過GIFで隠せるのか
カウンタに見せかけてアクセスログ取るのもあるようなんですが、
使ってないのでちょっと分かりません。
0259CGI初心者02/10/11 15:39ID:oWAZZFQ5
>>252
説明不足ですみません。

二行目は、一度保存すれば、携帯から取りにいくのは簡単ですよね。
でもそれだとタイムログが発生しやすいので。

あと、ちなみにこれはi-modeではなくiappliなのでブラウザ上で画像をだすのではないのです。
あくまで、CGIないで画像の処理を終わらせたいのです。
0260nobodyさん02/10/11 15:41ID:???
>>255
そのとおりでした。タグを含めて検索したらみつかりました。
>>257
すみません。調べてみたところ、fileにはvalueが使えないそうです。
正解:
<input type=file>
<input type=submit value="合法ファイルをアップロードする">
0261nobodyさん02/10/11 21:42ID:???
>>255
漏れも>>225で書いてるじゃん。
コテハンの「あ」とかってやつがdefaultハンドル使って書き始めたたしい。
0262たく02/10/12 02:34ID:daDz8sWD
パーミッションのことで質問なのですが、
書き込むというのは・・.cgiのファイル自体を書き換えることができる
ということでよいのですか?
0263nobodyさん02/10/12 02:40ID:???
ったく
0264たく02/10/12 03:42ID:daDz8sWD
書き込むというのは・・.cgiのファイル自体を書き換えることができる
ということであれば
第三者が書き込むことができると設定した場合は、
どうやってCGIのファイルを書き換えるのですか?
普通CGIのファイルはFTPでアップしないといけないと思うのですが
それ以外でどうやれば第三者が書き換えることができるのですか?
第三者はパスワードを知らない。
0265s02/10/12 05:40ID:Qw5zsVmS
http://yahooo.s2.x-beat.com/
0266nobodyさん02/10/12 10:11ID:kb4PH9h0
APACHE設定したー
再起動したー

でも、
CGIがうごかねーーーーーーーーーーーーーーーーー!!!
777なのにパーミッションエラーとかぬかすなーーーーーーー!!!
誰か助けろ!!!タスsヶろ?
0267nobodyさん02/10/12 10:15ID:???
( ´�D`)ノ< がんがってくらはい。
0268nobodyさん02/10/12 12:10ID:???
ENV の REQUEST_METHOD に
"POST" ではなくて "post" とか "Post"
が入ることはあるのでしょうか?
0269nobodyさん02/10/12 12:16ID:???
>>268
大文字しか在り得ない。
小文字でやると、
HTTP/1.1 501 Method Not Implemented
が鯖から帰ってくる。
027026802/10/12 12:51ID:???
>>269
0271268 = 27002/10/12 12:52ID:???
>>269

すいません、途中で送信してしまいました。
ありがとうございました。
0272nobodyさん02/10/12 14:13ID:???
>>268
たしかあったような気がするが・・・
0273 02/10/12 14:30ID:snVYyJdd
ずるぼんアプロダってwindows系サーバーでも動作しますか?
自宅サーバなんだけど、投稿が出来ないみたいなんですが・・・。
0274nobodyさん02/10/12 14:34ID:???
>>273
つくったヤシに聞け
■ このスレッドは過去ログ倉庫に格納されています