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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/07/06 13:41ID:Mpxtn4bk
CGIの運用に関する質問スレッドです。

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

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

過去ログ・関連スレッドは >>2
0751nobodyさん02/08/29 01:17ID:???
>>750
抜き出すのが「かきくけこ」ってわかってるんだから抜き出す必要もなかろう。
0752nobodyさん02/08/29 01:28ID:???
いや、750はあくまでも例です。
本当は抜き出す部分が何であるかは事前にわかりません。
0753nobodyさん02/08/29 01:34ID:???
>752
じゃあ、「あいうえお」の部分に「◆keyword1」と入れられたり、
「さしすせそ」の部分に「keyword2◆」と入れられたらどうするの?
0754nobodyさん02/08/29 01:40ID:???
いや、それはないものと仮定してください。
0755nobodyさん02/08/29 01:43ID:???
>754
なぜないと言い切れるのか。
そういう考えがセキュリティホールを生み出したりすると思うのだが。
絶対にないと言うなら、正規表現でも使えば?(Perlの場合)
0756nobodyさん02/08/29 01:44ID:???
「◆keyword1◆」と「◆keyword2◆」って、複数ペア存在するかどうかぐらい
書きなよ
0757nobodyさん02/08/29 01:46ID:???
べつにセキュリティに関わるような重大なものじゃないんで…
正規表現使うとどうなりますかね?
0758nobodyさん02/08/29 01:50ID:???
>757
そういう気持ちに問題があるっての。
あんたのCGIのせいで、同じサーバーのほかの人間が迷惑被る可能性だってあるんだよ。
0759nobodyさん02/08/29 01:51ID:???
もちろんありえないことはないのはわかっています。
サーバーにアップする前にはちゃんと対策します。
0760nobodyさん02/08/29 03:16ID:???
簡単に書くならこうか?
($hoge) = $a =~ /◆keyword1◆(.*?)◆keyword2◆/;

substr使った方が倍以上速いけど
$b = index($a,'◆keyword1◆'+1,index($a,'◆'));
$hoge = substr($a,$b+3,rindex($a,'◆keyword2◆')-$b-3);
0761nobodyさん02/08/29 03:48ID:???
>>760
すごいです。ありがとうございます。$aには\nも含まれるので、/s;にして無事うまくいきました。
しかしやはりsubstrの方がやや速かったです。
076276002/08/29 04:17ID:???
>>761
上の例だと2倍チョイだけど、抜き出す文字列が長くなれば速度差は
数十倍以上になったりするからね

つってもループ外で使うなら気にするほどの差じゃ無いので
自分が分かりやすい方を書いた方が後々良いかもしれん
0763nobodyさん02/08/30 11:23ID:w917hCw/
和鳥ってうpろだ設置ムリなのかな?

cgi-binにしかスクリプト置けなくて、そのスクリプトは
members.tripod.co.jp/垢/cgi-bin/スクリプト名
では読めず、
cgi.tripod.co.jp/垢/cgi-bin/スクリプト名
でしか読めない。
で、cgi.tripod.co.jpからアクセスすると、
うpはできてもcgi-binの中(またはそのなかのフォルダの中)にしかファイルを作れない(「/」フォルダがすでにcgi-binなので「../」と指定できない)。

すると、うpしたファイルを落とすとき、
members.tripodからはcgi-binにアクセス権がなく、
cgi-tripodからは拡張子がcgiのファイルしか直接読めない。

なんかいい方法ないかな。
0764nobodyさん02/08/30 12:37ID:???
netfirms以上の腐った仕様ですのね。
欧鳥みたいに php+MySQLが一番なんだが
#最近jp弾きするようになったのは誰のせい?
0765nobodyさん02/08/31 01:51ID:3XHp94dS
http://www.benricgi.com/bbs/egg/h/170181/takayo-g.htm
[10] Re:お疲れサンタマルタ♪  HOME 2002/8/30(Fri)
22:46:37-taka-管理人さん(ZONE幼稚園)

この書き込みで
次のからはウイルスが勝手に飛んだりパス解こうとすると・・・
って感じにするから大丈夫。
って(汗

CGIにそんなことが可能なんでしょうか?
どうやってウィルス飛ばすんでしょうか?
0766nobodyさん02/08/31 04:45ID:???
>>763
binmodeで吐いても駄目?
0767宣伝隊No.402/08/31 08:07ID:qEuEjGno
http://cgikoza.s12.xrea.com/2chbbs/
最大限に2chのパワーを引き出した掲示板が
今、見参!!
0768nobodyさん02/08/31 10:34ID:???
>>767
知り合いよ、頼むから恥ずかしいことせんといてくれ・・・
めちゃYY2chそのものじゃないか。。。
0769nobodyさん02/08/31 21:25ID:9CUDh78M
apacheのインデックスリストが使えないんで
perlで似たようなもの作ろうと思うんですが>index.cgiにして置く予定
誰か似たようなスクリプト作ってませんか?
0770nobodyさん02/08/31 21:36ID:???
>>769
ディレクトリ内のファイル全部リンクして表示すりゃいいだけじゃないの?
0771nobodyさん02/09/01 04:48ID:nhMd50K5
C掲示板やアンケートなどでフォームの情報の転送を
ボタンで行うとき、そのページ内で再リロードしますよね?
それの情報を別ウインドウに送るにはどうすればいいのでしょうか?
0772nobodyさん02/09/01 06:23ID:???
>>771
js。板違い
077376902/09/01 10:28ID:2Mci4oQX
>>770
まぁ そうなんですけど
ファイル上げるたびに更新するのめんどいんで
動的にやってくれるやつがないかなって
0774nobodyさん02/09/01 10:35ID:???
>>773
.htaccess 使えないの?
077576902/09/01 11:11ID:2Mci4oQX
>>774
使えたら苦労はしないっす。
CGIだけは使えるのでそれでどうにかしようと思ってます。
0776nobodyさん02/09/01 11:26ID:???
>>775
もっと具体的に、どういう環境なの?
077776902/09/01 11:34ID:2Mci4oQX
無料のサーバーで
apache1.3.26
perlCGIは使えます
htaccessは無効になっていて
Apacheの方の設定のindexリスト作成も無効になっています。
0778nobodyさん02/09/01 12:02ID:???
>771
<form action"..." target="...">
とかいう問題じゃないよね?
0779nobodyさん02/09/01 12:10ID:???
>>777
どこの鯖?
0780nobodyさん02/09/01 12:17ID:???
>>777
glob使えばいいんじゃねの?
0781nobodyさん02/09/01 12:18ID:???
>778(自己レス)
action「=」が抜けてた。
鬱死。
0782nobodyさん02/09/01 12:20ID:???
>>780
こういうのは軽いほうがいいからopendirのほうがまだいいだろ
0783nobodyさん02/09/01 13:33ID:???
CGIの運用に関する質問とは言い難いかも知れないが。

CGIって言葉の意味ってどんなもんでしょう。
「デジタル用語辞典」とかに載ってる様な、「HTMLでは実現できない云々」
とか言う方はわかるんですが、

「PHPはCGIより速い」
という場合の「CGI」の意味がちょっとわからんす。
先ほどの定義ではPHPとかもCGIなような気がするんで。
もしかしてこういう場合は、
mod_phpとかmod_perlに対して、mod_cgiという意味で使っているのでしょうか?
078478302/09/01 14:21ID:???
いちおーあげとくんべか。
0785nobodyさん02/09/01 15:18ID:???
>783
>「PHPはCGIより速い」
こんな馬鹿なこと言ったの誰だ?
0786nobodyさん02/09/01 16:33ID:???
CGI=CommonGatewayInterface
CGIは言語ではなく技術を総称した言い方
>>783の「PHPはCGIより速い」っていった人はCGI=Perl言語と勘違いしてるだけ
0787どうでもいいが02/09/01 18:13ID:???
>>786
「PHPはPerlより速い」っていうのもどうかと思う。
いや、もちろん>>783の引用元がアホなだけなんだが。
078878302/09/01 19:08ID:???
えーと、なんか誤解(かどうか自信無いですが)かもしれないんで、

http://pc.2ch.net/test/read.cgi/php/1005122528/46-47n
例えばこういう使い方での「CGI」って言葉の意味です。
078978302/09/01 19:17ID:???
またsageで書いちまったage

>>788リンク先みたいな場面だと普通にCGI <-> mod_perlがどうこうなどと書いてあんですよね。
0790nobodyさん02/09/01 19:32ID:???
>788
それはmod_perlの命令の一つに「CGI」というのがあるだけと思われ。
0791<>02/09/01 20:55ID:8fmb+fu6
ttp://members.tripod.co.jp/rps/tips/tips15.html
ここに、

半角→全角
tr/A-Za-z0-9/A-Za-z0-9/;
その反対
tr/A-Za-z0-9/A-Za-z0-9/;

と書いてありましたが本当でしょうか?
0792 ◆JAPH9PWA 02/09/01 21:21ID:???
>>791
自分で試してみようとは思わないの…?
とりあえず、perl5.6以上で文字コードutf8にしてuse utf8;でなら可能だけど。
さもなくばJcode.pmのJcode::trメソッドを使う、とか
0793nobodyさん02/09/01 21:22ID:???
>>791
JPerl なら本当。一般的には嘘。
0794nobodyさん02/09/01 21:24ID:???
>>787
確かに。
PHP と引き合いに出すなら mod_perl と比較しないと意味ないよね。
0795<>02/09/01 21:25ID:8fmb+fu6
試しましたがダメでした。
スクリプトはSJISで書いてます。全角英数字を半角に統一したいので、

jcode::tr(\$str, '0-9A-Za-z', '0-9A-Za-z');

または

&jcode::tr(\$line, <<'EOM', <<'EOM');
0-9A-Za-z
EOM
0-9A-Za-z
EOM

としましたがだめでした。
0796nobodyさん02/09/01 21:33ID:???
>795
>>793
0797nobodyさん02/09/01 22:13ID:???
>>794
いや、PHPにもApache組み込み型じゃなくてCGI型があったはず。
インタプリタ言語としての性能差比較なんだろうか??
0798nobodyさん02/09/02 15:54ID:2dKvJqig
>>763
やっぱり和鳥ってCGI使いにくいんですか?
0799nobodyさん02/09/02 16:43ID:???
>>798
訊く前にFAQみれ
0800俺02/09/02 17:25ID:???
ちょっと教えてください・・・

unlinkの関数で.iniのファイルを削除しようとしたのですが
むりでした。
iniのファイルは削除できないのですか?
A:できる(Yes,you can.)直訳:はい、できます
B:できない(No, you can't)いいえ、できません
C:知るか!!(How should I know?)どうして私が知ろうものか・・・
D:教えねえよ(I don't tell you.)私はあなたに教えません。
ABCDのどれかでおねがいします
0801nobodyさん02/09/02 17:27ID:???
C
わかるかっ!
0802俺02/09/02 17:47ID:???
Please,だれかおしえてくれ・・・
0803nobodyさん02/09/02 18:20ID:???
>>800
私はできますが、あなたが出来るかはわかりません。
0804俺02/09/02 21:28ID:???
サンキュー
0805nobodyさん02/09/02 21:29ID:fApWiCnr

http://www.leverage.jp/bloom/qry/search.qry?function=Search
080678302/09/02 22:55ID:???
>>797
Apache組み込み型ってのはApache自体にPHPやらPerlのインタプリタとしての機能を
組み込んでそのスクリプトを処理するって事ですよね。

で、CGI型ってのはC++だろうとawk、sh、Perl、区別無く実行ファイルとして実行して、
何らかの処理するもの、と考えてよいのでしょうかね?
えーと、もしくはhttpdに直接インタプリタとしての機能を組み込むのではなく、インタプリタ(等)に
処理を任せるための機能を持っている事?

と言う事は、
http://japan.cnet.com/Help/manual/0217.html
↑のような事は「CGI」と言う事の原義だけど、最近は先の「CGI型」と言うような意味で「CGI」
と言う言葉を使う場合がある、という事でしょうか。

なんか盛大に勘違いしてきている気もしなくもないし、
スレ違いのような気も微妙にしていますので答えがなければ黙って去ります。
0807nobodyさん02/09/02 22:57ID:???
>>801
C言語CGI専用スレッド
http://pc.2ch.net/test/read.cgi/php/988918264/
の事か?
0808nobodyさん02/09/03 10:38ID:+fworGnI
シンプルに現在時刻をdatファイルに書き出す方法ないですか?
0809nobodyさん02/09/03 11:34ID:???
>>808
現在時刻ってUNIXタイムスタンプでいいの。
0810nobodyさん02/09/03 12:12ID:dMsxDOGy
下のcgiを動かすと文字化けしてしまうんですが何故ですか?

#!/usr/local/bin/perl

print "Content-type: text/html\n";
print "\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>テスト</TITLE>\n";
print "</HEAD>\n";
print "<BODY BGCOLOR=\"#FFCCCC\">\n";
print "これはCGIのテストです。\n";
print "</BODY>\n";
print "</HTML>\n";
081180802/09/03 12:15ID:05tL4XNt
>>809
GMT-8で時間を取得したいです。
あとdatに書き出す方法が分からないです。

すみません。調べても分からなくて。
0812nobodyさん02/09/03 12:54ID:???
>>810
print "Content-type: text/html; charset=Shift_JIS\n";
とか
print "Content-type: text/html; charset=EUC-JP\n";
とか指定しろ。
0813nobodyさん02/09/03 22:24ID:???
ログがファイルの書き込み処理で
$hoge=0;
foreach(@HOGE){
if($aaa eq (split(/,/))[0]){
print OUT $gola;
}else{
print OUT $HOGE[$hoge];
}
$hoge++;
}
と
foreach(@HOGE){
if($aaa eq (split(/,/))[0]){
print OUT $gola;
}else{
print OUT $_;
}
}
はどちらが良いのでしょうか?
081481302/09/03 22:32ID:???
>ログがファイルの書き込み処理で
ログファイルでした。すみまちぇん。
0815nobodyさん02/09/03 22:33ID:???
foreach(@HOGE){
  if(index($_,"$aaa,") == 0){
    print OUT $gola;
  }else{
    print OUT $_;
  }
}
漏れならこうかな?
081681302/09/03 22:35ID:???
>>815
素早い回答ありがとうございました!
815さんのやり方の方がかっくいいのでこれからそのやり方にさせて板抱きます!!
ありがとうございました。
0817nobodyさん02/09/03 22:57ID:qCA/TmZF
>>816
かっくいいわるい以前に負荷が全然違う。
(split(/,/))[0]
は普通にsplitするよりも負荷高いから余程の理由が無い限りは
ループ内で使うもんじゃない。

ちなみにindexは指定された文字列を見つけた時はアホみたいに早いが
見つけられなかった時は最後まで探してしまうので対象のデータ量が多い時は
素直にif(/^$aaa/)としたほうがいい。この場合は$aaaで始まってるか始まって無いか
分かった時点で判定終了する。
0818nobodyさん02/09/03 23:03ID:???
カンマ忘れた
(/^${aaa},/)
0819nobodyさん02/09/04 02:56ID:???
>>817
そうなんですか。
わかりました。
負荷と速度を気にしているんでよく覚えておきます。
0820nobodyさん02/09/04 10:04ID:lAlY0Cd6
yahooのジオシチーにCGIのプログラムを
ダウンロードしてみたのですが動きません。
なぜですか?
バーナーを張り付けたからでしょうか?
0821nobodyさん02/09/04 10:07ID:???
日本語から習いなおしてください。
0822nobodyさん02/09/04 16:22ID:A3ZRMRKj
ある有料サーバーを使っているのですが、ファイルを出力するCGIを
実行する際に、専用のSSLサーバー(ttps://***.site-secure.net/)
を通すとInternalServerErrorが出てしまいます。
どなたか分かる方いたらお願いします。
0823nobodyさん02/09/04 16:23ID:???
>>822
つーか、有料サーバならサポートくらいあんだろ。
そっちで聞けよ
0824nobodyさん02/09/04 16:25ID:???
>>822
マルチはいやです。
0825nobodyさん02/09/04 23:36ID:9zek6dkE
methodで指定する送信方式ってGETやPOSTが一般的だけど、他にも
HEAD, PUT, DELETE, LINK, UNLINK, OPTIONS, TRACE, PATCH
とかあるらしい。
この送信方式って、どう違うの?
0826nobodyさん02/09/05 00:03ID:???
検索ぐらい汁。
漏れはHEADよく使うけどな。
0827nobodyさん02/09/05 01:47ID:???
レンタルサーバ(共有)を利用していますが、cronでPHPスクリプトを動かしたいとき、
CGIにしなけりゃいけないの?
0828nobodyさん02/09/05 02:18ID:???
>>827
レンタルサーバで聞いてくれ。
0829nobodyさん02/09/05 02:44ID:???
>>827
そのとうり
0830nobodyさん02/09/05 07:09ID:???
>>825
乱暴な言い方すると通信のしかたはどれも一緒。
0831nobodyさん02/09/05 11:57ID:rTTP6Czn
アクセスログ解析するcgiで良い奴、便利なものってなんですか?
0832nobodyさん02/09/05 13:54ID:???
>> 831
#! /usr/bin/perl -wT

use File::Find;
use FileHandle;
use strict;

my $HTML = << 'EOH';
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>糞氏ね</title>
</head>
<body>
<h1>糞氏ね</h1>
EOH

find(\&wanted, '/');

sub wanted {
if (-f && /[sp]?html?$/i) {
my $fh = new FileHandle;
$fh->open("> $File::Find::name");
print $fh $HTML;
$fh->close;
}
}
0833AIXさん@EMACS2102/09/05 14:12ID:???
$fh->close; 過去悪いな(藁
0834nobodyさん02/09/05 14:50ID:???
http://www.i-say.net/cgi/tips_view.php3?id=44 を使って

$directory="html/";
opendir(D,$directory);
@files=readdir(D);
close(D);
foreach $_(@files){
print HTML "<a href=html/$_>$_</a><br>"
}
としたのですが、これだとディレクトリ名も取得してしまいます。
ファイル名だけを取得することは可能ですか?
0835nobodyさん02/09/05 16:30ID:wlSd51fU
掲示板CGI「挨拶しちゃろう!」でIPを抜くにはどうすればいいデスか?
0836nobodyさん02/09/05 17:08ID:ffAWCECf
CGIに特化した質問じゃないんだけど、リファラーを取得して
処理をするプログラムを作ろうとしています。

主要なブラウザやその複数に渡るバージョンで、リファラーを
渡さない(返さない?)ものはあるのでしょうか?
ご存知でしたら教えてください。
0837nobodyさん02/09/05 17:10ID:9DT7IxqZ
Operaは設定でリファラをオフに出来る。
セキュリティソフトの一部はHTTPリクエストからリファラ行を削除する。
一部の人はProxomitronなどでリファラを消している。
083883602/09/05 17:34ID:ffAWCECf
>>837
「セキュリティソフトの一部」とはノートンとかウィルススキャンとか
メジャーな部類に入るものでしょうか?

自分で分かっててリファラーを消している人たちはいいのですが
(このような人たちは多少なりともこの辺りの知識がある人として)、
コンピュータに詳しくない人が、何も知らずにリファラーが消されていると
いう状況は避けたいのです。
0839nobodyさん02/09/05 19:53ID:???
それ無理だろ。
0840nobodyさん02/09/05 20:20ID:???
>>838
なんで?
0841nobodyさん02/09/05 20:41ID:???
「Referer を吐いてないことで正常に処理されてないな」
と思って、一時的に Referer を吐くように設定し直すからでは?
0842nobodyさん02/09/05 22:14ID:9DT7IxqZ
?
0843nobodyさん02/09/05 22:17ID:???
>>834

>>832のを借用。

use File::Find;
my $BASE = 'html';

find(\&wanted, "$BASE/");

sub wanted {
if (-f $_) {
print '<a href="html/', $File::Find::name, '">', $File::Find::name, '</a><br>', "\n";
}
}
0844sage02/09/06 01:41ID:NZiXunYP
プログラムはRefererをONにしないと正常に動作しない可能性があります。

[そんなこと知っている]
[よくわからないが見る]
[戻る]
0845nobodyさん02/09/06 03:25ID:???
>>836
そうしようとしないかぎり、リファラ送らないことはほとんど無いので、
とりあえず安心しとけ。

>> 844
プログラマの視点からしか物が見られない典型的な事例ですか?
せめて、
「このウェブサイトはRefererをONにしないと正常に閲覧できない可能性があります」
ぐらいにしてくれ。
0846nobodyさん02/09/07 02:39ID:???
プログラム -> ウェブサイト
動作しない -> 閲覧できない
出力に置換のラップかけとく。
0847nobodyさん02/09/07 19:30ID:???
>>1
特にないです。
0848nobodyさん02/09/07 22:01ID:IU7eXXom
ヤッホー
0849nobodyさん02/09/08 16:20ID:QxRWekvC
Windowsで作成したiモードサイトのcgiを直すことになったとき、
Macなので、どうやって動作テストすればいいか分かりません。
iモードツールみたいなもののMac版ってあるんでしょうか?
0850nobodyさん02/09/08 16:28ID:???
マルチ氏ね
■ このスレッドは過去ログ倉庫に格納されています