SSIでの"?"の使い方

このQ&Aのポイント
  • SSI(Server Side Includes)を使用して、検索エンジンCGIのログをトップページに表示する方法について質問しています。
  • "?"を使用したSSIの表示方法について試してみたがうまくいかず、何も表示されなかったとのことです。
  • また、"?"を抜いた場合にはダミーテキストが表示されることから、SSIの時には"?"が使用できないのか、スクリプトに問題があるのか疑問に思っています。
回答を見る
  • ベストアンサー

SSIでの"?"の使い方

ある検索エンジンCGIのログを流用してトップページにSSIで表示しようとしています。 検索エンジンはいくつかのジャンルに分かれています。トップページに表示する分もジャンルで分けたいと思います。また、保存されているデータの最新10件を表示したいと考えています。 そのため以下のようにやってみました。 ページには □ジャンル1 <!--#exec cmd="./list.cgi?pt=0" --> □ジャンル2 <!--#exec cmd="./list.cgi?pt=1" --> ~~ CGIは ---------------------- #!/usr/bin/perl $w_new = 10; require './jcode.pl'; print "□ジャンル1<BR>\n"; #この行はテスト用ダミーです。 open (FILE,"./cgi-bin/navi/A.bak"); $i=0; while (<FILE>) { $i++; local($no,$pt,$sub,$hp,$name,$email,$pw,$msg,$dt,$ts,$rec,$axs) = split(/<>/); if ($pt eq $in{'pt'}){ print "<A href=\"$hp\">□$sub</A><BR>\n"; if ($i >= $w_new) { last; } } } close(FILE); exit; ------------------------ $ptがジャンル、$subが表示名、$hpがアドレスです。 こうすると何も表示しません。 また、 <!--#exec cmd="./list.cgi" --> というかんじで"?"を抜くとダミー用文「"□ジャンル1」が表示されます。(SSIが表示できないわけではないと言う確認) SSIのときは"?"は使用できないのでしょうか? また、スクリプトはこれであっているのでしょうか?(合ってないから表示しないわけで…(T.T))

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

質問者が選んだベストアンサー

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

> 具体的にどのようにしたらいいのでしょうか? 例えば、パラメータの指定は次のようにします。  <!--#exec cmd="./list.cgi pt=0 a=1 b=2" --> もし、list.cgi のリクエスト解析部分が、   if ($ENV{REQUEST_METHOD} =~ /GET/i) {     $buf = $ENV{QUERY_STRING};   } else {     read STDIN, $buf, $ENV{CONTENT_LENGTH};   } のような感じになっているなら、それを   if (@ARGV) {     $buf = join '&', @ARGV;   } elsif ($ENV{REQUEST_METHOD} =~ /GET/i) {     $buf = $ENV{QUERY_STRING};   } else {     read STDIN, $buf, $ENV{CONTENT_LENGTH};   } として、@ARGV から受け取るようにします。 (CGIとして実行することがなければ、elsif 以降は不要です。) また、CGI.pm を使っているなら、スクリプトは変更しなくても大丈夫のはずです。

その他の回答 (1)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

SSIの <!--#exec cmd="script" --> というのは script をCGIとして呼び出すものではありません。 これは script をコマンドとして実行するものなので、パラメータをスペースで区切って渡し、スクリプト側では @ARGV を参照します。 詳しくは参考URLをどうぞ。

参考URL:
http://tohoho.wakusei.ne.jp/wwwssi.htm#Exec
master-3rd
質問者

お礼

返答ありがとうございます。 ページを見てみましたが、ちょっと意味がよくわからなかったです。 具体的にどのようにしたらいいのでしょうか?

関連するQ&A

  • SSIで表示させるときの各ファイルのパス

    SSIで日記をトップページに表示させようとしています。 CGIは./cgi-bin/day/に保存してます。 トップでSSI表示(<!--#exec cmd="cgi-bin/day/day.cgi" -->)させるためには各ファイルもそこからのパスが必要ですよね。 (require './cgi-bin/day/jcode.pl';) しかし、こうすると記事を入力するときにエラーが出てしまいます。 (./cgi-bin/day/day.cgiから見るとjcode.plは./cgi-bin/day/cgi-bin/day/の場所になってしまう。その他datファイルも同じ) これを解消する何か良い方法は無いでしょうか? 例えば、「cgi-bin/day/」の位置に指定ファイルが無ければ「./」の位置を探すとか、SSI表示部分は切り離して別ファイルにするとか… 良い方法があったら教えてください。

    • ベストアンサー
    • CGI
  • CGIの中でSSIが出来ないので直接呼び出したいのですが...

    データベースCGIを改造中です。 左にデータベース内のジャンルをリスト表示し、右側にリスト一覧・データ詳細を表示するようにしたいと思っています。 ジャンル一覧にはそのジャンルのレコード数をSSIで表記しています。 リスト表示はsearch.cgiで管理、レコード数表示はcount.cgiで表示させるようにしています。また、レコード数表示のcount.cgiはジャンル数確認以外にも利用しています。 リストを表示する手前に置くジャンル一覧ページはhtmlで作っています。レコード部分は<!--#include virtual="./count.cgi?mode=genre&genre=1" -->と言うような書き方をしています。 リスト表示のsearch.cgiをデザインを統一する為スキンを利用する形で作成しようとしています。しかし、上で使ったジャンル一覧ページをそのまま利用しようとしたのですが、SSIを利用したレコード数の表示が出来ません。 そこで、CGIの中でSSI的なものを表示させたいと思うのですが、どのようにしたら良いでしょうか? ふと考えたのは「count.cgiからジャンル数をチェックする部分を抜き取りそれをsearch.cgiのサブルーチンとして動作させ、そのサブルーチンを動作させるようにスキン部分にどうにかコードを書込みする」 と言うものですが、この「スキン部分にどうにかコードを書込みする」の部分がさっぱりです。 sub count部分は、「リスト取得」→$in{'genre'} == $genreだったら$ken++ →結果表示、としています。 頭がこんがらがって考えがまとまってないです。 どう考えればば良いでしょうか?

    • 締切済み
    • CGI
  • SSIからCGIを起動するときのパスの設定

    SSIからCGIを起動について他の方の過去の質問を参照させて頂いたのですが解決できず困っております。 index.shtml内からSSIを使用して <!--exec cgi="/cgi-bin/test.cgi"--> と記述してCGIを実行したところ [an error occurred while processing this directive] と表示され実行できませんでした。 エラーログを見たら invalid CGI ref "/cgi-bin/test.cgi" と表示されていました。 試しに「http://ホスト名/cgi-bin/test.cgi」とアドレスに記入して 実行した場合は正常に実行されました。 (「cgi-bin」はhttpd.conf内でScriptAliasで設定してます) またSSIが正常に起動しているかの確認として <!--echo var="DATE_LOCAL"--> を実行してみたところ正常に時刻が表示されました。 「include virtual」も試しましたが結果は同じでした。 「exec cmd」の場合は何も表示されませんでした。 どこの設定・指定が間違っているのか検討がつかない状態で 手詰まり状態になってます。 原因・手がかり等分かる方、ご教授願います。

    • ベストアンサー
    • CGI
  • PHP+SSI

    「index.php?a=100」のようなページをSSI(ssi.shtml) から実行したいと考えています。 ところがssi.shtml内で <!--#exec cmd="index.php 100"--> とし index.php内で引数渡しの設定として「$argv[0]」として ますが、ssi.shtmlを実行しても実行結果を返さずブランクに なってしまいます。index.phpのパーミッションも実行可能に 設定しているのですが…。  上記以外の方法でも結構ですので、SSIで引数付きのPHPを 実行する方法をご存じの方がいらっしゃいましたら、教えて ください。 Apache 1.3.31+PHP 4.3.1で動いています。もちろんSSIで #execがNGなんてオチも有りません。 なお、下記URLによればSSIからの引数渡し自体はCGIだと可能の ようですが…。 http://tohoho.wakusei.ne.jp/wwwssi.htm#Exec

    • 締切済み
    • PHP
  • Apache2.2でPerlを呼び出すSSIを使ったHTMLをloca

    Apache2.2でPerlを呼び出すSSIを使ったHTMLをlocalhostで動かそうとしています。 AddHandler cgi-script .cgi .plに変更。 exec cmdをHTMLファイルに埋め込みました。 <!--#exec cmd="/PROGRA~1/APACHE~1/Apache2.2/cgi-bin/counter.pl counter"--> インターネットのApacheでSSIを使う方法を読み,httpd.confの中に Options FollowSymLinks Multiviews の後にIncludesをつけ   AddType text/html .shtml と   AddHandler server-parsed .shtml を加えました。しかし、localhostで実行するとHTMLのSSIの部分だけ表示されません。 (アクセスカウンターのカウンターだけ表示されません)。エラーログには ”指定されたファイルが見つかりません。 : don't know how to spawn cmd child process: C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/counter.shtml” と記録されていました。 どうしたらよいのでしょうか。 どなたか解決できるかた、回答よろしくおねがいします。

    • 締切済み
    • CGI
  • SSI で #exec 以外で Perl-CGI を実行する方法は?

    最近 CGI に興味をもち Perl を始めました。 簡単なサンプルを無料サーバーにアップロードして cgi だけを 直接実行すると問題なく実行されます。 ですが SSI の #exec を使って HTML ソースに <!--#exec cgi="/cgi-bin/sample.cgi" --> と記述してページを開くと [an error occurred while processing this directive] と表示されてエラーになりました。 無料サーバーは infoseek で CGI/SSI は使えると書かれていたので 試してみました。それでもう一度確認の為に読んで見ると『#exec』は セキュリティ強化のため利用できないことが判明しました。 http://help.www.infoseek.co.jp/isweb/20602.html#7 質問内容: (1)CGI/SSI は使えるが #exec は使えない状況でどうやって Perl-CGI を   HTML ソースに記述して実行すればよいのか? (2)CGI は cgi-bin に置きパーミッションを 755 に設定しています。   設定は infoseek さんの指示通りです。他に設定すべき点ありますか? (3)Perl-CGI の1行目ではちゃんと『#!/usr/local/bin/perl』と記述しています。   こちらも infoseek さんの指示通りです。   Perl の記述で何か気をつけるべき点はありますか?バグ以外で。 (4)HTML ソースの拡張子は shtml にしています。   SSI を使うにはサーバーが対応していれば拡張子を変えるだけで使えるのですか? 今回の質問は Perl-CGI を HTML ソースに記述して実行する?には どうすべきかをお聞きしたいです。infoseek さんの情報は次のリンクです。 http://help.www.infoseek.co.jp/isweb/20601.html またネット検索していたら次のページを発見しました。 http://cocohome.hp.infoseek.co.jp/ssi/ ここの人は私と同じ infoseek で SSI 入門を書いています。 なぜこの方は SSI の #exec が使えるのでしょうか? この辺も知りたいです。 分かる方お願いします。 教えて下さい。

    • ベストアンサー
    • CGI
  • カウンター設置について

    http://happy.honesto.net/cgi/ にあるdaycounter(SSI)をDLしてtok2で設置を試みたのですが、 どうもうまくいきません。  アクセス総数:<!--#exec cmd="./count.cgi total"--><br> 本日のアクセス数:<!--#exec cmd="./count.cgi today"--><br> 昨日のアクセス数:<!--#exec cmd="./count.cgi yesterday"--><br> としてみたのですが、何も表示されません。 また、exec cgiや、include virtualを使ったら、 [an error occurred while processing this directive] とでてしまいました。 どうしたらいいのでしょうか? tok2ではSSIを使用できると書かれていたのですが・・・・ ちなみにパーミッションはtok2推奨の、 ディレクトリ:lock・・・701 count.cgi・・・700 count.dat・・・600 としました。 どなたか設置方法を教えてください。

    • 締切済み
    • CGI
  • SSIが認識されません。誰か解かりませんか?

    SSIが上手く認識されません。 shtmlの書き方がおかしいのでしょうか? shtmlは、/public_html/cgi-bin/○○.shtmlに入っています。 インターネットエクスプローラーでアドレスを入力すると表示されます。但し、cssが認識されていません。 htmlの中には、 <!--#exec cmd="http://○○○.com/cgi-bin/○○.shtml"-->と入力しています。 ソフトはビルダーです。 shtmlは、必要な分しか入力していません。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <STRONG ○○・・・ ・ ・ ・ </TBODY> </TABLE> </DIV> </DIV> で終わっています。 アクセス権限は755に変更しています。 サバーにアップしてもshtmlの部分が認識されないのは何故ですか? 宜しく、お願いします。

  • Apache 2.0 で SSI cmdが動かない

    同じ質問で http://okwave.jp/qa/q451501.html これと同じですが、未だ解決していないようなので。先に上記を見て下さい。 SSI の機能は ファイルアクセス表示などのコマンドが実行できているので、動作しています。 <!--#exec cmd="test.cgi" --> でエラーログが下記です。 execution failure for parameter "cmd" to tag exec in file.......shtml cmdの実効に失敗した。 test.cgi はDOSのbat で動作、及びHTMLのhead等のタグをプリントで入れれば 正常動作しています。 先人の質問でやり取りは一通りやっています。LoadModule等も #exec cmd がどうしても機能しないと思えますが 宜しく御願いします。

    • 締切済み
    • CGI
  • SSIでスクリプトが実行できない

    SSIでHDDの温度を表示するスクリプトを実行しようとしましたが、上手くいきません。SSI自体は正常に動作しています。(試しに、他のスクリプトを実行させたら、正常に作動しました。) 問題は、コマンドラインからスクリプトを実行させると正しく動作するのに、作成したshtmlを実行すると動作しないのです。 以下に、正しく表示されないスクリプトとshtml、正しく動作したスクリプトとshtmlを表示します。 1.正しく表示されないスクリプト、shtml(HDD温度表示) [スクリプト] #!/bin/sh hddtemp /dev/hda | awk '{print $4}' ※コマンドラインからの実行結果 39 [shtml] <html> <head><title>HDDTEMP実験</title></head> <body> 現在のHDD温度<br> <!--#exec cmd="./hddtemp.sh"--> </body> </html> ※実行結果 現在のHDD温度 2.正常に動作したスクリプト、shtml [スクリプト] #!/bin/bash /bin/date ※コマンドラインからの実行結果 Sun May 22 18:11:21 JST 2005 [shtml] <html> <head><title>SSI使用例</title></head> <body> 現在時刻を表示します<br> <!--#exec cmd="./date.sh"--> </body> </html> ※実行結果 現在時刻を表示します Sun May 22 18:09:56 JST 2005 Apacheは1.3.33です。 どうぞよろしくお願いします。

    • ベストアンサー
    • HTML

専門家に質問してみよう