• 締切済み

別CGIファイルから変数を呼び出す方法

CGI勉強中です。 環境設定を1つにまとめたいと思っているのですが、どのようにしたらいいのかがわかりません。 あるCGIを見ると、「$Hod」というのを使って実現していました。 呼び出したい項目を「$HoD->{settei}{hensuu}」という風にしていました。 呼び出すCGIファイルの指定は my$config = &open_config ($settei); my %HoD = (); @HoD{"settei} = ($settei); この部分だと思うのですが、これだけでOKでしょうか? 呼び出したいCGI(このファイルに$page="xx.htm"等と書き込む)を"main.cgi"とした場合、 実際変数を使うファイルには my$config = &open_config ($main); my %HoD = (); @HoD{"main} = ($main); として、変数が必要なところには $HoD->{main}{page} でいいでしょうか? また、この場合、"my$config~~"はどの位置に配置したらいいのでしょうか? …もちろんそのCGIの種類によって具体的な場所は違うとは思うのですが… お願いします。

  • CGI
  • 回答数1
  • ありがとう数1

みんなの回答

  • kaiman
  • ベストアンサー率0% (0/8)
回答No.1

あまり難しい方法はわからないんですが、 単純に、変数をまとめたファイルを一つ作り、 その他の cgi で参照させる際に、頭の方で、 require '/cgi/setting.pl'; とかいう具合にインクルードさせる方法ではダメでしょうか。

master-3rd
質問者

お礼

返答ありがとうございます。 誰からも返答がなかったので、自力でいろいろい調べていたら言われるとおりの方法が一番簡単に出来るということを知りました。 すべてのCGIの変数を抜き取って"config.pl"に保存することにしました。 ありがとうございます。

関連するQ&A

  • "$"を変数に入れる

    CGIを改造中です。 変なことをしているかもしれませんが、変数に$と別の変数を入れたいんです。 「xx.cgi?h=1」でCGIに変数を送り、$hensuuに「$hen1」と代入したいんです。 で、以下のようにやってみました。 $hensuu = '$hen'; もちろん、「print "$hensuu\n";」とすると「$hen」と表示します。 $hensuu = '$hen'$h;や $hensuu = '$hen'"$h";とすると、エラーになりストップします。 どのようにしたらうまくいくのでしょうか?

    • ベストアンサー
    • Perl
  • 変数を使ってファイル名を自分でつけたい。

    フォームを使って、自分でファイル名をつけたdatファイルを サーバー上に保存するプログラムを書いているのですが、 変数をファイル名に指定するところがうまくいきません。 asperlを使ったローカルのテストではうまく自分がつけた名前のファイルを生成してくれますが、 実際にサーバー上で実行すると.datというファイルしか出来ません。 何か構文的な間違いがあるのでしょうか? 分かりにくい質問かとは思いますが、ご回答お願いいたします。 #cgi-lib.plからformの情報を取り出し &ReadParse(*form); $fn=$form{'filename'}; $main=$form{'main'}; #$mainの情報を、「変数.dat」に書き込み open(MAIN,">${fn}.dat"); print MAIN "$main"; close(MAIN);

    • ベストアンサー
    • Perl
  • 受け取った変数がファイルに書き込めない

    Perlで質問があります。 Perlでフォームから受け取った変数の値($title = “333”)を別にCGI 投げます。Printでは問題なく変数の中身が表示されるのですが Txtに書き込もうとするとうまくいきません。 ちなみに行頭で$title = “333”;すると書き込めます。 うまく受け渡しができていないのでしょうか? 以下ソースです。 #!/usr/bin/perl -w require 'lib.pl'; #########i一応lib.plの中身######### $q = new CGI; $q->charset('EUC-JP'); print $q->header; $title = $q->param('title'); ################################## use CGI; my $fname = 'news.txt'; open(FILE, ">>$fname") or die; print FILE $title ; close(FILE);

  • CGI.pmで取得したファイルハンドルを変数にいれるとファイル名のみになる・・・

    perlにて、 use CGI; my $q = new CGI; my $ufh = $q->upload('file'); などで$ufhにファイルハンドルを受け取り、 この直後で、アップロードなどを行うと正常に行われるのですが、 別の関数に渡してからアップロードを行うとファイル名がついた0バイトのファイルがアップロードされます。 &test($ufh); test($){ $filename = $_[0]; while(read($filename , $buffer, 1024)){ $file .=$buffer; } my $basename; my $exp; my $files; my $newfile; my @files = split(/\\/, $file_name); ($basename, $exp) = split(/\./, $files[-1]); $newfile = $basename . "." . $exp; open(FILE, "> /tmp/$newfile"); binmode(FILE); print(FILE $files); close(FILE); } ファイルハンドルを変数に格納して持ちまわすことはできないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • cgiの変数をhdmlに渡すことはできますか?

    hdmlコンテンツを作成しているのですが、hdmlのファイル#1からgosubでcgiのファイル*1に行き、printをつかってhdmlのファイル#2を表示しています。そのファイル#2にcgiのファイル*1で処理した変数を渡し、再びcgiのファイル*1に行きたいのですが、うまく行きません。 このような処理は不可能でしょうか? 下記のソースの$s1,$s2の部分が処理した変数になります。 print "Content-type:text/x-hdml;charset=Shift_JIS\n\n"; print <<"EOT"; <HDML VERSION="3.0" PUBLIC="TRUE"> <display name="test"> 進む <action type=accept task=gosub dest=*1.cgi label=進む method=post postdata=s1=$s1&s2=$s2> </display> </HDML> EOT

    • 締切済み
    • CGI
  • 任意の文字列を変数にする方法

    お世話になります。 掲題の件につきまして質問させていただきます。 テキストファイルに記述されている文字列を ルールにのっとり、読み込んだ変数に置き換える方法が よくわかりません。 ご存知のかたがいらっしゃいましたらどうぞご教授ください。 例) <テキストファイル> ☆☆☆$hensuu☆☆☆ <vb> (1)テキストファイルより、上記文字列を取得 (2)$以下の文字列(hensuu)をvbで宣言した変数(hennsuu)と置き換える。 (3)vb側でhennsuu = 100とすると、 vbからテキストファイルを読み込んだ時点で hennsuuに”☆☆☆100☆☆☆”と代入される。 わかりづらい例で申し訳ありませんがどうぞよろしくお願い申し上げます。 失礼いたします。

  • URL変数が定義されているかどうか調べる

    PHPで、http://127.0.0.1/test.php?hensuu=Y というページをオープンした場合、 echo $hensuu; if (defined("hensuu")) { echo "Y"; } else { echo "N"; } 最初のecho文ではちゃんと"Y"を出力されるにもかかわらず、次のif文では"N"と出力されます。 URL変数が入力されたかどうかを確認するのにdefinedは使えないのでしょうか?

    • ベストアンサー
    • PHP
  • cgi(perl)でアップロードされたファイルを保存する方法について

    ファイルをアップロードするフォーム"form.html"(method="POST" action="/cgi-bin/form.cgi")を書きました。 ファイルを保存する方法について疑問があるので教えて下さい。 http://www.ss.iij4u.or.jp/~somali/web/_perl_upload.html 上記URLを参考にしました。 下記の変数"$filename"には、アップロードしたファイル名(image.jpgなど)が入っています。 (アップロードされたファイル名と保存するファイル名を同じにしました。) #------------------------------------------------------------ open (OUT, ">$filename") || die "cannot open"; binmode (OUT); $i=1;#ループ回数とアップロードされたファイルのサイズの比較の為。 while(read($filename, $buffer, 1024)){ print OUT $buffer; $i++; } close (OUT); close ($filename) if ($CGI::OS ne 'UNIX'); # Windowsプラットフォーム用 print "whileループの数: $i<BR>"; #------------------------------------------------------------ while文について。 while(read($filename, $buffer, 1024)){ print OUT $buffer; 上記の2行は、1024バイトづつ$filename(アップロードしたファイル名)から読み込み、$bufferに格納。 $bufferに格納されたデータをOUTで指定した部分に書き込む、そしてそれを繰り返す。 こう理解していますが間違いないでしょうか? ファイルサイズが予想できれば、whlie文を使わずに read($filename,$temp,10000); print OUT $temp; このようにしても問題ありませんか? read関数について教えて下さい。 書籍などには、 read(FILEHANDLE,$data,1024); こう書いてありますが、上記例でFILEHANDLEを変数名$filenameにしても問題なく動作しました。 FILEHANDLEでなく、変数$filenameでも問題無いのでしょうか? FILEHANDLEと$filenameは何を示しているんですか? ファイルの先頭アドレスでしょうか? $filenameにはアップロードしたファイル名が入っているのにどうして動くのだろうと疑問に思っています。 乱文で申し訳ありませんがご教授下さい。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • ファイルをアップロードするCGI

    ファイルをアップロードしたいCGIが欲しく サンプルをみつけたのですが、このCGIだと ファイルをアップロードしたときに、ファイル名がアップロードした時刻になってしまいます。 ファイル名を変更することなく、アップロードするにはどう変更すればよいのでしょうか? お願いします。ちなみにアップロードしたいファイルの種類はエクセル形式のファイルです。 プログラムは以下のようになってます。 #!/usr/bin/env perl use strict; use CGI; use CGI::Carp qw(fatalsToBrowser); use POSIX qw(strftime); my $q = new CGI; print $q->header(), $q->start_html(); #print $q->dump; # for debug my $outputdir = "log"; # ファイルを置く先 (ディレクトリ) my $fh = $q->param('uploaded_file'); my ($ex) = ($fh =~ m|(\.[^./\\]+)$|); # 拡張子 if ($fh ne "") { my $timestamp = strftime "%y%m%d%H%M%S", localtime; my $outputfn = "$outputdir/$timestamp$ex"; open(F, "> $outputfn") or die; flock(F, 2); if (defined $fh) { while (<$fh>) { print F $_; } } close F; print qq{saved as <a href="$outputfn">$outputfn</a>}; } print $q->start_multipart_form(-name => 'myform'), $q->filefield(-name => 'uploaded_file'), $q->submit("OK"), $q->endform, $q->end_html(), "\n";

  • JavaScriptの値を、cgiに渡す方法を教えてください。

    JavaScriptの値を、cgiに渡す方法を教えてください。 jsファイルの変数に、テキストボックスの入力値が入っています。 それを、cgiに渡して、その変数の値を、ファイルに 書込みたいと考えています。 __test.html_________ <head><script src="keep.js"></script></head> <form name="f1" action="keep.js"> <input type="text" name="a_text"> <input type="button" value="クリック" onclick="keep()"> </form> _________________________ ___keep.js_______________ function keep() { var a_text = document.f1.a_text.value; ■この変数「a_text」をcgiファイルに渡したいです。 } __________________________ __●.cgi_______________ ■なんだかの方法で、上記keep.jsの変数、a_textを取得して、 この●.cgiでファイルをopenして、a_textの値を 書込みたいです。 ______________ よろしく、お願いします。

専門家に質問してみよう