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あたりに
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:???0347nobodyさん
05/02/01 21:53:14ID:+F7XYI5fhtmlに↓埋め込んで
<FORM ACTION="jump.cgi">
<SELECT NAME="jumpto">
<OPTION VALUE="-" SELECTED>番号</OPTION>
<OPTION VALUE="hogehoge.html#1">1</OPTION>
</SELECT>
<INPUT TYPE="submit" VALUE="移動">
</FORM>
jump.cgiが↓こんな感じなんだけど
$querybuffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/,$querybuffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
if( $name eq "jumpto" ) {
$jumpto = $value;# 移動先
htmlファイルには飛ぶけどアンカーポイントにとばないです。
#じゃあだめなんでしょうか?
0348nobodyさん
05/02/02 01:33:16ID:zrrrnMEvソースを見ていると頻繁にこういうソースがあるのですが、この<br>って意味あるのでしょうか?
if ($re) { print "<td width=32><br></td>\n"; }
この<br>を削除しても問題ないなら、消したいのですが、意味がわからなくて。
0349nobodyさん
05/02/02 01:35:42ID:???0351nobodyさん
05/02/02 07:27:37ID:???GETで送ると#以降は無視されるからCGIには届かない
POSTで送ったらいいんじゃないの
>>348
Perl的には問題ないので消したければ消せばいい
テーブルの見た目が変わる。
0352nobodyさん
05/02/02 16:43:55ID:P9Pjm33o超初心者にも解るように解説してるサイトを
教えてください
0353nobodyさん
05/02/02 17:38:55ID:???<title>選択</title>
</head><body>
選択
<form method>="post" action="../cgi-bin/query1.cgi">選択<br>
<select nane="job"multiple>
<option value="1"selected>あ
<optio> value="2">い</select><br>
<input type="submit"value="OK"><br>
<input type="reset"value="リセット"><br>
</form></body></html>
選択数を3個4個と増やしていくにはどうすればいいですか?
0355nobodyさん
05/02/02 19:48:35ID:???0357nobodyさん
05/02/02 20:12:38ID:???0363nobodyさん
05/02/03 14:19:18ID:???http://pc5.2ch.net/test/read.cgi/hp/1065089862/l50
0364nobodyさん
05/02/03 20:01:31ID:in8OAwzZ今、掲示板スクリプトのproxy判定書き換えやってるんすけど、
if($HOST !~/jp$/ && $SETTING{'BBS_OVERSEA_PROXY'} eq "checked") {
DispError("ERROR!","ERROR:PROXY規制中!");
}
これだと、proxy制限した時にYAHOOまで弾いちゃうんすよ。
でもYAHOOユーザー多いんで、何とかしてYAHOOを弾かないようにしたいんすけど、
if($HOST !~/jp|bbtec.net$/ && $SETTING{'BBS_OVERSEA_PROXY'} eq "checked") {
DispError("ERROR!","ERROR:PROXY規制中!");
}
これでいいっすかね?
ちなみにperl checkerでは、これでsyntax okって出るし、jpドメインからのスレ立ては問題なくできるっす。
0367nobodyさん
05/02/05 14:19:02ID:51aC/gIBこんな感じで
携帯で表示できる
誰でも登録できる
自己紹介のレンタルを探しています!
誰かお願いします!
0368nobodyさん
05/02/05 14:23:56ID:???板違い
【CGI】こんなCGI探してますver.15
http://pc5.2ch.net/test/read.cgi/hp/1097762828/
0369nobodyさん
05/02/05 21:17:29ID:???念のため「最新の状態に更新」ってやるんですけど
CGIをちょっと手直しした場合も同様でいいんでしょうか。
素人考えだと、吐き出した(テンポラリの)HTMLを再度読んでいるだけのような
気もするので。
0370nobodyさん
05/02/05 21:30:59ID:???キャッシュを読むのは、単に更新したときだと思う。
0371nobodyさん
05/02/06 15:42:31ID:???0372nobodyさん
05/02/06 15:48:30ID:???0373nobodyさん
05/02/06 16:16:50ID:???@はURLエンコードされるって書いてあるのですが、IEでやってみたら
%40になりはしなかったのですが普通@はデコードが必要なんでしょうか?
教えてください。
0374nobodyさん
05/02/06 16:34:56ID:???どう確かめたのかわからんからなったならないはどうでもいいが、
普通はいちいち文字を区別などせず全部デコードルーチンに
突っ込むのが手っ取り早い。
0375nobodyさん
05/02/06 16:59:14ID:???0376nobodyさん
05/02/06 17:35:54ID:vnAQbb+hperlで書いたCGIスクリプトの中にCSSを埋め込みたくて
こんな感じでHTMLのヘッダー部のサブルーチンを作ったのですが
#--------------#
# HTML記述 #
#--------------#
sub header {
print "Content-type: text/html\n\n";
print "<html>\n<head>\n";
print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=Shift_JIS\">\n";
print "<LINK rel="stylesheet" type="text/css" href="./style.css">\n";
print "<title>estate</title></head>\n";
print "<body>\n";
}
print "<LINK rel="stylesheet" type="text/css" href="./style.css">\n";
ここがエラーで弾かれてしまいます
Bareword found where operator expected at tmp.pl line 252, near "" (Missing operator before stylesheet?)
Unquoted string "stylesheet" may clash with future reserved word at tmp.pl line 252.
syntax error at tmp.pl line 252, near ""String found where operator expected at tmp.pl line 252, near "stylesheet" type=""
Bareword found where operator expected at tmp.pl line 252, near "" type="text"
(Missing operator before text?)
Unquoted string "text" may clash with future reserved word at tmp.pl line 252.
Unquoted string "css" may clash with future reserved word at tmp.pl line 252.
String found where operator expected at tmp.pl line 252, near "css" href=""
Bareword found where operator expected at tmp.pl line 253, near "print "
CGIにリンキングスタイルシートのCSSの埋め方教えて下さいおながいします。
0377nobodyさん
05/02/06 17:37:02ID:???0378nobodyさん
05/02/06 17:37:38ID:???こここぽおおおおおおおおおおエスケープしてねぇえぇえ</b>sだあああああああああああろお
0379nobodyさん
05/02/06 17:48:42ID:???0380nobodyさん
05/02/06 18:23:04ID:vnAQbb+h>>378
ちょいと日本語が理解できないが
print "print "<LINK rel=\"stylesheet\" type=\"text/css\" href=\"./style.css\">\n";
こういうこと?
■ このスレッドは過去ログ倉庫に格納されています