CGIだけど、なんか質問ある? Part 12
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/10/10 00:04:06ID:???※ CGIはウェブサーバ上でユーザプログラムを動作させるための仕組みであり、
Perl等特定の言語に依存するものではありません。
Perlのコーディングに関する質問は、専用スレでお願いします:
[Perlコーディング初心者質問スレ Part 38]
http://pc5.2ch.net/test/read.cgi/php/1097158988/
CGIとPerlの区別がわからない、という人はとりあえずこちらへ:
[△▲ WebProg 初心者の質問 Part10 ▼▽]
http://pc5.2ch.net/test/read.cgi/php/1095633323/
過去ログ・関連スレッドは>>2-10あたりに
0248nobodyさん
04/12/23 01:35:12ID:???例えば、数箇所の掲示板の最初の書き込みタイトルをHTML上に並べるとか。
お願いします。
0249nobodyさん
04/12/23 01:36:01ID:???0250nobodyさん
04/12/23 01:39:12ID:???CGI で表示するのが HTML や JavaScript。
同列に考えんな。
0251nobodyさん
04/12/23 01:40:06ID:???0254nobodyさん
04/12/23 02:26:27ID:???要するに行き付けの掲示板の更新チェックがしたいんだろう?
まず「JavaScriptで」ってことは板違いじゃねーか。
CGIならできるが、JavaScriptはかなり無理くさい。
CGIの場合LWPとかSocketがキーワードになるだろうから調べるといい。
0255nobodyさん
04/12/23 04:38:45ID:???インラインフレームに表示して innerHTML を適切に書き換えればいい。
また、掲示板本体を弄れるんであれば、
ヘッドラインを document.write で吐かせて <script> の src で指定すればいい。
どっちもできないんであれば、>254の通り。
0256nobodyさん
04/12/26 00:56:58ID:dNeoIy6tURLフィルタリングを無効にするようなCGI
は存在していますか?
ページ内語句のチェックまでされていると無理そうですが
URLだけなら、何とかなるのかなと思いまして。
0257nobodyさん
04/12/26 01:35:49ID:???0258nobodyさん
04/12/28 19:09:14ID:???require './cgi-lib.pl';
をいれると
CGIプログラムエラーのため表示することが出来ません。(500 Internal Server Error)
となってしまいます。
require './cgi-lib.pl'; をコメントアウトすると
CGIプログラムエラーのため表示することが出来ません。(500 Internal Server Error)
はでなくなります。
どうすればよいでしょうか?
0259nobodyさん
04/12/28 19:41:59ID:???0260nobodyさん
04/12/28 19:48:34ID:???0261nobodyさん
04/12/28 19:59:44ID:???で、cgi-lib.plをPerlインスコしたディレクトリを探したけど見つかりませんでした。
cgi-lib.plってのはなんですか?どこにあるものですか?
0262nobodyさん
04/12/28 20:04:50ID:???0263nobodyさん
04/12/28 20:58:36ID:???0264nobodyさん
04/12/28 21:52:58ID:???>>261
http://cgi-lib.berkeley.edu/
0265nobodyさん
05/01/04 05:16:13ID:???こちらのページに
> CGIの掲示板にアクセスカウンターを表示しようとしてSSIのタグを入れても表示されません。
> CGIスクリプトの中ではSSIは動作しないからです。
と書いてあります。
が、以前どこかでCGIスクリプトの中に別のCGIの結果を貼り付けるって事が出来るっていう記述を見た覚えがあるんですが、どうでしょうか?
やり方をご教示ください。
言語はPerlです。
0267265
05/01/05 20:01:40ID:???徹夜明けに質問するんじゃ無かったよ。
スマソ
あらためて
index.htmlにアクセスカウンタを表示するのにSSIを使ってます。
<!--#exec cgi="counter.cgi"-->
で、今回CGIが吐き出すページにもSSIの実行結果を貼りたいと考えております。
が、CGIが吐き出すページに<!--#exec cgi="counter.cgi"-->を書いても、SSIの実行結果が貼れません。
何か別の方法でSSIの実行結果をCGIが吐き出すページに貼る事ができますか?
0268nobodyさん
05/01/05 20:10:58ID:???0269nobodyさん
05/01/05 20:17:00ID:???apache2のfilter機能を使えば可能。
でも普通そういう設定はしないし、他のweb鯖の場合は知らん。
管理者さんに聞いてごらん。
0271nobodyさん
05/01/06 15:18:27ID:???onlyoneが配布してあるサイトってないのか。。
本サイトはDLできない
0272nobodyさん
05/01/06 15:32:21ID:???0274nobodyさん
05/01/15 15:33:30ID:NB9cGt7y故あって、アドレスの文字列をEUC-JPにURLエンコードしたいのですが、
そんな事が出来るのでしょうか?
SJIS上で↓
$word =~ s/(\W)/'%' . unpack("H2", $1)/eg;
とやっても、当然SJISのデータしか出てきません。
出来るのであれば、ご教授いただけると嬉しいです。
0276nobodyさん
05/01/16 21:30:09ID:???$temp = sprintf "%02d", $i;
$file = "$note/$temp$ex";
連番でファイルを保存しようとやってみたのだが、
うまくいかない。。。
0278nobodyさん
05/01/17 19:31:40ID:???,0280nobodyさん
05/01/17 20:43:37ID:???0281nobodyさん
05/01/17 23:25:49ID:???以下の内容を読み替えて使ってくれ
$src = '保存ディレクトリ'
if ($file ne "") {
($ex) = ($file =~ m|(\.[^./\\]+)$|);
$num++;
$tmp = sprintf ("%02d", $num);
$newfile = "$src/$tmp$ex";
open(FILE, "> $newfile") or die;
flock(FILE, 2);
if (defined $file) {
while (<$file>) {
print FILE $_;
}
}
close FILE;
此れでどうよ?
ファイル名を取得して、拡張子($EX)と文字列に分ける、拡張子(EX)そのままで、
ファイル名を変更するのだが、$num++で連番を生成、生成した連番を二桁("%02d")で表記($tmp)
$newfile = "$src/$tmp$ex";なのだが、此れは、ファイルのある場所とファイル名を保存するものとみた、
此れでいけると思うがどうよ?
0283nobodyさん
05/01/18 14:31:43ID:???CGI側で作成した.txtにアプリ側から書き込み、こちらへ保存させようとしています
CGI側で作成した
open KEITAI,">>$DataDir\/test.txt";
のパスをアプリへ送るにはどうすればよいでしょうか
友人がアプリの方を作成してまして、パスを貰えればファイルに文字列を記述出来るそうなのですが
物凄い初心者です、すれ違いなら誘導してもらえると助かります
0284nobodyさん
05/01/18 17:06:43ID:???ヒントは/i/ez
0285814
05/01/19 02:11:49ID:p+skwzeWどの程度で動作が重くなったり支障が出てくるものでしょうか?
一般的なものはログの行数を1000行までとしている所が多いようですが。
数MBを超えるようなログはどのような方法で保存が適しているのでしょうか?
0286nobodyさん
05/01/19 09:55:31ID:???use strict;
use warnings;
require "./jcode.pl";
require "./cgi-lib.pl";
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "</HTML>\n";
というtest.cgiを動かすと500エラーが出ます。
jcode.plとcgi-lib.plとtest.cgiは全て同じディレクトリにあり、
全てeuc_jpのlfです。test.cgiは755、*.plは644です。
require "./jcode.pl";の行をコメントアウトすると動き、
コメントを外すと500が出ます。
これはどのような原因が考えられるでしょうか?
0287nobodyさん
05/01/19 10:18:55ID:5+w2R1ze#!/usr/bin/perlの後に
use CGI::Carp 'fatalsToBrowser';
を追加する。
まぁ、大方Perlのパスが間違ってるか、Perlのバージョンが5.005以下でuse warningsに対応してないかだと思うがな。
0288nobodyさん
05/01/19 11:06:33ID:mxYphXm6Software error:
Unrecognized character \x01 at ./jcode.pl line 343.
Wed Jan 19 11:04:26 2005] insert.cgi: Unrecognized character \x01 at ./jcode.pl line 343.
Compilation failed in require at test.cgi line 7.
だそうです…。
>まぁ、大方Perlのパスが間違ってるか、Perlのバージョンが5.005以下でuse warningsに対応してないかだと思うがな。
Perlのパスは/usr/bin/perlであってますね。/usr/local/bin/perlからもシンボリックリンク
張ってるのでどちらからでも行けますが。バージョンは5.6.1です。
0290nobodyさん
05/01/19 11:45:46ID:mxYphXm6原因は何ですか?
jcode.plのバグだとは思えませんが。
0292nobodyさん
05/01/19 12:19:34ID:mxYphXm6ここの
http://www.srekcah.org/jcode/
これですが。
http://www.srekcah.org/jcode/jcode.pl-2.13
ちなみに343行目は
$esc_0208 = "\e\$$esc_0208" if length($esc_0208) == 1;
あとググれってのは何をでしょうか?
0293nobodyさん
05/01/19 15:52:23ID:???それにinsert.cgi:とは何よ?
なんにしてもお前の書いたコードに間違いがあるだけ。
0294nobodyさん
05/01/19 16:59:38ID:???そこから今ダウンロードしてみたけど343行目はそこじゃなかったよ。
ファイルが壊れてるんじゃないの。
jcode.plをダウンロードしなおしてみたらどう
0295nobodyさん
05/01/19 17:34:10ID:sZQcp1a5>>1
↑みたいなリンク先を表示している所をクリックした時に
一緒にデータを送りたいと考えています。
送り先はCGIで、そのリンク表示している文に関連するデータを受け取って
それの一覧を表示できるようにしたいのです。
フォームの送信ボタンをクリックした時と同じような感じです。
何か方法はあるでしょうか?お願いします。
0297295
05/01/19 18:30:34ID:sZQcp1a5CGI名の後に?をつける方法ですか?
〜CGI?name=$変数名
みたいにするので大丈夫ですかね?
0299295
05/01/19 19:47:25ID:sZQcp1a5上の文をリンク先に貼るだけでいいんですよね?
受け取り先のCGIがどこか間違っているんでしょうか?
0301295
05/01/19 20:52:24ID:sZQcp1a50302nobodyさん
05/01/20 03:30:40ID:???ttp://inferno.x-eye.net/main/index.shtml
このサイトにあるような簡式BBSなんですけど
うちのサイトにも同じもの使おうと思っていろいろサイト回って探したけど
こういうCGIはみつからない…
これってもしかして自作?
もしどっか公開してるとこあるならよかったら教えて欲しいです。
0303nobodyさん
05/01/20 03:45:58ID:???【CGI】こんなCGI探してますver.15
http://pc5.2ch.net/test/read.cgi/hp/1097762828/
0305nobodyさん
05/01/20 15:24:10ID:6RTB33WG処理を行うプログラムをファイル分けするのが
一般的だと思うけど、HTMLファイル内に埋め込む
置換用の文字列ってみんなどんな書き方してる?
ちなみにオレは %__、 __% でくくってる。
<body>
%__message__%
</body>
みんなはドン何?
0307nobodyさん
05/01/20 16:37:13ID:???<?foo-incl message?>
0308nobodyさん
05/01/20 16:57:29ID:???PerlのCGIなんですが、以下のようなコードをシェル上で実行するとシグナルを捕まえられるのですが
CGIとして呼び出すとタイムアウトします。
どなたか原因分かる方おられませんでしょうか。
Perlがバージョン5.8.4、Apacheが2.0.52のsuexecありです。
CGIはmod_perlではなく独立したプロセスとして呼び出しています。
----ここから
#!/usr/bin/perl
print "Content-type: text/html\n\n";
eval
{
local $SIG{ALRM} = sub { die "timeout" };
alarm 2;
sleep (10);
};
alarm 0;
if ($@)
{
if ($@ =~ /timeout/)
{
print ("しぐなるげっと");
exit;
}
}
print ("しぐなるろすと");
exit;
----ここまで
0309通りがかり質問人
05/01/20 18:47:22ID:ZFFWUrXl例えば仮にhttp://XXX.com/というディレクトリーがあったとして、
そのhttp://XXX.com/の後に例えばwww://yyy.com/test.mp3と書くとリンクが付くページを表示するようにしたいんです。
つまり、上記の場合、http://XXX.com/www://yyy.com/test.mp3にアクセスすると、
http://www://yyy.com/test.mp3へのリンクがついたページが表示するようにしたいんです。
これを実現するために私が考えたのは以下のソースです。
ファイル名はindex.cgiにしました。これによって、index.cgiを省略できるからこれで実現できそうと思ったのです。
しかし、これではhttp://XXX.com/以下もディレクトリまたはファイル名と見なされてnot foundになってしまいます。
パラメータを示す「?」を付けないと、つまり、
http://XXX.com/?www://yyy.com/test.mp3と書かないと実現できません。
「?」を書かないでhttp://XXX.com/www://yyy.com/test.mp3で実現できるようにしたいんです。
よろしくお願いします。
つまり、2chにURLを書いた場合に表示されるこれと同じ機能を作りたいわけです。
http://ime.nu/www.yahoo.co.jp
次の書き込みにソース書きます。
0310通りがかり質問人
05/01/20 18:47:52ID:ZFFWUrXl##############ここから################################################
#!/usr/local/bin/perl
$buffer = $ENV{'QUERY_STRING'};
print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
if($buffer eq ""){
print "<title>CGI</title>\n";
print "</head>\n";
print "<body>\n";
print "<h1>\$bufferが空ならこれを表\示</h1>\n";
}else{
print "<title>右クリできるようにする</title>\n";
print "</head>\n";
print "<body>\n";
print "<h1><a href=\"http://$buffer\" target=\"_blank\">http://$buffer</a></h1>\n";
}
print "</body>\n";
print "</html>\n";
###############ここまで###################################################
0311nobodyさん
05/01/21 01:10:18ID:AR9vVUmKこのぐらいの数を管理するのに良い方法ってありますか?
使っているサーバはPHPは使えません。
今まで修正・削除などを
「ファイル開く→全データ取り込む→該当データを検索→処理→処理結果を反映して保存」
この単純な方法でやってきたんですが、もっと良い管理方法がありますか?
0312311
05/01/21 01:12:58ID:AR9vVUmKできれば慣れているPerlで良い方法があればいいのですが、
それよりも良い方法があればそれも勉強してみます。
0313nobodyさん
05/01/21 01:42:18ID:???つーか、何か困った事が起きてるのかどうかさえ分からん。
悩みが無いなら何もしなくてよろし。
0314308
05/01/21 10:26:43ID:3fuNtqobSIGKILLを自分に投げつけると終了し、SIGTERMを自分に投げつけても終了しない
という挙動を見るに、シグナルハンドラが上手く書き換わってないのかとも思うんですが
どなたか同様の症状を経験した方おられませんか……
#include <stdio.h>
#include <signal.h>
void sig_alarm(int sig)
{
printf("get\n");
}
main()
{
printf("Content-type: text/html\n\n");
signal(SIGALRM, sig_alarm);
alarm(1);
pause();
exit(0);
}
↑これをコマンドラインから実行するときちんとシグナルを受け取ってくれますが、
CGIとして実行するとpause()で止まります。
0315nobodyさん
05/01/21 11:22:15ID:???<FORM METHOD="POST" ACTION="sub.cgi">
の中からグローバル変数として参照したいんですが、どうやるのが一般的でしょうか?
use strictしてるので$varの宣言で何もつけないの怒られるのです
0318nobodyさん
05/01/21 11:39:25ID:???あっと、それではsub.cgiの中でrequire "subsub.pl"したとして
subsub.plの中からsub.cgiにhiddenで渡した$varを参照するのはどうやるのでしょう
0320nobodyさん
05/01/21 12:05:31ID:???requireした行の時点でsubsub.plの内部の変数がチェックされますか?
requireした後でmy $var = $form{'var'};して、その後でsubsub.plの
$varを使うサブルーチンを呼び出してるのですが、500が出ます
0322nobodyさん
05/01/22 01:27:23ID:???read (STDIN, $buffer, ENV{'CONTENT_LENGTH'};
のように文字列を読み、$bufferをファイルに出力したところ
改行部分までしか書き込んでくれなかったのですが
改行より後ろの部分も書き込ませることは出来ないのでしょうか?
改行までしか入ってないとかそういうのなんでしょうか
初歩的っぽい質問ですません
0323nobodyさん
05/01/22 14:56:53ID:LxfbGLyv色々な振り分けCGI試してみたんですが、真っ白の画面でるだけで困ってます。
試行錯誤していると、どうもLocationが動いてないみたいなんです。
Locationを有効にする方法知っておられましたらご教授下さい。
環境
ActivePerl 5.8.6
Tomcat 5.0.28
0324nobodyさん
05/01/22 15:45:39ID:???鯖がLocation使えることは確認してあるのか?
レン鯖だと使えないところもあったり広告などで邪魔されることもあるが。
0325323
05/01/22 16:19:25ID:LxfbGLyvレスどうもです。
現在はTomcatで自鯖立ててます。
なるべく色々な物入れたくないのでアパッチとの連携もしてません。
現状はTomcatのweb.xmlでCGIの制限を解除して使用出来る状態にしています。
実際表示するだけのような簡単なものは動いてます。
Locationが使えないのは鯖ソフトの問題なのかPerlの問題なのか分かりますでしょうか?
0326323
05/01/22 16:47:32ID:???アパッチと連携するかANHTTPDを入れるしかなさげです。
おさわがせしました(\_\);
0327nobodyさん
05/01/23 09:35:34ID:8w5I42sB0328nobodyさん
05/01/23 23:11:18ID:???#!/usr/bin/perl
use strict;
use warnings;
require "hoge2.pl";
our $foo = "foo";
main();
sub main { main2(); }
#### hoge2.pl #######
#!/usr/bin/perl
use strict;
use warnings;
sub main2 { print $foo; }
これって
Global symbol "$foo" requires explicit package name at ./hoge2.pl line ...
が出るんですが、どういう宣言をしたらhoge2.plのmain2()から$fooが見えるようになるのでしょうか?
0329nobodyさん
05/01/23 23:38:58ID:???print $main::foo;
print $::foo;
print $main'foo;
print $'foo;
0331nobodyさん
05/01/26 14:37:52ID:???昔の geocities っぽい奴がよくて、入力ページと閲覧ページが別れてる感じのやつ。
入力ページは .cgi もしくは .cgi にデータを投げる。
そいで 閲覧ページは .html 。みたいな。
よろっ!
0332nobodyさん
05/01/26 15:00:02ID:???板違い
【CGI】こんなCGI探してますver.15
http://pc5.2ch.net/test/read.cgi/hp/1097762828/
0333331
05/01/26 15:10:09ID:???0334nobodyさん
05/01/26 17:29:58ID:???0335nobodyさん
05/01/28 00:07:04ID:e7pglxYxいろいろとCGIの説明サイトみたいなところも行ってみたのですが、
何がなんだかって状況です。
目的は微妙に改造した掲示板設置です。
どなたか、もし良ければメッセでも使って教えてもらえませんでしょうか?
0336nobodyさん
05/01/28 00:07:44ID:???0338nobodyさん
05/01/28 05:59:39ID:???無駄レスになるのでやめましょう。
0339nobodyさん
05/01/28 08:10:59ID:???telnet だと動作するんですが、Web経由だと処理が長すぎてタイムアウトしてしまうCGI
があります。このようなタイムアウトしてしまう CGI は、処理は最後まで終了しているの
でしょうか?
また、 プログラムの処理を最後までまたずに、表示をだしておき、裏ではプログラムを
最後まで処理させることはできるのでしょうか?(もはやCGIじゃないんですが) html を
生成しておき、後で html を見せる様にしたい。
0340335
05/01/28 16:37:04ID:???すみません。
内容不足でした。
分からないというのは、基本的に全てです。
HTMLの知識は一応ありますが、
FFFTPやアップロードなどほとんどのことが分からない状態です。
これでも、一応努力してみたのですが、一向に解決の方向に向かわないので、
ここに助けを求めに来させていただきました。
報酬などはないのですが、もしよければ教えていただきたいです。
0341nobodyさん
05/01/28 17:13:53ID:???ってか、多少は自力で調べなさいよ
0343nobodyさん
05/01/28 22:27:58ID:???努力したんなら、努力した結果を見せてください。
苦労するのはヤダ、結果だけクレクレなんてのは誰にも相手にされないよ。
0344nobodyさん
05/01/28 23:03:45ID:???0345nobodyさん
05/02/01 18:05:15ID:???0346nobodyさん
05/02/01 18:08:33ID:???■ このスレッドは過去ログ倉庫に格納されています