SSI表示のためのファイルパスとエラー解消方法について

このQ&Aのポイント
  • SSI表示に必要なファイルパスとエラー解消方法について教えてください。
  • SSI表示するためには、各ファイルのパスが必要ですが、エラーが発生してしまいます。
  • エラーを解消するための良い方法があれば教えてください。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • feininger
  • ベストアンサー率41% (74/180)
回答No.1

ファイルの存在チェックは例えば↓のようになります。 if (-e './cgi-bin/day/jcode.pl') {require './cgi-bin/day/jcode.pl';} else {require './jcode.pl';}

master-3rd
質問者

お礼

返答ありがとうございました。 ばっちり出来ました。

関連するQ&A

  • 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
  • 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から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
  • SSIを呼び出した元ファイルの名前を取得することはできますか?

    アクセスログを取るだけの単純なCGIを作って動かしています。 SSIを使って.plファイルを呼び出してログにホスト名やリンク元、ブラウザ名を記録しています。 最近、掲示板にスパムが増えたのでそのログも一緒に取ろうと思うのですが、ログにアクセスされたページも記録したいと思います。 <!--#exec cmd="./CGI/real_log.pl?1"--> のようにして$ENV{'QUERY_STRING'}で識別番号を取って記録することもできると思いますが、いたずらに備えてこれを使わずにできればと思っています。環境変数にはそれらしいものがないのですが、何か他に良い方法はあるでしょうか?

    • ベストアンサー
    • CGI
  • ローカルサーバーでの動作確認

    CGI超初心者です. 翔泳社のPERL/CGI辞典を見ながらCGIに挑戦してます. 今ローカルサーバーでの動作確認すべく奮闘しているのですがCGI/SSIを使用するためのAPACHEの設定で頭を悩ませてます. CGIはうまく表示できたのですがどうしてもSSIが表示されないのです. ファイルは本通りに記述したつもりです. 「test.shtml」 <HTML> <BODY> <!--#exec cmd="test.pl" --> </BODY> </HTML> 「test.pl」 #!C:\perl\bin\perl print"hello!"; CGI/SSIはドキュメントルートで制限なく使用できるよう設定しました. test.shtmlは表示されてるようなんですがそこにtest.plが読み込めてないようです(よく分かりませんが…) どこが悪いのか全く分かりません. ブラウザ上でこのtest.shtmlのソースを確認したら<!--#exec cmd="test.pl" -->の部分が表示されてませんでした. 全くの初心者でどのような情報を開示すればよいのか分からないので必要な情報があれば教えていただけるとありがたいです.

    • ベストアンサー
    • CGI
  • HTMLとSSIが同じフォルダに無いと表示しない?

    ホームページにアクセスカウンタをつけようとしています。 表示はSSIで行うのですが、1つ問題が… 表示させたいHTMLファイルとSSI動作させるCGIが同じフォルダに無いと表示しないんです。 CGIはフォルダを整理するため「cgi-bin」の中に入れておきたいです。でも、そうすると動かなくなる(表示しなくなる)んです。 もちろんですが、サーバでのSSIの使用は許可されています。(じゃないと、同一フォルダでも動かないですよね) パスは、いくらなんでも間違えようが無いです。 フルパス(http://~)で書いてもだめです。 何か方法があるのでしょうか?

    • ベストアンサー
    • CGI
  • 非常に見にくいです.....

    このジャンルであっているかどうか微妙ですが質問させていただきます。 よくフリーのCGIやPHPなどのテキストファイルをダウンロードしたとき、アップロード時に転送モードが悪かったのかどうか知りませんが、よく #!/usr/bin/perl↑↑require './jcode.pl';↑require './cgi-lib.pl';↑↑..................... のように改行部がすべて↑になってますよねぇ? もし「戻りページ」など設定しなければならない部分があったりする時は非常に見にくくやりづらいのです。 そこでこの上の例を自動で #!/usr/bin/perl require './jcode.pl'; require './cgi-lib.pl'; に書き換えてくれるようなソフトがあったら教えて下さい!!

    • ベストアンサー
    • CGI
  • 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
  • jcode.pl と &ReadParse()

    CGIファイルの先頭は #!/usr/local/bin/perl require './cgi-lib.pl'; require './jcode.pl'; &ReadParse(); という感じになっています。 ここでのの require は、日本語を使うためのもの だと思っています。合っていますか? &ReadParse() というのは何ですか? require と関係があるみたいです。 require を書かずに &ReadParse() を書くとCGIエラーになります。

    • ベストアンサー
    • 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

専門家に質問してみよう