トップページ⇒php
983コメント345KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。01/09/18 18:17ID:plR9HC2E
print "くだらねぇー質問はココから始めろや!\n";

print<<HTML_END;
<a href="http://corn.2ch.net/test/read.cgi?bbs=php&key=988727833" target="_blank">旧スレ</a>
HTML_END
0334名無しさん@お腹いっぱい。01/10/21 02:32ID:???
とりあえず漢字ぐらい変換できるようになれ。
とりあえず適当な本買って、基礎知識手に入れてからにしな。
あと、デザイナー目指すならデザイン勉強したほうがいいよ。
033533301/10/21 03:57ID:gzw1ipZQ
すみません。333です。
企業はデザインだけ出来る人よりも、オールマイティーな人材を求めている
と聞いたので、サーバーサイドの基礎知識を少し身に付けたいのです。
デザインはflashやdreamweaverなどで
コードはhtml、javascriptなんかをやりだしたくらいなのですが
CGIのアクセスログなんかを自分で創りたくてウズウズしてます。
だって、そっちの方が面白そうだもの。
自分はどちらかというと面白そうなことなら、まず、実際にやりながら、
参考書片手に勉強というのでなければ続かないたちなので
とりあえず簡単に自作のCGIを動かせる大手プロバイダで
「動いた!」という感動を向上心につなげようと思ってます。
でも、本屋に売ってる本で具体的に初心者におすすめのプロバイダとか
そういう話は当然のってないんですよね。
かなりスレ違いのような気もするので、簡単に
「僕くらいなら当面biglobeで十分ですか?」
「大手のADSLサービスで自作CGIオーケーなとこってあるんですか?」
今はレンタルサーバーとかは考えてません
下の方の質問はここでするのはかなり勇気入りましたです。
とりあえず、上だけでもよろしくお願いします。
0336名無しさん@お腹いっぱい。 01/10/21 04:08ID:???
>>335
とりあえず、自分のPCで動かしてみれば?
0337名無しさん@お腹いっぱい。01/10/21 04:10ID:???
>>333
http://127.0.0.1/
0338名無しさん@お腹いっぱい。01/10/21 04:21ID:???
biglobeってどんなだっけ? w
君はこうしてネットに繋げてる訳だろ?
取り合えずJavaとperlはネットに吐き気がする位ドキュメントが転がってる
まずはGoogleに行きなさい、分からない事が有ったらGoogleにキーワードを入れるだけで
関数一つに至るまで、これでもかという位ヒットする、しかもその結果は重み順に並べられている
ここで聞くといつ答えが有るか解らんだろ?、Googleに行けば1秒で望みのWebがヒットする
馬鹿にされることも無いし、ヒットしたWebは他の目的でもとても有用な事が多い
試しに「無料」「サーバー」「cgi」で検索してみてくれ。
0339名無しさん@お腹いっぱい。01/10/21 05:11ID:???
>>335
>オールマイティーな人材を求めていると聞いたので
聞いた?君はそれを確かめたの?
本当に企業はオールマイティーな人材を求めているの?
実際分業が進んでるところでは、デザイナーには
完全にデザインしかやらせないとこもあるんだよ。
入社したい企業があるのなら、そこに直接電話して
「将来お前のところで働きたいんだけど、どんなデザイナーほしい?」
ぐらい訊く根性見せてくれよ。
ま、Webデザイナーにサーバーサイドの知識があったらあったで
便利なんで適当に勉強してくれや。確かに面白いし。
ただし、器用貧乏にならないようにな。
勉強する程度ならbiglobe(あれdionじゃないの?)でも十分だ。

とにかく、自分で判断・確認しなよ。
他人の言うことを鵜呑みにするな。俺の言うこともな。
0340名無しさん@お腹いっぱい。01/10/21 08:16ID:???
ファイルアップロードに付いてですが、
例えばform multi/part で1MBのファイルをアップロードしたとすると
ファイルが完全にアップロードされてから、STDINとApacheとのストリームが結びつく
んでしょうか。それともバッファ分に分割されて順次STDINに入ってくるんでしょうか
後、どこかでpostメソッドの上限は128kbと書かれてたんですが、これはmulti/partの
場合には当て嵌まりませんか? 下らない事ですが、FTPと比べてメモリを大量に消費する
様なら良くないかと気になってしまって、、
034133301/10/21 09:44ID:WcdX3zQj
>>336>>338>>339
助言ありがとうございます。
とりあえず、自作CGIオーケーのbiglobeにでものりかえて実際に勉強しようと
思います。
>ただし、器用貧乏にならないようにな。
あぁ、たしかにそういうこともありがちかもしれませんねぇ。
よく、覚えておきたいです。みなさんありがとうございました。
0342名無しさん@お腹いっぱい。01/10/21 18:00ID:???
$logfile = "data";
open(FH, "$logfile");
@log = <FH>;
foreach $all (@log) {
print $all;
}
close(IN);

とうのを作ったのですがブラウザ上に表示するにはどうすればいいのでしょうか?
0343名無しさん@お腹いっぱい。01/10/21 18:08ID:???
print "Content-type: text/html\n\n";



close(FH);
0344名無しさん@お腹いっぱい。01/10/21 19:22ID:???
>343
どこにprint "Content-type: text/html\n\n";を入れるんですか?
0345名無しさん@お腹いっぱい。01/10/21 19:26ID:???
>344
http://tohoho.wakusei.ne.jp/www.htm
まずここで基本から勉強して来た方がいいよ。

http://tohoho.wakusei.ne.jp/wwwcgi6.htm
ここにはWinでCGIのテストをする方法も載ってる。
くれぐれもWebサーバー上でテストはしないでくれ。
0346名無しさん@お腹いっぱい。01/10/21 19:27ID:???
やったね! ^o^)ノ~~~
0347名無しさん@お腹いっぱい。01/10/21 19:27ID:???
はやく教えてくださいっ!!!
0348名無しさん@お腹いっぱい。01/10/23 01:24ID:???
>>347
何をよ?
0349名無しさん@お腹いっぱい。01/10/24 03:04ID:K36o4fv/
無限世代で返信できる掲示板を作っているのですが
後ちょっとのところで出来ません
スレにつき一個のログ作ってますんで
openしたらあとはそれを並び替えるて書き込むだけなんですが
ちゃんと並んでくれません(書き込み時に並べる方針をとってます)
ログにはその記事のナンバーと返信元のナンバーなどが記録されています
どうか教えてください
0350名無しさん@お腹いっぱい。01/10/24 03:19ID:???
>>349
@ary = (0..20);
@ary1 = sort {$a <=> $b} @ary;
@ary2 = sort @ary;

@ary1と@ary2の違いはわかってるよな?
0351名無しさん@お腹いっぱい。01/10/24 17:33ID:uoazam2k
一対一で会話中は他の人に見られなくて
客が言葉を教えられるような
人口無能チャットありませんか?
0352名無しさん@お腹いっぱい。01/10/24 17:37ID:???
>>347 は人口無能
0353名無しさん@お腹いっぱい。01/10/24 17:40ID:???
>351
板違いだよ
探してくくれる板に行け
0354名無しさん@お腹いっぱい。01/10/24 17:47ID:???
>板違いだよ

スレ違いだろ
0355名無しさん@お腹いっぱい。01/10/26 00:39ID:6VKZEJwr
IEだと化けないのですが、Netscapeだと化けてしまいます。
HTMLが間違っているのかと思い、NNで保存して、それを
読ませると問題ありません。

試しに

print "Content-Type: text/html\n\n";
print "<html><head></head><body>\n";
print "ほえほえ\n";

だけやってみました EUC、SJISどちらも化けます。

どうも昔から NNは CGIの出力だと化けるように思えるのですが…。
0356名無しさん@お腹いっぱい。01/10/26 00:47ID:???
>355
METAタグで文字コードを指定したら?
0357名無しさん@お腹いっぱい。01/10/26 00:49ID:???
テキストファイルの一番上にデータを保存するにはどうしたらいいんでしょうか。
下のやりかたで出来そうなんですが、あまりきれいじゃないので・・・。

open(IN, $datafile);
my @alldata = <IN>;
close(IN);

unshift(@alldata, $newdata);

open(OUT, ">$datafile");
foreach(@alldata){print OUT;}
close(OUT);
0358名無しさん@お腹いっぱい。01/10/26 00:51ID:6VKZEJwr
>>356
もちろんそれも試しました。

<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.01//EN">
<META HTTP-EQUIV=Content-Type CONTENT=text/html; charset=Shift_JIS>

ブラウザでキャラセット変更してもダメなのです。(TДT)
0359名無しさん@お腹いっぱい。01/10/26 00:54ID:???
>357
追記保存にしてreverseするってのが一般的かな?
0360名無しさん@お腹いっぱい。01/10/26 02:23ID:wndpF29s
>>355
使ってるサーバどこ
0361名無しさん@お腹いっぱい。01/10/26 08:49ID:???
>>358
print "Content-Type: text/html; charset=Shift_JIS\n\n";
0362名無しさん@お腹いっぱい。01/10/26 08:51ID:???
>>357
print OUT @alldata;

foreach する必要なし。
0363教えてください01/10/26 19:13ID:lq1ms3Dt
最近ホームページ作りを始めた超初心者です。

フォーム中のテキストフィールドにパスワードを入力して、それを
CGIプログラムに渡す時、"/cgi-bin/login.cgi&passwd=xxx"が
ブラウザのアドレスに出てきてしまいますよね。

この"passwd=xxx"の部分を、なんとか隠す方法ってないもんでしょうか?

初歩的な質問で、ホントにすみませんが、よろしくお願いします。
0364名無しさん@お腹いっぱい。01/10/26 19:18ID:???
>>363
"form メソッド post"で検索してみましょう。
0365どうも!01/10/26 19:44ID:lq1ms3Dt
>364 ありがとうございます。やってみます。
0366名無しさん@お腹いっぱい。01/10/27 18:36ID:???
age
0367質問させて01/10/27 21:03ID:7BskCaCJ
マイヤフーなんかで、ユーザIDとパスワードを入力してログイン
すると、途中で他サイトのページにいっても、そのIDとパスワードを
保持してますよねえ。これって、どんなテクニックを使ってるのだろ?
0368名無しさん@お腹いっぱい。01/10/27 21:10ID:???
たぶんくっきー
0369名無しさん@お腹いっぱい。01/10/27 21:45ID:???
ついでだから訊きたいんだけど、クッキーのビスケットの違いはどこにあるの?
0370名無しさん@お腹いっぱい。01/10/27 22:57ID:???
移転ー
0371名無しさん@お腹いっぱい。01/10/27 23:46ID:???
 クッキーはヨーロッパでビスケットはアメリカ
0372名無しさん@お腹いっぱい。01/10/28 00:58ID:???
>>367
クッキーだよ。
だからクッキー切ってると何もできない・・・
0373質問させて01/10/28 06:59ID:VHP7SlL7
クッキーですね。ありがとございます。
クッキーの読み書きを勉強してみます。
0374名無しさん@お腹いっぱい。01/10/28 14:41ID:D/zGSxyw
最近、CGIでプログラムを書く仕事が増えたのですけど、
Perlって、どうも好きになれんのです。(ややこしすぎ)
それで、やはり慣れてるC言語を使うことにしたんですけど、
やっぱり邪道ですかねえ?
0375名無しさん@お腹いっぱい。01/10/28 15:09ID:???
>>374
好きな言語で書くのがいちばん。
で374の安心のために言うと、C言語でCGIはわりと多数派。
0376邪道??01/10/28 15:18ID:???
職場では、シェルでCGIしてる連中が多いです。
0377名無しさん@お腹いっぱい。01/10/28 15:20ID:???
>>376
QUERY_STRINGとかの解析はどうやるの?
awkとか?
0378名無しさん@お腹いっぱい。01/10/28 15:22ID:???
俺はプロじゃ無いけど、邪道じゃ無いと思う。
仕事ならCの資産も沢山有るだろうし、、
ただワンライナとかヨーイドンで書いたら、Perlの方が絶対早いっすよ
つーかC屋さんが入りやすい様な仕様になってるから、
そう嫌がらずにやってみて下さいな w
型無し兄弟でJavascriptとかと一緒にやると、とっつき易いっすよ多分
それでモジュールの本でも読めば、信じられない位手っ取り速く
物は出来上がる感じかなあ(その分信じられない位遅いけど)
個人的にはPerlでパパッと書いて、高く付く所だけCでじっくり書き直す
って感じでやってますが・・・
0379邪道??01/10/28 15:23ID:???
うんとねえ、SEDで抜き出してます。
038037701/10/28 15:32ID:???
>>379
マジッすか?
Perl使いたくならない?

漏れもCGIが動くかどうかのテストくらいなら、
シェルでやるけど…

恐るべしUnixハカー
0381名無しさん@お腹いっぱい。01/10/28 15:45ID:???
元からShellとかawk極めちゃってる人にはそれほど興味わかないのかもね
その方がUnixっぽいし
Emacsとperlしか使わないとか言う人も多いよね、最近。
0382名無しさん@お腹いっぱい。01/10/28 15:46ID:???
う、何か文脈が変だ。
0383名無しさん@お腹いっぱい。01/10/28 15:52ID:???
Cで書いたCGIって、Linuxでしかコンパイルできないの?
0384名無しさん@お腹いっぱい。01/10/28 15:55ID:zfKGpEKi
意味和歌欄
0385邪道??01/10/28 16:03ID:???
PerlでCGIを書くと、周りの人達から
「Perlなんて誰もメンテナンスできないから、シェルで書くように」
ときつく言われてしまうのですよ。

自分としては、同じ業務で、Bシェル/Cシェル/Bashが混在してる方
がメンテナス性が悪いと思うんですが。
0386381 01/10/28 16:13ID:???
ははは、ご愁傷さま
Unixらーって何でも適材適所で、それを繋げて使うのが好きだよね
だからグルー言語は大嫌いっぽい 
でもEmacsだけは認めちゃうんだよなー (w
0387名無しさん@お腹いっぱい。01/10/28 21:46ID:t4fYupat
sub giko {
my $mona = $_[0];
my $mona += 100; ←ここの my って必要ありますか?
return $mona;
}
0388名無しさん@お腹いっぱい。01/10/28 21:52ID:???
>>387
一度試してから質問して欲しい。
038938701/10/28 21:53ID:t4fYupat
入れるのは間違いでした。
0390名無しさん@お腹いっぱい。01/10/28 22:17ID:8GRVO/dK
掲示板のログは一枚のファイルに保存するのと
レス毎にファイルを作成させるのとどちらがいいですか?
それとも他に良い方法ありますか?
0391名無しさん@お腹いっぱい。01/10/28 22:25ID:???
>>390
状況による
0392名無しさん@お腹いっぱい。01/10/28 22:47ID:jXt5Dm1W
掲示板に於いて、ユーザが書き込みを終え、送信
この時に確認画面を表示させているのですが
ユーザが送信した情報を
<input type=hidden name=*** value=***>
この様にして埋め込み、確認後、再び送信する方法を考案したのですが、
自分でも余りスマートでない気がします。
他の方法はあるのでしょうか?
0393名無しさん@お腹いっぱい。01/10/28 22:54ID:???
サーバ側に一時的に情報を保管し、その情報にユニークなIDをつけ。
それをhiddenやcookieでクライアントに渡し、それを再び受け取る方法。
0394名無しさん@お腹いっぱい。01/10/29 00:30ID:NjUKg3r1
初歩的な質問なんですが、
掲示板作っているんですが、ログファイルの保存は、
タグ付きで保存しているんですが、","などで区切って、
読み出すときにsplitで分けてからタグ付けて表示したほうがいいんでしょうか?
それともタグ付きで保存しといてそのまま表示したほうがいいんでしょうか?

表示速度、読み込み速度、サーバー負担という視点から教えていただけないでしょうか?
タグは2chみたいな感じになるんですが。
0395名無しさん@お腹いっぱい。01/10/29 00:45ID:???
タグってHTMLのタグだよね。
書き込みより読み込みの方がはるかに多い掲示板の場合、
読むたびにタグ付けする処理が入るので大変効率が悪い。
多少ディスク容量を取るが、書き込み時にタグ付けするほうが確実に有利。
ただその場合、仕様変更に対応するのが難しくなるという弊害も。
0396 ◆Perl/FaQ 01/10/29 01:22ID:cGo88HG1

CGIで読むな。
perl起動したらどっちでも同じだな
0397名無しさん@お腹いっぱい。01/10/29 01:23ID:6+6+yN8N
>>392
一時ファイル作れば?
0398名無しさん@お腹いっぱい。01/10/29 01:26ID:???
>>396 意味不明
039939401/10/29 02:18ID:NjUKg3r1
>>395さん速レス有り難うございます。
書き込むときにタグ付けた方が有利なんですね。
参考になります。

厚かましいんですが、もう一つ質問です。
例えばログファイルの一つに100件のデータがあったとします。
そのファイルの、1〜10件までのデータを取りだしたいとします。

$logfile = "log.dat";
open (LOG,"<$logfile");
@log = <LOG>;
close (LOG);
print @log[ 0 .. 9];
↑このやり方だと一度log.datの内容をすべて@logに格納しますよね。

そこで、本には書いてなかったんですが、

$logfile = "log.dat";
open (LOG,"<$logfile");
@log[ 0 .. 9] = <LOG>;
close (LOG);
print @log;
↑このやり方でもできました。
結果は同じなんですが、2番目のやり方だと読み込む量が
すくなくていいような感じがするんですが、勘違いでしょうか?
ほかに読み込む量が少なくてすむ書き方ってありますか?
なんか間違っている様な気がします。
0400名無しさん@お腹いっぱい。01/10/29 07:07ID:???
それで頭の10要素が確保される、全部入れるよりメモリは喰わない
詳しくはマニュアル読んでくれ。
色々やると分かると思うけど、フラットファイルだと、
頭に書き込むのとケツから読み出すのが大変、
ソートしようとすると配列に突っ込んで、弄るのが一番手っ取り早い。
こっちの方がちょっとマシだけど気にすんな while(<>){last if $i>10;$i++;}
0401名無しさん@お腹いっぱい。01/10/29 12:31ID:YLwR1OUG
>>394
サーバー負荷って言っているけど、
実際掲示板を閲覧する時は、CGIから読み出すの?HTMLを読むの?
395で説明した人はCGIから読み出す事が前提の説明ですが、
それに対して396の人はCGIで読み出すなら、
タグを保存するのも保存しないのも"目糞鼻糞"って言っているのでしょう。
根本的にHTMLに書き出してそれを読み込んだほうが速い。
このまま作るとKENTの二の舞。
0402名無しさん@お腹いっぱい。01/10/29 13:17ID:???
別にKENTの二の舞でもいいと思うけど (笑
一つ言っておくと、HTML化とか言って動かなくなったカウンタを
CGIで呼んでたりしたら、まあ殆ど意味無しってこった。
perlのCGIはとにかく起動時に、負荷が掛かる。
ソースが読まれたら、データ構造や配列なんて気にすんなよ
1MBの配列作ったってかまわねえよ(w そのうち慣れんだから
多重投稿防止だかにContent-Locationでcgiリロードなんて駄目駄目
軽くしたのに投稿確認画面付けたりすんのも訳わかんネー
0403名無しさん@お腹いっぱい。01/10/29 13:29ID:???
>多重投稿防止だかにContent-Locationでcgiリロードなんて駄目駄目
この辺ちょっと突っ込みどころか、まあいいや 
0404名無しさん@お腹いっぱい。01/10/29 13:45ID:???
ツッコミどころは他にもあるだろ。まあいいけど。
0405名無しさん@お腹いっぱい。 01/10/29 14:08ID:???
是非話してくださいませ。
0406名無しさん01/10/29 14:33ID:???
何か棘あるけど漏れも同感だなぁ・・・・
例えばチャットを軽量化するとかってどれくらい意味が有るんだろ?Load ave 見れば何にコストがかかってるのか分かると思うんだけど・・・
>>404のつっこみが聞きたいなぁ
0407名無しさん@お腹いっぱい。 01/10/29 14:52ID:Hj4ZWAT1
**ほぼ**正しい
昔どっかのFAQで見た
Q:僕のPERLスクリプトを軽くしたいです。A:無理です、PERL以外で書きましょう
Q:僕の書いたCGIを速くしたいです。A:無理です、他のソリューションを探しましょう
これは核心に近い。セッションを減らす事の方がずっと重い事を忘れては駄目だよ。
0408≠40401/10/29 16:00ID:???
>1MBの配列作ったってかまわねえよ(w
の時点で馬鹿だと思われ。あとは知らん。
0409泉01/10/29 16:36ID:HCVqjE5M
今ゆいちゃっと2000の、複数の部屋の参加者を一気に一覧できるようにするCGIを探しています。
http://www.sakutuu.pos.to/ ここの、「参加者一覧」って所のやつです。。
血眼で探しましたが、全く見つかりません。
CGIに詳しい人が自分で制作するのではって話も聞きましたが、
実際WEBで配布しているらしいです。お願いします、教えてください・・
0410名無しさん@お腹いっぱい。01/10/29 16:48ID:???
お、
>あとは知らん。
(笑

効率perlerクンが多そうなんでウザく書いてみただけだ
薄っすらと思うんだけど、
@ary=<DAT>よりwhile(<DAT>)の方が負荷が掛からないです!
とか当たり前の事鼻息荒くして言うような人がこのタイプだな。
で、htmlだと負荷が低いんです!!! てなる訳  ワラ
所がそいつん所のbbs見たら上に書いたみたいので、挙句に
クッキーが更新されない? だとかでわざわざクッションページ
作ってcgi叩いてやがんの
こう言うのは恥かしいからやめなさいってこった
0411名無しさん@お腹いっぱい。01/10/29 16:49ID:Vp58ZuMT
C++で作成し、IIS上で稼動する、.dllを叩く形式のWebサー
バーアプリケーションを作成しております。
作成した.dllをインストーラに組み込みたいと思いますが、
使用出来るようにするにはIISのWWWルートフォルダ以下に
フォルダを作成し、実行権限を付加しなければなりません。
この実行権限の付加をインストールプログラムから(IISの
外部から)行うことが可能でしょうか。方法ご存知の方おられ
ましたら、教えていただけないでしょうか。
0412名無しさん@お腹いっぱい。01/10/29 17:02ID:???
それInstallShieldでするの?
漏れのはVC++おまけバージョンだけど出来そうに無いっす。
役立たずスマソ
041341101/10/29 17:15ID:Vp58ZuMT
>>412
はい、一応InstallShildを考えています。
ただ、必要であれば、そこから別のバッチ叩いてやることも
考えております。聞いた話では、ASPからIISの有効期限等の
パラメータを変更することが出来るそうなので、そのあたり
の機能を使ってやれるなら、と考えております。
0414名無しさん@お腹いっぱい。01/10/29 19:47ID:???
むー、スマソ漏れにはさっぱりです 死
InstallShieldムズ過ぎ
ム技板のインストーラスレなんかはどうでしょう (´Д`;)
041541101/10/30 09:25ID:4xZv/Zhz
>>414
ありがとう御座います。そちらで聞いてみます。
スレ・板違いすみません。m(_ _)m
0416名無しさん@お腹いっぱい。01/10/30 11:43ID:OUfh+a+D
CGIでmp3ファイルのリストを生成しています。
いったんファイルにセーブして再生する分には問題ないのですが、
ヘッダに "audio/x-mpegurl" を指定して出力すると
Media Playerが起動して(ここまでは望み通り)、
「データが無効です。」
というエラーメッセージが表示されます。

MP3ファイル名は、
(1)ローカル環境のフルパス
(2)呼び出し元HTMLからの相対パス
を試しました
(3)http://からのパスを示すと「再生リストのメディアを再生できませんでした」
となります。

なんとかしてCGIから再生させたいのですがどのへんに問題がありそうでしょうか?
041739401/10/30 14:43ID:Fn7+VhKy
みなさん、レス遅くなってすみません。
>>400さん、有り難うございます。while文使えばいいんですね。
>>401さん、CGIから読み込んでいます。CGIで読むとき、タグ付き、そうでないのとでは、
サーバー負荷や表示速度に体感出来るような差は無いってことですか?
あと、例えばレスが500件あったとして、100〜200件表示、任意の数〜任意の件数表示、
みたいなこと考えているんですが、CGIで読むのと、HTML作らせて読むのとではどちらが有利ですか?
>>402さん、書き込みのCGIと、読み込みのCGIを分けていて、
書き込んだあとで読み込みのCGIにMETAタグで戻して、リロードしてますが重くなりますか?
 で、読み込みのCGIなんですが、ラスト50件表示にしています。
($logfile はログ、$topはページのトップ部分、$bottomはページのボトム部分です。)
(50件以下の場合のプログラムは省略しています、while文は勉強中です。)
open(LOG,"<$logfile");
@log = (LOG);
close(LOG);
print $top,@log[$#log-50 .. $#log],$bottom;
こんな感じなんですが、@logにlog.datの内容をすべて読み込みますよね。
@logにlog.datのラスト50件だけ格納したい場合(効率がいいかどうかはわかりません)、
書き込みCGIにlog.datのカウンターのファイル(レス数)をあらかじめ作らせておいて、
読み込みCGIにカウンターファイル読み込ませてから@LOGに格納させた方がいいでしょうか?
例えば、こんな感じで(log.cutはlog.datのカウンターファイルです)
open(CUT,"<log.cut");
$cut = <CUT>;
close(CUT);
open(LOG,"<$logfile");
@log[$cut-50 .. $cut] = <LOG>;
close(LOG);
print $top,@log,$bottom;
みたいな感じで、この方法だと効率悪いでしょうか?ほかにいい方法ってありませんか?
041841701/10/30 14:58ID:Fn7+VhKy
訂正、10行目の$logfileはログです。→$logfileはlog.datです。
0419初心者01/10/30 15:34ID:eE0Tps3m
洋鳥のパミの変更方教えて下さい。
FFFTP使っています。
アップロードするファイルの属性変更設定でも、
直接変更もできないんです。。。
0420名無しさん@お腹いっぱい。01/10/30 16:21ID:???
洋鳥はパーミッション変更しないでもOKなはずです。
(1年以上前にチェックした時はそうだった)
しかし、動かないCGIがかなり有るので、エラーが出るようなら原因は

・Perlのパスが違う
・記述ミス
・洋鳥では動かないCGI

が考えられます。
0421初心者01/10/30 16:43ID:???
>>420氏
有り難う御座いました。
色々試してみます。
0422仕様書無しさん01/10/30 17:00ID:???
君は相当な効率屋さんみたいだから付き合ってやるよ w
>@log[$cut-50 .. $cut] = <LOG>;
これは全く駄目、500行のファイルだとすると@logには0〜449まで空の要素が
入って、450〜499までに※頭の※50行が入って来る。

ここでgetarryと言う関数を書く事を考えてみる。
getarry($filename,$backnum,$num,$arry_ref);
として呼び出せば、$filenameの最後の$backnum行目から$num行を@arryに
格納してくれるようにしよう。

この関数の中では、ファイルオープン後 例えばsizebuf[128] として
seek DATA,0,2; # まずDATAの終端に飛ぶ
while(1){
seek (DATA,-$sizebuf,1); # buf分戻る、1は現在からの相対指定、-でバック。
sysread(DATA,$buf,$sizebuf); # $bufに$sizebuf分読み込む
# $buf内の改行コード数を得て、$linefeedに追加、省略
last if $linefeed > $backnum;
}
while(1){# 大きくバックし過ぎているかも知れないから今度は進める
last if $linefeed == $backnum;
sysread (DATA,$buf,$sizebuf2); # sizebuf2はログ形式に依存
# $buf内の改行コード数を得て、$linefeedから引く、省略
seek (DATA,$sizebuf2,1); # 進める
}
sysread (DATA,$buf,$sizebuf); # まだファイルポインタは行頭には無い
$j = index($buf,"\n");
seek (DAT,$j+1,1); # これで$backnum行目の位置が確定した
@$arry_ref[0..$num] = <DATA>; # 配列に入れる

こんな感じの処理を行う、大体これが君の求めてるものになる
マジメに書けば100行位になるだろう、これを書くと効率面で
助かるのは以下のとおり
1:ファイルを頭から全読みしないからページ数を設定すればログのサイズは
  どうでも良くなる(ログは100MBでも良い)
2:1と同じ理由で良く有るログの最大保存行数、とかそれに合わせる為の
  ファイル、配列操作が不要になる
3:従ってファイルはほぼ常に追記モードでの書き込みで良いので、ログ飛び
  が比較的起きにくくなる、時々サイズをチェックして余りに巨大なら
  上のルーチンで最終〜行を抜いて捨ててしまえば良いだろう。
こんな感じ、これは原始的なBookmarkの話でageやらソートやらは一切考慮 してないからよろしく。
0423仕様書無しさん01/10/30 17:05ID:???
ああ、台無しだ >>417ね
適当に参考にして頑張ってくれ、ここのread.cgiの動きは参考に
なるだろう、ここのはCだが思いっきり全部読み込んでるけどな w
つーか普通perlでこんな事するのはちょっと変わり者だ
呼び出しに付いては、そのとうり。
セッションを減らす為の工夫をしてくれ。
0424名無しさん@お腹いっぱい。01/10/30 18:12ID:???
フリーで配布されているCGIの殆どは関数だらけなんですが、
関数にする必然ってあるのでしょうか?
0425名無しさん@お腹いっぱい。 01/10/30 18:18ID:???
無いよ別にがんばってね
042642401/10/30 19:09ID:???
>>425
じゃぁ、どうして関数にしてるんでしょう?
0427名無しさん@お腹いっぱい。01/10/30 19:45ID:???
>426 名前:424 :01/10/30 19:09 ID:???
>>>425
>じゃぁ、どうして関数にしてるんでしょう?
ハァ(゚Д゚)?!

と書くより
>>426 (゜∀゜)! アヒャヒャヒャ

と書く方が手っ取り速いから
0428名無しさん@お腹いっぱい。01/10/30 22:59ID:???
>>424
メリットはともかく、デメリットなら幾らでもある。
細かく関数にすると速度が劇的に落ちる。
どうしても関数を作成したいならせめて引数はグローバル変数を通して渡すべき。
同じ言語なら関数ゼロの状態が最高に軽いぞ。頑張れ!
042942401/10/30 23:48ID:???
>>428
ありがとうございます。がんばりマッスル
0430名無しさん@お腹いっぱい。 01/10/31 00:06ID:8Ld6h9BQ
マジレスするならそんな言い方するなよぅ (-_-...
例えば良く使うprint、これもperlの関数だけど、もしこれが無くて
自分でprint関数(にあたる機能)を実装したら500行位になったとする。
これを全部グローバルで呼び出すとどうなる?
何か出力する度に500行づつソースが膨れ上がっていくだろ?
更に、このprint関数(にあたる機能)にあたる部分を修正するとしたらどうする?
それは大変だからprintと言う関数に引数を与えるだけで出力出来れば便利だろ?
それと局所化せずに適当に変数を使いまわしたりすると、変数に予期しない値が
入ったりして潰しにくいバグになる事が多い、書けば書くほどこう言うのを嫌うわけ。
>グローバル変数を通して渡すべき
これは参照を渡せば解決する、

後はどうしても再帰処理したい時、局所化して関数に出来ると凄くありがたい。
0431名無しさん@お腹いっぱい。 01/10/31 00:47ID:???
>それと局所化せずに適当に変数を使いまわしたりすると、変数に予期しない値が
>入ったりして潰しにくいバグになる事が多い、書けば書くほどこう言うのを嫌うわけ。
この部分、有る種類のプログラムを書く人はこう言う事をしてMLなんかに質問を投げてくるが
こんなのは変数に何が入ってるか解らんから答えようが無いんだな。
だからuse strict; my ourしてないソースは添削もしてもらえないと言う危険を伴うわけ
0432名無しさん@お腹いっぱい。01/10/31 01:26ID:???
何も考えずに$iなんて適当な変数名で、ある時はループカウンタ、またある時はステータスフラグ、
ある時はバッファ、そしてある時はリファレンス、ってな感じで1000行位書いてみれ  ワラ
0433名無しさん@お腹いっぱい。01/10/31 05:02ID:???
みんな、ネタにマジレス好きなのね
■ このスレッドは過去ログ倉庫に格納されています