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

Perl コーディング初心者質問コーナー Part33

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/03/01 02:46ID:1GeWO7LH
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0166nobodyさん04/03/05 03:00ID:???
普通はコマンドプロンプトを起動させて「perl hoge.pl」
エディタで起動させて同時にカレントディレクトリを移動させたりすれば便利
0167nobodyさん04/03/05 03:04ID:ReR1r8Jb
>>165
いまいちなにがしたいのかよくわからないけど、
スクリプトの文法チェックならperl -c hoge.plで可能。
0168nobodyさん04/03/05 03:41ID:???
なんと、あの記述はコマンドめんどくさいってアホな理由から生まれたのです!
俺の根性がびーーーん。

エディタで起動ってなんのエディタだろう??
無知ですんません。

>>167
>いまいちなにがしたいのかよくわからないけど、
単にダブルクリックしたいだけです。エッヘン!
016916804/03/05 03:48ID:???
>エディタで起動ってなんのエディタだろう??
あ。意味分かった。
今までperlをエディタから起動した事なかったf(^_^;)

0170nobodyさん04/03/05 03:59ID:ReR1r8Jb
コマンドめんどくさいだけの理由で変な我流の書き方すんのはやめておいた方がいいよ。

俺はEmEditor使ってるけど、エディタから直接ボタン一個でプロンプト起動して
自動で走らせるようにしてある。この方法だとdieで終了しても閉じないから
エラー内容もちゃんと見れる。
0171nobodyさん04/03/05 04:27ID:???
>>170
ありが�d!
俺も秀丸からボタン一つで新規秀丸ファイルに出力されるようにしてきた。
evalしてた俺ってなんて馬鹿MAXなんだろう。。。_| ̄|○

0172nobodyさん04/03/05 07:21ID:???
ヴぁかMXA
0173nobodyさん04/03/05 13:13ID:???
なんでわざわざファイルに出すんだろう…
0174nobodyさん04/03/05 23:51ID:yEaLcmjc
変数名の文字列を知る方法を教えてください。
$test=1
だったら、
$hoge{'test'}=1
にしたいのです。「test」の部分は未知の場合にどうやったらいいかわかりません。
よろしくです。
0175nobodyさん04/03/05 23:59ID:???
>変数名の文字列を知る方法

Perlソースは読めるから 未知な場合がどういう場合なのか・・・
0176nobodyさん04/03/06 01:52ID:???
例:

  @pairs = split (/&/, $buffer);

  foreach $pair (@pairs) {

    ($name, $value) = split(/=/, $pair);

    $FORM{"$name"} = $value;

  }

0177nobodyさん04/03/06 01:57ID:???
BBS系の使い方だな。
0178nobodyさん04/03/06 09:33ID:???
このあいだperlを始めてようやく自力で掲示板を作れるようになりました。
次のステップとして
たとえば、発言一覧などをいちいちアクセスされるたびにCGIがHTMLソースを吐くようではサーバに負担が掛かるので
発言一覧のような閲覧頻度の高いものはHTMLファイルに出力して変更があった場合更新するようにすれば負荷が軽減されるように思うのですが
他のスレで

146 名前:nobodyさん 投稿日:2004/03/04(木) 01:31 ID:???
なんでHTMLへ書き出したいんだ?
メリットだけじゃなくてデメリットもあることを承知の上でか?

と言うような書き込みを見つけました
具体的にデメリットとしてはどのようなことが挙げられるでしょうか
0179nobodyさん04/03/06 09:43ID:???
>>178
cookieとか使ってた場合、HTMLにすると意味がなくなるからな。
JavaScript使えばできないことはないが、切られるとどうしようもないしな。
0180nobodyさん04/03/06 10:16ID:???
>>178
次のステップとして自力で作った掲示板スクリプトを他人に評価してもらうのがいいぞ。

もう廃れてしまったスレだがな。
自作CGIを評価するスレ
http://pc2.2ch.net/test/read.cgi/php/1049514428/l50
0181未承諾広告※ ◆TWARamEjuA 04/03/06 11:14ID:???
>>176
1 行にしてみるてすと
%FORM = map { (split /=/)[0,1] } split /&/, $buffer;
0182nobodyさん04/03/06 14:15ID:???
>>178
HTML書き出しのデメリット
 設置できる条件が厳しくなる(CGIディレクトリに置いたHTMLへアクセスできないとダメ。とかね)
 リアルタイムに更新されない(だれかが書き込むまでずっと「最新」マークが表示されっぱなし。とかね)

まぁ、掲示板の場合はそれ以上にメリットはあるよ。
全部HTMLな掲示板つくってみたけど、表示負荷をあまり考慮しなくて済むからかなり無茶ができる。
0183nobodyさん04/03/06 14:35ID:???
ファイルハンドルが存在するかしないかを調べるにはどうしたら良いのでしょうか。
というか、ファイルが既に開かれているかいないか、の方が
自分の考えてる事にニュアンスが近いです。
0184nobodyさん04/03/06 15:56ID:???
tell(FH) >= 0

これで
0185nobodyさん04/03/06 19:36ID:???
>>181
%FORM = split /[&=]/, $buffer;

まぁ実用的なコードほどこんなハッタリじみた事はせず、
堅実にサニタイズしているもんだがな。

>>183
http://perldoc.com/perl5.8.0/pod/func/fileno.html
0186nobodyさん04/03/06 22:13ID:???
質問です。
my変数を使うことのメリットって何ですか?
グローバル変数だけだと不具合とかってあるんですか?
0187nobodyさん04/03/06 22:16ID:???
大きなコードになるほど重要性が増してくる。
複数人での開発になったら必須。
最大のメリットは保守性。
0188nobodyさん04/03/06 22:29ID:???
>>186
いつかあなたにもmyの必要性がわかるときが来るよ。
0189nobodyさん04/03/06 22:33ID:???
>>186
myもしてないコードって読めたもんじゃないよ
基本は、処理はことごとく関数化して変数は全部myする姿勢で。
0190nobodyさん04/03/06 22:56ID:???
スクリプトがでかくなると特に重要やね。
あまり大きくなく保守が楽な規模のものでも、
例えばブロック毎に変数名使い回せるとかいうのは
日曜すくりぷたな人にとっても結構嬉しい事なんじゃないだろうか。

まあ使って損は無いし(あっても得の方が大きい)
特に理由が無い限りmy宣言はした方が良いと思うよ。
0191nobodyさん04/03/06 23:01ID:???
「特に理由が無い限り」どころか「特殊な事情が無い限り」使うべきだと思うが。< my
あ、use strictと組み合わせること前提ね。
0192nobodyさん04/03/06 23:57ID:???
use strictの無いPerlスクリプトなんて金玉の無い男みたいなもんだ。
0193nobodyさん04/03/07 00:15ID:???
>>186です。
色々なご回答有難うございました。
どうやら金玉の無い男みたいですので、もう少し色々と勉強してみます。
0194nobodyさん04/03/07 01:08ID:???
ちょっと質問です
ディレクトリのリネームをしたいんですが、CGIを実行するディレクトリのリネームってできないんでしょうか?
例えば
http://hoge.com/aaa/rename.cgi
というのを実行して
http://hoge.com/bbb/rename.cgi

といったようなリネームがしたいんですが・・・
rename関数でもFile:copy moveでも無理でした

何かいい方法があればお願いします
0195nobodyさん04/03/07 01:16ID:???
一度通る事を確認したら僅かな負荷を気にして
useしないようにするという場合もありそうな気がしますが、
チェック時だけではなく常にuse strictする理由って何かありますか。
例えば、局所変数のチェックをするついでに何かしらのエラーチェックをしてくれるとか。
0196nobodyさん04/03/07 01:42ID:???
>>179
>>180
>>182
ご回答ありがとうございました
誰かが更新しないと更新されないというのは重要なポイントですね。
0197nobodyさん04/03/07 02:15ID:???
>>194
#!/usr/local/bin/perl
use strict;
(my $now_dir = $ENV{'SCRIPT_FILENAME'}) =~ s|/[^/]+$||;
(my $base_dir = $now_dir) =~ s|[^/]+$||;

print "Content-Type: text/plain\n\n";

$ENV{'QUERY_STRING'} =~ /^(\w+)/;
length $1 or error('No assigned new dir name.');
my $new_dir = $base_dir . $1;
-e $new_dir and error("$new_dir already exists.");

chdir $base_dir or error($!);
rename $now_dir => $new_dir or error($!);
chdir $new_dir or error($!);
print 'ok.';

sub error {
  print "Not changed: @_";
  exit;
}

>>195
http://perldoc.com/perl5.8.0/lib/strict.html
0198nobodyさん04/03/07 02:36ID:???
>>197さん
どうも素早い返信ありがとうございます〜
さっそく試してみたいと思います

それにしてもchdir使えばいけるとは・・・思いもつきませんでした
危うくcpでフォルダ全コピーして削除する方法をするとこだったし
0199nobodyさん04/03/07 05:46ID:???
モジュールの話かコーディングの話か良くわからなかったのでこちらに。

例えば、JcodeのOOは
 Jcode->new(\$str)->utf8;
の様にすれば良く、これは
 $char = 'utf8';
 Jcode->new(\$str)->$char;
でも良いようなのですが、
 %char(UTF-8 => 'utf8');
 Jcode->new(\$str)->$char{'UTF-8'};
のようにハッシュを使うと構文エラーと言われます。
ハッシュを使うにはどうすれば良いのでしょうか。
0200nobodyさん04/03/07 10:57ID:???
>>195
実行時チェックはシンボリックリファレンス(${'var_name'}のようなやつ)の禁止だけなので、
厳密にいうとデバッグがすんだらuse strict 'refs'のみにしてもかまわない。
が、本当に些細な負荷でしかない(しかも、コンパイル時チェックなので実行速度には影響しない)ので
敢えてそこまでする意味はない。っつか、黙ってuse strictしとけ。

>>199
$enc = $char{'UTF-8'};
Jcode->new(\$str)->$enc;
または
Jcode->new(\$str)->${ \$char{'UTF-8'} };

しかし意味も無くメソッドを変数にするのはお勧めできない。読み難い。
Jcode::convert(\$str, $char{'UTF-8'})とするのが普通だと思うぞ。
0201nobodyさん04/03/07 11:19ID:???
>>196
イメタグでCGI叩かせて、必要なら更新するという方法もある。
0202nobodyさん04/03/07 11:50ID:???
>201
HTMLで出力している意味をわざわざ遠回りしてまで殺して何の意味が?
020318204/03/07 13:04ID:???
>>196
リアルタイムに更新されない。と考えるとデメリットだけど、
リアルタイムに更新されなくて済む。と考えるとメリットになる。

メリットとして生かせるつくりにすることが重要。
0204nobodyさん04/03/07 15:18ID:hh7UC8Wb
質問です。
Win2000にActive Perl ver 5.8.3を入れています。
flockの使用可否について調べているのですが、

$file = "data.dat";
open(OUT,"<$file");
eval { flock (OUT,2); };
if ($@) { warn "flock NG"; } else { print "flock OK."; }

こう書いてコマンドラインで実行すると、必ずOKと出力されます。
これってevalの使い方あってますか?
また、Winってflock効くのでしょうか?
0205nobodyさん04/03/07 15:43ID:???
ありがとうございます。

>200
そうだったのですか。
Jcodeのマニュアルに Jcode->new(\$str)->euc; のやり方のほうが良い、
みたいな事を書いてあったので変更しようとしていたのです。
0206こば04/03/07 16:33ID:E9jZV2PD
こんにちわ 質問です。

以下の二つの違いを教えて頂けないでしょうか?
print "<FONT size=\"5\">\n"; #ダブルクオート入り
print "<FONT size=5>\n"; #ダブルクオートなし
0207nobodyさん04/03/07 16:36ID:???
>206
HTMLの事をなぜここで聞く?
0208nobodyさん04/03/07 16:37ID:???
HTMLの書きかた。
極めてスレ違いでござる。
0209nobodyさん04/03/07 16:39ID:???
いや、板違い。
0210こば04/03/07 16:49ID:E9jZV2PD
失礼しました。
0211nobodyさん04/03/07 17:48ID:???
>>204
Win2000なら有効
0212nobodyさん04/03/07 17:53ID:???
>>202
大部分のアクセスはstatするだけだから、データ作り直すより速い。
0213nobodyさん04/03/07 19:18ID:???
下記のようなパールスクリプトをtaintモードで動かしたいのですが、
どうしてもサーバエラーになってしまいます(デバッガで見ると
「Too late for "-T" option at copy.cgi line 1.」と出ます)。

#!/usr/bin/perl -T

$a_dir = '../a/data';
$b_dir = '../b';
system("cp -r $a_dir $b_dir");

内容としては、あるディレクトリを丸ごとほかのディレクトリに
バックアップするような ものなのですが、
taintモードで動かすこと自体が不可能なのでしょうか?
もしくはどうすればtaintモードで動くでしょうか?
0214nobodyさん04/03/07 20:04ID:hh7UC8Wb
>>204
鯖として運営してるマシンで、いまどきflockを効かせないようにしてる鯖ってあるんか。
0215nobodyさん04/03/07 20:05ID:hh7UC8Wb
>>214
失礼、>>204に対して納得したってことで。
俺=>>204ね。
0216nobodyさん04/03/07 21:48ID:???
>>213
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsec.html
021719404/03/07 22:03ID:???
今日1日>>197を試したんだが全く成功しない…
いろいろ変数かえたりしたんだが全くダメだ
UNIX系のサーバーで試しにやったら動いたんだけど
Windowsで動かしたいんだけどなぁ
やっぱフォルダ全コピーしかないのか_| ̄|○
0218nobodyさん04/03/07 23:17ID:???
>>217
>>1
0219nobodyさん04/03/07 23:25ID:???
>>217みたいな、
こうしたとかも書かずにただダメなのかとだけ言ってる連中って、
何の意味があって書き込んでるんだ?
同情して欲しいのか?
0220nobodyさん04/03/07 23:41ID:???
うん、そもそも、何でCGIが置いてあるディレクトリの名前換えたいか理解不能だし。
それがわかれば他の解決法もあるかもしれないのに。
0221nobodyさん04/03/08 02:04ID:???
掲示板に検索機能を付けて、
($id,$name,$value,$other) = split(/\,/,$line);
if($name =~ /$search/ or $value =~ /$search/) {
という具合に、「名前」か「本文」に、「検索用の単語」が含まれていれば、という仕組みを作ってみたんですが、
検索用単語がエスケープする必要のある文字(表示とか)だと、エスケープしないと検索結果に出ません(表\示で検索しなければならない)。
どうしたらいいんでしょうか? そもそも間違ってますか?
0222nobodyさん04/03/08 02:12ID:???
ギャアー
022322104/03/08 02:16ID:???
表示、を検索する場合、「表\示」、「表\」で検索できますが、「表」では無理です。
$nameや$valueの中身が「表\示」になっている、というわけではない、ということですかね。
0224nobodyさん04/03/08 02:31ID:???
>>221-223
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0225nobodyさん04/03/08 03:45ID:???
>>217
use Win32API::File qw(MoveFile);
022622504/03/08 03:48ID:???
書いた後にFile::Copyのmoveで出来ることに気が付いた…。
022722104/03/08 06:25ID:???
>>224
有難う御座います。

$name =~ s/\\//g;
$value =~ s/\\//g;
とやって、該当部分の\を無くす、でマッチさせるやりかたで出来ました。

ただ、そうすると、
$name =~ s/$search/<em>$search<\/em>/g;
$value =~ s/$search/<em>$search<\/em>/g;
で強調してる部分が適応されません。

$valueの中の$search(表示)に該当する部分、ってのは実質(表\示)なわけですからマッチされない、ってわけですよね。
また詰まりましたです。
022822104/03/08 06:37ID:???
$name =~ s/$search/<em>$search<\/em>/g;
$value =~ s/$search/<em>$search<\/em>/g;
の直前にも、
$name =~ s/\\//g;
$value =~ s/\\//g;
入れたら解決しました。

ただ、本文の\が全部消えてしまいますけどいいんですかね。
022922104/03/08 08:17ID:???
>>227のやりかたで、
$name(\を抜いたもの)と$search(\がないもの)がマッチするか確認する、ってするよりも、
$searchがエスケープシーケンス込み、になるようにした方が、em要素も適応できてよさげな気がするんですが、
$searchにどういう処理を加えたら「表\示」のような中身になるんでしょうか?
0230nobodyさん04/03/08 08:20ID:???
index使えば?
023122104/03/08 08:22ID:???
>>230
\の位置を調べて、その位置に\を入れる、という処理をするということですか?
0232nobodyさん04/03/08 10:33ID:???
>>221
if($name =~ /\Q$search\E/ or $value =~ /\Q$search\E/) {
どうよ?
023322104/03/08 10:41ID:???
>>232
まさしくそれです。
まだ覚え初めて1ヶ月経たないので、細かいところが弱いです。
有難う御座いました。
0234nobodyさん04/03/08 10:50ID:???
機種依存文字を差し替え(あるいは削除)する、ってのは容易にできますかね。
023522104/03/08 11:09ID:???
解決したと思ったんですが、「\」で検索すると、「表\示」がヒットしてしまいます……。
0236nobodyさん04/03/08 11:24ID:???
euc-jpにしる
023722104/03/08 11:25ID:???
>>236
それが確実ですよねぇ。
検討する方向で頑張ります。
ご面倒おかけして申し訳ありません。有難う御座いました。
0238nobodyさん04/03/08 23:19ID:???
すいません。質問させて下さい。

# ランダムで数字を表示
$n = int(rand 43) + 1;

# CGIヘッダの出力
print "Content-type: text/html\n\n";

# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>ランダム数字</title></head>\n";
print "<body>\n";
print "<p>今回の数字-----------★<big>$n</big>★</p>\n";
print "</body></html>";

というプログラムを作りましたが、この「今回の数字」という部分の
文字の色を変えるにはどのように修正したらよいでしょうか?
0239nobodyさん04/03/08 23:24ID:???
>>238
Web制作板の初心者スレでHTMLの書き方を聞いてこい
0240nobodyさん04/03/08 23:34ID:???
Perlの部分が質問の対象じゃないのか。
(・∀・)カエレ!!
0241nobodyさん04/03/09 03:37ID:???
>>238
use CGI;
$n = int(rand 43) + 1;
print "Content-type: text/html\n\n";
$obj = new CGI;
print $obj->p($obj->font({color=>'red'},'今回の数字').'-----------★'.$obj->big($n).'★')."\n";

0242nobodyさん04/03/09 03:39ID:???
「今回の数字」という部分の文字の色をランダムに変えるには
と言うのなら答えてもいいが…
024323804/03/09 09:30ID:???
確かに質問内容がプログラムとは関係ないですね。すみませんでした。
それなのに丁寧な回答ありがとうございます。
昨夜、ヒアドキュメントを使う事で簡単に解決出来ました。
タグはXHTMLしかやってなかったので、それが原因のようでした。
241さんのプログラムは今日家に帰ったら試してみます。
もしよければ242さん教えて頂けませんか?

それと今やろうとしている事で質問させて下さい。

$x = int(rand 5) ;

@abc = ( A , B , C , D , E ) ;
@key_a = ('Apple','Age','And','Angry') ;
@key_b = (頭文字Bの単語        );
@key_c = (頭文字Cの単語        );

@abcの中からランダムに選んだアルファベットに対応した
@key_?の中からまたランダムに選び出すという
プログラムを作りたいのですが、これにはどうしたらよいでしょうか?
0244nobodyさん04/03/09 09:38ID:???
>>243
これにはどうしたらよいでしょうねえ
0245nobodyさん04/03/09 10:14ID:???
>>243
モマエは質問の前にもうちょっとドキュメント読んだ方がいい
新しい事やる度に質問する事になる

あーやべ俺ちょうしんせつ涙が出てくるワ
0246nobodyさん04/03/09 10:28ID:???
何故わざわざシンボリックリファレンスを使うという面倒な方法を思いつくのだろう。
0247nobodyさん04/03/09 11:46ID:???
Cのようなポインタを扱う言語でプログラムした経験が無い初心者だと、
ハードリファレンスよりもシンボリックリファレンスの方が
直感的にわかりやすいらしい。

>>243
真面目に答えると、二次元配列などを使うのが普通の発想だと思う。

%abc = (A=>['Apple','Age','And','Angry'],B=>[頭文字Bの単語],C=>[頭文字Cの単語]);

とかそんな感じ。これだと例えば $abc{A}->[2] が 'AND' になる。
ラクダ本だと「リファレンスとネストされたデータ構造」の章あたりを読むとよい。
0248nobodyさん04/03/09 11:47ID:???
>>243
%abc;
for ($ii=0; $ii<@abc; $ii++){
$abc{"$abc[$ii]"}{'key_a'} = $key_a["$ii"];
$abc{"$abc[$ii]"}{'key_b'} = $key_b["$ii"];
$abc{"$abc[$ii]"}{'key_c'} = $key_c["$ii"];
}
print $abc{'A'}{key_a}; #=> Apple

hash勉強せい

0249nobodyさん04/03/09 11:50ID:???
>>238
head要素内にtitle要素しかないのに4.01strictなのか、とか
025024804/03/09 11:50ID:???
あ、間違い。
>>247 が正解。
0251nobodyさん04/03/09 14:49ID:???
質問です。
ShiftJISに含まれていない文字(半角カナなど)だけを実態参照に変換したいのですが,
どうしたらいいのでしょうか。
0252nobodyさん04/03/09 14:59ID:???
>249
validatorには注意されるけど「HTML的」にはstrict(validではなく)。
詳しい事は製作板で識者にでも教えて貰って下せえ。
0253nobodyさん04/03/09 15:00ID:???
SJISに半角カナは含まれてると思うけど。
025425104/03/09 15:03ID:???
>>253
書き方がまずかったです。
要は一般的にまずいとされている文字を実態参照にしたいということです。
0255nobodyさん04/03/09 16:42ID:???
gzipで圧縮済みのファイルをcgiでヘッダ書いて送りたいのですが
0001.html.gz って名前のファイルを
gzsend.cgi?0001
みたいに呼び出してますが画面真っ白で何も表示されません。
鯖はxreaです。
HTTPD + ActivePerl な環境のローカルだとうまくいくのですが…

ソースはこんな感じです。

print <<HERE;
Content-type: text/html; charset=Shift_JIS
Content-Encoding: gzip
Content-Language: ja
Pragma: no-cache
Cache-Control: no-cache

HERE
if ($ENV{'REQUEST_METHOD'} eq "GET") {
  $key = $ENV{'QUERY_STRING'};
}
open(ALL,"$key.html.gz");
binmode(ALL);
binmode(STDOUT);
print <ALL>;
close(ALL);
exit;
これで  <a href="gzsend.cgi?0001">表示</a> <a href="0001.html.gz">Download</a>
みたいな使い方したいのですが…いったい何が悪いのやらさっぱりです。
0256nobodyさん04/03/09 16:55ID:???
>>255
XREAってgzip使えたっけ?
0257>>251 1/204/03/09 17:01ID:???
>>251

use Jcode;  もしくは require 'jcode.pl';
$_ = "アイウエオ";
Jcode::convert(\$_, "euc");  もしくは &jcode'convert(\$_, "euc");
s/。/?/g;
   中略(ちなみに61行分)
s/゚/?/g;
Jcode::convert(\$_, "sjis");  もしくは &jcode'convert(\$_, "sjis");

あとは以下を参照して。

HTML4 で使える文字実体参照 http://www.ne.jp/asahi/minazuki/bakera/html/reference/charref

あとEUCで書く事
SJISでかくなら s/ア/?/g; → s/竺/?/g みたいにわざと文字化けさせた状態にする事
025825504/03/09 17:07ID:???
>>256
使えます。

普通にgzip圧縮転送は
ヘッダーに Content-Encoding: gzip と

if (-d "\\") { open(STDOUT,"| gzip.exe -1 -c"); } #ローカルテスト用
else { open(STDOUT,"| /bin/gzip/ -1 -c"); }

こんなんでうまく動きます。

gzipで圧縮済みのファイルをcgiから送るのがうまくいかなくて悩んでるんですけど。

0259nobodyさん04/03/09 17:12ID:???
>>254
いやごめん単に突っ込んだだけ。
0260nobodyさん04/03/09 17:30ID:???
>>255
広告が邪魔してるとかじゃないの。
0261nobodyさん04/03/09 18:31ID:???
>>258
あぁ そういうことか
ごめん勘違いしてた
単なるgzファイルをCGIから吐かせたいのね
それって根本的にContent-type: text/htmlじゃなくないか?
026225504/03/09 19:20ID:???
>>260
自動広告挿入無効の"x"ディレクトリに設置してみたところ動作しました。
普通に鯖側で圧縮して送る時は"x"ディレクトリじゃなくても動作するのに…
まぁ、そういう思いこみもあって盲点でした。
助かりました。ありがとうございます。

しかし今度は gzsend.cgi? の?以降になんか変なの書いたり何も書かなかった時に
何も指定されてません とか そんなファイルありません ってHTML吐くようにしてたのに
それが表示されなくなりました。
"x"ディレクトリに変える前はうまくいっていたのに…
エラー画面でなくてもさほど困らないしとりあえずこのまま使います。

>>261
Content-type: text/html; charset=Shift_JIS
Content-Encoding: gzip

なヘッダー書いてから.gzなファイル送ってやるとgzip圧縮転送と等価にブラウザにはHTMLで表示され
なおかつ圧縮済みだから鯖に負荷掛からない。
さらに以下みたいにして
<a href="gzsend.cgi?0001">表示</a> <a href="0001.html.gz">Download</a>
一つのファイルで表示用とダウソ用を兼ねる→(゚д゚)ウマー を狙ったんですよ。
0263へたれ04/03/09 21:51ID:vgAvuUAX
こんにちは、一般的な事なのでここに書き込んでいいのか良くわかりませんがとりあえず書いてみます。
掲示板を設置して、そこにアクセスしている端末のUSER_AGENTやアクセス数を解析したなぁ…って
思ったんですがCGIからCGIを呼び出すことって出来るんでしょうか?
掲示板のCGIの中で、端末解析用のCGI(手元にあるのはSSI動作のです)を呼べばいいんだろうと思うんですが
やり方がわからないんでうまくいかないんです。どうやったらいいんでしょう??
よろしくおねがいします。
0264nobodyさん04/03/09 21:52ID:vgAvuUAX
こんにちは、一般的な事なのでここに書き込んでいいのか良くわかりませんがとりあえず書いてみます。
掲示板を設置して、そこにアクセスしている端末のUSER_AGENTやアクセス数を解析したなぁ…って
思ったんですがCGIからCGIを呼び出すことって出来るんでしょうか?
掲示板のCGIの中で、端末解析用のCGI(手元にあるのはSSI動作のです)を呼べばいいんだろうと思うんですが
やり方がわからないんでうまくいかないんです。どうやったらいいんでしょう??
よろしくおねがいします。
0265nobodyさん04/03/09 21:55ID:vgAvuUAX
こんにちは、ヘタレですけどよろしくお願いします
掲示板を設置して、そこにアクセスしている端末のUSER_AGENTやアクセス数を解析したなぁ…って
思ったんですがCGIからCGIを呼び出すことって出来るんでしょうか?
掲示板のCGIの中で、端末解析用のCGIを呼べばいいんだろうと思うんですが
やり方がわからないんでうまくいかないんです。どうやったらいいんでしょう??
■ このスレッドは過去ログ倉庫に格納されています