ふとしたことで、cgiからcgiを呼び出す必要に迫られてしまいました。そこで、呼び出す側はsystem()でやるとして、引数はどのように渡したらいいのでしょうか。
ブラウザでは、メソッド指定で呼び出せますが、コマンドラインでgetまたはpostで渡す方法というのはありますか?

/hoge.cgi?name=value
というのをPOSTでやりたくて、

$tmp = "name=value";
system("echo $tmp | perl hoge.cgi");

とか試して爆沈しました...(汗

このQ&Aに関連する最新のQ&A

A 回答 (2件)

main.cgiというメインのCGIから


http://www.foo/fuga/cgi-bin/hoge.cgi?name=onamae …
を呼び出すという想定で、方法を2つほど御紹介します。

その1
引数をコマンドラインオプションとして渡す。具体的にはmain.cgiの中で

$name="onamae";
$id="1000";
system("perl hoge.cgi $name $id");

などとして呼び出します。hoge.cgiでは

$name = $ARGV[0];
$id = $ARGV[1];

とすればとりあえず引数を渡すことはできます。

その2
locationを使ってブラウザから呼び出させる。具体的にはmain.cgiの中で

$name="onamae";
$id="1000";
print "Location: http://www.foo/fuga/cgi-bin/hoge.cgi?name=${name}&id=$id\n\n";

としてやります。この場合ブラウザは
http://www.foo/fuga/cgi-bin/hoge.cgi?name=onamae …
の処理結果を表示しようとしますので、hoge.cgiがhtml出力をしないCGIだとmain.cgiを呼び出した段階でブラウザが止まってしまいます。

どちらもやったことはあるので経験者としておきます。私の場合は思い通りに動きました。
pythianさんの環境でうまくいくかどうかはわかりませんが。
    • good
    • 0
この回答へのお礼

コマンドラインから引数を渡したことが無かったので、ARGVで取り出せるのは初めて知りました。ブラウザが前提の設計でstdinから読ませていると、そのままではダメなんですね。
その2も大変参考になりました。ありがとうございました。

お礼日時:2001/12/28 15:30

やった事が無いのですが、考えられる方法だけ。



post形式で送るなら
system("perl hoge.cgi $tmp");
で行けないですかね?

get形式なら、
環境変数の「QUERY_STRING」に値を放り込んで、
後はcgiを呼べば良いと思うのですが...。

後、環境変数に「REQUEST_METHOD」に、GET形式かPOST形式かの種別を入れて置く方が良いのかも。
    • good
    • 0
この回答へのお礼

なるほど、環境変数というのをすっかり忘れていました。
また、どうやらcgiの呼び出し元と呼び出し先で全く同じルーチンを使って引数を読んでいたので、内容が上書きされてしまっていたようです。無事に解決しました。ありがとうございました。

お礼日時:2001/12/28 15:28

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qブラウザを使わずコマンドプロンプトなどからwebページへアクセス(送信)する

DNS更新の操作で、アカウントとパスワードを設定してドメイン提供サイトの更新ページへアクセスする。という作業があるのですが、これをブラウザを使わずワンクリックで行えるプログラムを作ろうと思っております。

DNSサービスはddoで以下の形式で更新ページへアクセスすることでドメインの更新ができます。
(http://)freeddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード&ip=IP

クリックしたときにコマンドプロンプト呼出の形式でブラウザを立ち上げることはできたのですが、更新のたびにブラウザが立ち上がり消すのは手動になってしまいどうにも気に入りません。
おそらく上記のページにアクセスするだけで更新はされるのだと思うのですが、ブラウザを使わずバックグラウンドでアクセスだけをさせる方法はないでしょうか?
(思いつくワードで検索したところPerlを使うというページがいくつか見受けられたのでこちらで質問させて頂きました。)


なお、登録したいIPがVPNのIPであるため、DiCEを使うという手段は使えません。

DNS更新の操作で、アカウントとパスワードを設定してドメイン提供サイトの更新ページへアクセスする。という作業があるのですが、これをブラウザを使わずワンクリックで行えるプログラムを作ろうと思っております。

DNSサービスはddoで以下の形式で更新ページへアクセスすることでドメインの更新ができます。
(http://)freeddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード&ip=IP

クリックしたときにコマンドプロンプト呼出の形式でブラウザを立ち上げることはできたのですが、更新のたびにブラウザが立ち...続きを読む

Aベストアンサー

perlではない話になりますが、wgetを使うのが手っ取り早いと思います。
wget "http://freeddo.jp/dnsupdate.php?dn=​ドメイン&pw=パスワード&ip=IP"
といったコマンドになります。
私は実際、他のDDNSですがwgetで更新してます

参考URL:http://gnuwin32.sourceforge.net/packages/wget.htm

Q指定したURLを表示させるバッチファイル

IEが起動してない状態で、IEを起動させて指定したURLを表示させるバッチファイルを教えて下さい。
バッチファイルAを実行すると、○●○●○●というURLでIEが起動し、バッチファイルBを実行すると、△▲△▲△▲というURLでIEが起動する。そういうことです。
よろしくお願いします。

Aベストアンサー

私がやった通りのことを書きます。ご参考に。
(1)インターネットエクスプローラーがExplore(最後rなし)と言うプログラム名であることを知る。
(2)スタート-検索-ファイルやフォルダ-Explore
で検索する。
(3)C:¥Program Files\Internet Explorerにあることを知る。(eのマークによりプログラムファイルであることを知る。)(こちらは最後にrがつく)
(4)バッチファイルを作る。メモ帳に
cd "c:\Program Files\Internet Explorer"
Iexplore "http://www.okweb.ne.jp/kotaeru.php3?qid=610162"
と入れて、url.batと言うファイル名で保存。
urlは任意の名で良い。「.bat」は必須です。
”http://・・は任意のURLで可。
(5)メモ帳を閉じる。私の場合はc:¥My Documentsに保存されたことに留意。
(6)スタート-プログラムからDos画面をだす。(98の場合)
(7)CD "c:\My Documents"エンタを入れる。
(8)urlエンタと入れる。.batは不要。
(9)上記のOKWEBの画面になり、止まる。

私がやった通りのことを書きます。ご参考に。
(1)インターネットエクスプローラーがExplore(最後rなし)と言うプログラム名であることを知る。
(2)スタート-検索-ファイルやフォルダ-Explore
で検索する。
(3)C:¥Program Files\Internet Explorerにあることを知る。(eのマークによりプログラムファイルであることを知る。)(こちらは最後にrがつく)
(4)バッチファイルを作る。メモ帳に
cd "c:\Program Files\Internet Explorer"
Iexplore "http://www.okweb.ne.jp/kotaeru...続きを読む

QDirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)

いろいろ調べましたが不明な点があり、質問します。

WindowsのDOSプロンプトでdirコマンドを打つとフォルダ・ファイルの一覧が表示されますが、その中にファイルサイズが表示されています。
このサイズを合計できるコマンドはありませんか?
DIRコマンドのオプションを調べましたがそれらしいものが見当たりません。
具体的には
C:\xxx\配下に50個程度のファイルがあります。
その50個の合計サイズを知りたいです。
xxxフォルダの親フォルダにはアクセス不可です。

ずーっと悩んでいます。よろしくお願いします。

なお、OSはWindowsNTか2000で使用予定です。

Aベストアンサー

カレントドライブ、カレントフォルダを
C:\xxx\
にした状態で、

dir /s /a-d

/sパラメータででサブディレクトリすべてを検索
/a-dパラメータでディレクトリ以外のファイル(つまり属性に関係なくすべてのファイル

これを実行すると最後にファイルの個数とファイルサイズの合計を表示します。

もし、隠し属性のファイルは合計しないのであれば、

dir /s

だけで良いと思われます。

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

Q添付ファイルの拡張子がemlとなっているファイルの開け方

最近友人よりの添付ファイルの拡張子がemlとなっている為、開くとワードパット
で開いてしまい、文字化けして読めません。
ワードやエクセルにて読めるようにしたいのですが?
どうしたらよいのでしょうか?
当方IE5.5使用 OSはMEです。

Aベストアンサー

>添付ファイルの拡張子がemlとなっている為

Winodws98の方法ですがMeでもいけると思います。

1.このファイルを一旦、デスクトップとかに保存して
2.そのファイルを「Shift」キーを押しながら右クリック→「アプリケーションから開く」をクリック
3.Outlook Expressを選択
 一覧に無い場合は、「参照」をクリックして
 C:\Program Files\Outlook Express\msimn.exe
 を選択します。
4.「この種類のファイルを開くときは、いつも
   このアプリケーションを使う」のチェックを入れます

Q25分13秒05 を 1513秒 と表示させたい

数百件分を秒換算しなくてはなりません。
良い方法はありますか?

Aベストアンサー

#3です。
解決、おめでとうございます。

ええと、FIND("分",A1) は
「"分"という文字はA1のセルの文字列の何文字目にあるか」
ということを意味します。

VALUEは、文字列を数値に変換するための処理で、全角で入力していた場合に、数値として計算可能にするための変換です。実際には、Excelでは全角の数値でも普通に計算してくれるので、あまり意味はないのですが、つい、いつもの癖で入れてしまいました。

「LEFT(A1,B1-1)」はA1のセルの文字列の左から(B1-1)文字分を取り出すという意味で、
「MID(A1,B1+1,C1-B1-1)」はA1のセルの文字列の左から(B1+1)文字目から、(C1-B1-1)文字分だけ取り出すという意味です。

Qページ読み込み時に自動的にsubmitさせる方法

過去のPHPでの質問
http://www.okweb.ne.jp/kotaeru.php3?q=483327
の中で出てきた

>hiddenでデータ定義しておいて
>Javascriptでページ読み込み時に自動的にsubmitさせたらいいかも。

POSTでデータを送るためにこれを実現したいと思っているのですが自動的にsubmitさせる方法がわかりません。

ご存知の方がおられましたらアドバイス宜しくお願いします。

Aベストアンサー

<BODY onLoad="document.F.submit();">
とやれば、このファイルがロードされた時に、
このファイル内の
<FORM NAME=F>~</FORM>
と定義されたFORMの内容がsubmitされると思いますが・・・。

Qflush()とclose()について

Javaを独習Javaで独習しています。現在、入出力の所まできたのですが、Writerクラスのclose()とflush()の違いがわかりません。それぞれのメソッドの意味はわかるのですがそれらを使う目的がわかりません。flush()は「バッファ付けデータをそのストリームで表されている物理デバイスに書き込む」とあるのですが、サンプルには(バッファ付け文字ストリームの単元にも)flush()は一度も出てこずclose()のみで書き込みが行われています。探したのですが独習Javaのサンプルの中には結局flush()は一度も出てきませんでした。この二つの違いはなんなのでしょうか?初心者のためわかりにくい質問かとは思いますがよろしくお願いします。

Aベストアンサー

フラッシュすれば、ファイルやその他物理デバイスに強制的にバッファの内容が出力されるということは、理解されていると考えてよいですね?

で、なかなかストリームをクローズできない(またはしない)場合には、いつまで経ってもバッファの内容が物理デバイスに出力されないかも知れませんよね?でも、適当なタイミングで定期的にフラッシュすれば、その時点でバッファに溜まっている内容が物理デバイスに出力されます。

そのサンプルの場合は、書き出してすぐ?クローズしちゃうため、明示的なフラッシュは必要なかったんだと思いますが、

・フラッシュは、(ストリームを閉じずに)バッファの内容を強制的に物理デバイスに出力する。
・クローズは、(フラッシュされていなければフラッシュしてから)そのストリームを閉じる。

とまぁ、目的も内容も全然違うわけです。

Q主キーにインデックスは貼らないと駄目でしょうか?

いつもお世話になっております。

テーブルを作成したときに主キーのインデックスは改めて
貼る必要があるのでしょうか? それとも自動的に
インデックスを貼ってくれます?

Aベストアンサー

主キーと分かっているのならテーブル作成時にPRIMARY KEY指定していますよね?
それならばインデックスは自動で作成されるはずです。

QJavaScriptde途中で、「exit」するには?

function kensaku(){
s_data = document.kaiin_form.input_name.value;

if(!s_data){ alert("キーワードを入れて下さい!"); }

if(s_data != dumy){ ...... }
for(i=st_no;i<=n;i++){
......省略.................;
.......省略................}
}

----------------------------------
3行目で表示されたアラートをOKで閉じても、4行目以下が実行されてしまいます。
3行目でexitするにはどうすれば良いでしょうか?

Aベストアンサー

>関数(kensaku())からは抜けられませんでした。
そうですね、勘違いしていました、f(^^;
すみません。
if(!s_data){
alert("キーワードを入れて下さい!");
return;
}
ですね。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング