
質問なのですが、CGIを使いたいなと思い、幾つかのサイトを
見て勉強していたのですが、どうにも上手くいきません。
私はXサーバーを使用しています。XサーバーでCGIちゃんと
使えるよっていう方がいらっしゃれば一層助かります!!
サーバーに置いてある自分のCGIのファイルをクリックして
開くと背景が青緑?になってソースがそのまま表示されてしまいます。
ちなみに、CGIファイルは以下です。public_htmlの下のcgiというフォルダの下にtest1.cgiというファイル名で保存しています。
=======-===ここから=================
#!/usr/local/bin/perl
print "Content-type: text/html\n";
print "\n";
print "<html>\n";
print "<head>\n";
print "<title>テスト</title>\n";
print "</head>\n";
print "<body bgcolor=\"#ffcccc\">\n";
print "これはCGIのテストです。\n";
print "</body>\n";
print "</html>\n";
(文字コードはShift_JISです。)
===========ここまで===============
.htaccessのファイルも、CGIのファイルと同じ階層に入れて
います。以下がそのファイルです。public_htmlの下のcgiというフォルダの下に.htaccessというファイル名で保存しています。
==========ここから================
AddType application/x-httpd-cgi .cgi<CR><LF>
(最後の行は改行しています)
(文字コードはShift_JISです。)
==========ここまで================
どうすれば良いのでしょうか??ご教授お待ちしております。
A 回答 (10件)
- 最新から表示
- 回答順に表示
No.10
- 回答日時:
> 丁寧な説明でしたのでこんな僕でもディレクトリのお話を掴めて
> きました!!ところで、cgiは特別index.htmlみたいに固定の名前
> って必要なのでしょうか??サーバーには特に何も書かれてなくて、
> cgi-binというディレクトリ以下でなくても作動すると書いてあるの
> ですが・・・・。すみません、質問ばかりで申し訳ありません(><)
CGIに関しては、一般的には拡張子(ファイル名のうちピリオド以下最後の3文字)が「cgi」となっていれば、Webサーバによってそう認識されるような設定になっています。
ただ、べつに他の名前に設定することは可能です(混乱を招くだけですけど・・・)。
拡張子以前のファイル名はこれも一般的には半角英数と一部の記号文字となります。
Apacheという名前のWebサーバソフトでは「Options ディレクティブ」という設定項目で「ExecCGI」というパラメータでもってCGIが使えるのかどうかを指定します。
不自由なレンタルサーバなどでは「cgi-bin」以外の場所にCGIを置くことを禁じていることもあります。
初期状態では使えなくとも「.htaccess」を置くことを許されていると、その置き場所以下にWebサーバのオプション機能を追加できますので、質問者様のように
AddType application/x-httpd-cgi .cgi
Options +ExecCGI
という内容の「.htaccess」を置けば、それ以下のディレクトリで「.cgi」という拡張子でCGIが使えるようになりますが、プロバイダの方で許可されているならこのファイルは必要ないでしょう。
> あとは先のお方の欄で書かせていただいたエラーとパーミッションが
> どうも分からないです。本当にすみません(><)
パーミッション(属性)の指定は、ユーザ権限とかも一緒に理解していないと訳がわからないと思います。
・オーナーは持ち主
・グループはユーザーがシステム上で所属するグループ(例えば開発プロジェクト別でグループの権限を持たせて同じグループに所属しているユーザにのみ操作権限を与えるとか・・・)
・その他は上記以外の権限も含めてすべてのひと
それぞれに、「読める権限」と「書き込む権限」そして「実行する権限」、を割り振ることができます。
例えば「700」としてしまうと、オーナーには読み書き実行が出来ますが、それ以外の人は出来ないことになります。
ここで、注意して欲しいのはオーナーというのを自分という人間を指すのではなく、サーバに接続している状態でのユーザを指します。
メールを受信したりFTPなどでファイルをやり取りするために接続するには、ユーザアカウントというIDとパスワードがあります。
そのIDで接続しているものの権限を指すのです。
Webの場合は通常IDとパスワードを求めたりしないので、匿名アクセスとなり、Webサーバによって指定されたユーザIDになりますので、それがオーナーであるとは限りません。
逆にオーナーと同じであるなら、オーナーとなって権限が強くなるため、改ざんなど悪いことのし放題です。
public_html・・・755
これはディレクトリファイルで誰もが読める状態でなければならないので755(ディレクトリの場合実行権限が必要)で正解
.htaccess・・・・700
これは設定用テキストファイルなので実行権限は不要でオーナーも誰かわからないので「644」の方が正解
cgi・・・・・・・711
これはディレクトリファイルですがオーナーがわからないので「755」の方がよい
test1.cgi・・・・700
これもオーナーがわからないので「755」の方がよい
この3桁の数字について蛇足ながら
左から「オーナー」「グループ」「その他」となります
数字の意味は2進数に例え、これも3桁とし、左から「読み」「書き」「実行」となります。
0 -> 000 なにもなし
1 -> 001 実行あり
2 -> 010 書き込みあり
4 -> 100 読み込みあり
4(読み) + 2(書き) + 1(実行) => 7
4(読み) + 2(書き) => 6 (実行が不要な場合)
4(読み) + 1(実行) => 5 (変更が出来なくても実行はしたい:CGIは実行が出来なくてはいけないけれども赤の他人に改ざんされては困りますよね)
という感じでしょうか。
ながながとすいませんでした。
No.9
- 回答日時:
前の方の回答と同意見です
蛇足ながら少し説明をくわえますと
ホームページをWebサーバから公開するとき、ここにホームページ関連のファイルを置いてくださいよと決められたところが有ります。
Webは基本的に不特定多数の誰でもがアクセスできる仕組みなのでドメイン名だけでアクセスするところは「ここ」と決められた場所を作ってやらないと、個人的なファイルまでもがさらされてしまうことになります。
その一番最初のディレクトリを「ドキュメント・ルート」(DocumentRoot:書類の根?)と言います。
一般的に「htdocs」「html」「public_html」「Inetpub」などのディレクトリ名が付けられています。
もちろんWebサーバの設定で好きな名前にすることも出来ます。
今回の場合は、public_htmlがドキュメントルートとなるよう設定されているようですので、取得したドメイン名だけでアクセスするとそのディレクトリのインデックスファイル(これも設定で「index.html,index.htm,index.cgi,index.php,default.htm」などのファイルが指定されています)が表示されます。
public_htmlを一番上の階層として、それ以下のものがアドレスの対象となるため「public_html」はアドレスに含めなくてよいということです。
ひとつの例を示すと
実際のディスク上でのパス「/var/www/virtual/hoge.jp/public_html/」が「http://hoge.jp/」のドキュメントルートならば
実際のディスク上でのパス「/var/www/virtual/hoge.jp/public_html/cgi-bin/abc.cgi」にアクセスしたいなら
アドレスは「http://hoge.jp/cgi-bin/abc.cgi」となります。
もしも
実際のディスク上でのパス「/var/www/virtual/hoge.jp/」が「http://hoge.jp/」のドキュメントルートで
実際のディスク上でのパス「/var/www/virtual/hoge.jp/public_html/cgi-bin/abc.cgi」にアクセスしたいなら
アドレスは「http://hoge.jp/public_html/cgi-bin/abc.cgi」となります。
ドキュメントルートを指標としてアドレスを考慮するのが肝心です。
何度も本当にありがとうございます!!
丁寧な説明でしたのでこんな僕でもディレクトリのお話を掴めて
きました!!ところで、cgiは特別index.htmlみたいに固定の名前
って必要なのでしょうか??サーバーには特に何も書かれてなくて、
cgi-binというディレクトリ以下でなくても作動すると書いてあるの
ですが・・・・。すみません、質問ばかりで申し訳ありません(><)
あとは先のお方の欄で書かせていただいたエラーとパーミッションが
どうも分からないです。本当にすみません(><)
No.8
- 回答日時:
>http://で自分のドメイン/public_html/cgi/test1.cgi
public_html は、いらないです。
http://で自分のドメイン/cgi/test1.cgi
この回答への補足
何度もすみません。
今.htaccessのパーミッションをcgiと同様に700としたら
今度はforbidenっていうエラーに変わりました。
各ファイル、フォルダのパーミッションは
cgi・・・・・・・711
test1.cgi・・・・700
.htaccess・・・・700
public_html・・・755
です。
ありがとうございます!!
ずっとpublic_htmlを入れていました(><)
すみません、本当に度々申し訳ないのですが、上記の方法で500エラーと表示されてしまいました。Xサーバー側の説明どおりtest1.cgiの設置ディレクトリであるcgiという名称のファイル、さらにtest1.cgiファイル自体のパーミッションを変えたのですが、直りません。
何か間違っている部分があるのでしょうか。
No.7
- 回答日時:
たびたびお邪魔します。
> >どうやってサーバとつないでファイルを表示させてるのでしょうか?
> これはサーバーにログインして、保存してあるCGIのテキストファイルをWクリックして「開く」ボタンを押して呼び出しました。
どうやってサーバにログインしてるのと同じ質問でした。
つながっているのでログインしているのはわかっております。
どうやって(どんなソフトでどんな環境からどんな手段で)接続しているのでしょうか。
例えばSSH端末ソフトを使ってリモートでサーバに接続していますとか、ブラウザからベーシック認証とSSLでISPの提供するサーバの制御プログラムに接続していますとかという意味のことです。
状況によって、あなたが「なにを行って」「なにが悪いのか」をここからある程度推測が出来ます。
重要なのは、あなたがなにをどうして、「どうにも上手くいきません」という状況におちいっているのかを説明して欲しいわけです。
> FTPとはFFFTPのことでよろしいのでしょうか?それなら、
> バイナリモードにはなっていないと思います。
FFFTPはFTPを実装した、いちソフトの名称です。他にもたくさんあります。
この1文で、あなたはあなたの作ったCGIファイルをFTPを使ってサーバにアップしたと想像できます。
不足情報としてCGIのプログラムをなんと言うソフトで記述して保存しましたか? → テキストエディタ/メモ帳/Word?
> CGIファイルの実行属性?とはすみません、分かりません。
勉強をはじめた方にはよくわからなくて当然と思います。
ファイルには普通、「属性」というものが存在します。
Windowsでも普通にファイルを右クリックしてプロパティを見るとでてきたダイアログの下部に「属性」という項目があります。
読み取り専用で上書きを出来なくしたり、ファイルを見えなくしたりするための属性ですが、XサーバでレンタルしているようなUNIX系のシステムでも、ファイルの属性で「読み」「書き」「実行」という三つの属性が存在します。
ためしに先のFFFTPでサーバ側に送り込んだファイルを右クリックしてサブメニューを出し、「属性変更」を選んでみてください。
三種の属性がこれまた「オーナー」と「グループ」と「その他(だれでもみんな)」の三項目にそれぞれ割り当てられます。
CGIはWebから誰でもがアクセスできるようになっていますので、Webアクセスの権限で実行の属性を付けてやらなければなりません。
それは、ファイルアップロードしているオーナーと同じ権限であるとは限りませんので「その他」の「実行」の属性を付けてやるのが妥当でしょう。
「実行」属性が無いファイルはシステム上、それ単体では実行プログラムとは判断されないので、ただのコードが書かれたテキストデータという存在になってしまいます。
>
> 操作環境は、Xサーバーのサイトの引用をしますと、
> OSがLinux、メモリが4Gとなっております。
> CGIや.htaccessは利用可能とあるのですが、実際CGIが
> 機能しているものか、確認はまだ出来ていません。
URLとあなたがアップしているファイルのパスとの関連性についてはご理解されておりますでしょうか?
ブラウザからそのアドレスにアクセスしてみればわかります。
本当に何度もありがとうございます!!
>どうやって(どんなソフトでどんな環境からどんな手段で)接続しているのでしょうか。
えっと、ブラウザからベーシック認証で入っています。
ウチはビッグローブだったと思いますので、ISPを介しているかと思います。SSLはウィキりましたがどうなのかどうやって調べれば良いか分からずじまいです(><)全く説明になってないと思いますが、
分かったのはこれくらいです。すみません(><)
==============================
>FFFTPはFTPを実装した、いちソフトの名称です。他にもたくさんあります。
この1文で、あなたはあなたの作ったCGIファイルをFTPを使ってサーバにアップしたと想像できます。
不足情報としてCGIのプログラムをなんと言うソフトで記述して保存しましたか? → テキストエディタ/メモ帳/Word?
テキストドキュメントというもので作ったので恐らくデキストエディタだと思います。
==============================
>CGIはWebから誰でもがアクセスできるようになっていますので、Webアクセスの権限で実行の属性を付けてやらなければなりません。
それは、ファイルアップロードしているオーナーと同じ権限であるとは限りませんので「その他」の「実行」の属性を付けてやるのが妥当でしょう。
「実行」属性が無いファイルはシステム上、それ単体では実行プログラムとは判断されないので、ただのコードが書かれたテキストデータという存在になってしまいます。
実行属性は全てに装着されてました。htaccessも同様の属性になっていました。
===============================
>URLとあなたがアップしているファイルのパスとの関連性についてはご理解されておりますでしょうか?
ブラウザからそのアドレスにアクセスしてみればわかります。
私のCGIのテキストファイルはドメインの中のpubric_htmlのフォルダの中にあるcgiというフォルダの中にあるので、
http://自分のドメイン/public_html/cgi/test1.cgiということでしょうか??それならいつも404エラーというものが出てしまいます。
No.6
- 回答日時:
>CGIが動作しているか確かめるためにはどうすればよいでしょうか
ブラウザのアドレス欄にURL(http:~test1.cgiまで)を入力して更新します。
http://で自分のドメイン/public_html/cgi/test1.cgiまで
入力して更新してみましたが404未検出というエラーが出てしまいます。(><)それともやり方間違っていますか??
No.5
- 回答日時:
Xserverは初期設定で拡張子.cgiをCGIアプリケーションとして動作します。
また、一部の拡張子のAddTypeの上書きを禁止していますので、.cgiもそれに引っかかっているかもしれません。
.htaccessファイルを削除するか、AddTypeによる指定を削除してみてはいかがでしょうか。
ありがとうございます!!
.htaccessのテキストフォルダを削除して、AddTypeによる指定を削除してみます!!あと、CGIが動作しているか確かめるためにはどうすればよいでしょうか??質問ばかりですみません(><)
No.4
- 回答日時:
コメントに回答してから1番下のコメントを見て気が付きました。
Xサーバってレンタル屋の名前の方だったんですね(紛らわしい名前のISPだ)。
となるとわからないのがこのくだり
> サーバーに置いてある自分のCGIのファイルをクリックして
> 開くと背景が青緑?になってソースがそのまま表示されてしまいます。
どうやってサーバとつないでファイルを表示させてるのでしょうか?
ブラウザ?FTPクライアント?ISPから提供されている管理ツール?
FTPでファイルをアップするときにバイナリモードでアップしたりしていないですか?
CGIファイルの属性で実行属性は付けていますか?
質問に対する質問で申し訳ないのですが、あなたの操作環境に関する情報がまるで無いのでアドバイスのしようがないのです。
>どうやってサーバとつないでファイルを表示させてるのでしょうか?
これはサーバーにログインして、保存してあるCGIのテキストファイルをWクリックして「開く」ボタンを押して呼び出しました。
FTPとはFFFTPのことでよろしいのでしょうか?それなら、
バイナリモードにはなっていないと思います。
CGIファイルの実行属性?とはすみません、分かりません。
操作環境は、Xサーバーのサイトの引用をしますと、
OSがLinux、メモリが4Gとなっております。
CGIや.htaccessは利用可能とあるのですが、実際CGIが
機能しているものか、確認はまだ出来ていません。
No.3
- 回答日時:
Xサーバ上で動作するブラウザがあるかと思います。
そちらの環境がさっぱりわからないので適切な指示は出来ませんが・・・。
Xサーバからランチャのようなものにブラウザが登録されていればそれを起動します。
それが無いなら右クリックなり何なりを画面上で操作してサブメニューなど出してからそこからコンソールを起動してコマンドでそのブラウザを起動する命令を入力します。
要するにスタートメニューがわかりにくいWindowsと操作はあまり変わりありません。
ブラウザはXクライアントのアプリなので管理者に聞いてください。
なにがあるのかは構築した者でなければわかりません。
ブラウザの使い方はこれ見てるわけですからわかりますよね。
No.2
- 回答日時:
Xサーバを動作させている構成についての説明が何も無いので正確なアドバイスが出来るかどうかわからないのですが
> 私はXサーバーを使用しています。
昔、Windows上で動かして遊んでました。
> XサーバーでCGIちゃんと使えるよっていう方がいらっしゃれば一層助かります!!
まず、XサーバとCGIは馬と竹ぐらいなんの関係もありません。
テレビでTV放送を視聴できますがDVDはプレーヤーを介さないで直接見ることが出来ないのと同じことです。
XサーバはGUIの端末環境ソフトみたいなものですから、それ自体ブラウザでは有りません。
かたやCGIというのはWebサーバアプリケーションを通じてシステム上のプログラムを実行してその結果をWebクライアントに返す仕組みのことで、プログラムを指すわけではありません。
要はCGIとはWebサーバの一機能なのです(CGIをプログラムだと勘違いしている人があまりに多い・・・)。
現状、単純にCGIファイルをダブルクリックしてXEmacsとかXクライアント上のエディタが起動してるんじゃないでしょうか。
そんな状況だと「.htaccess」の存在意義もくそも無いんじゃないでしょうか。
Xサーバ上で動作確認したいならXクライアント上のブラウザを起動させて、そのブラウザからCGIを示すURL(アドレス)にアクセスすると、普通は(当然前提条件がありますが)動作するはずです。
どんなブラウザが有るのかはXクライアントのサーバ管理者に聞いてください。
ありがとうございます!!
Xサーバーどうのということは関係ないのですね。
エディタをWクリックして確認しようとしてましたが、
全くの無意味だったのですね(><)
HTMLファイルと同じようにURLを指定するということですか?
重ね重ねで申し訳ありませんがCGIにURLを指定するにはどうすればよいのでしょうか??
No.1
- 回答日時:
「Xサーバー」って、X Window System の事ですか?
だとすると、重大な勘違いをされています。 ここで話題にしている CGI というのは Common Gateway Interface です。 Computer Generated Imagery とか コンピュータ・グラフィックス・なんとか ではありません。
... と今まで思ってましたが、それがどこに書かれてるか探しても見付かりませんね。 ははは。
しかし、ほとんどの質問が Common Gateway Interface のものであるのが事実です。
参考URL:http://ja.wikipedia.org/wiki/CGI
ありがとうございます!!
X Window Systemというのが分からないので、どうお答えさせて
頂いたら良いのか分かりませんが、とりあえずXサーバーという
レンタルサーバーを使用しているということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CGIでソースがそのままでてしま...
-
Windowsで作った *.cgi ファイ...
-
EXCELファイルに誰がアクセスし...
-
KENT WEB(昨日の続きです)
-
プロバイダで定められたPerlへ...
-
《エクセルVBA》「他の人が該当...
-
FFFTP CGIのデータを...
-
ApacheでのCGIについての質問
-
VBAでサーバーにアクセスするに...
-
MP Form Mail CGI で 500サーバ...
-
HTTP接続
-
URLに~/cgi-bin/~を隠す方法
-
ローカル環境でサーバを2つ立て...
-
ASPから既存のexcelブックを開...
-
PyCharmでのCGIを使ったWebサー...
-
htmlにアクセスと同時に、あるC...
-
LAN内に接続されているPCをリ...
-
HTML文書の中で環境変数を使う...
-
webページのリストボックスから...
-
AWSTATSの組み込みについて 無...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CGIでソースがそのままでてしま...
-
FC2レンタルサーバーライトでの...
-
固定パスでアップロードする場合
-
TripodのCGI
-
hp 送信する情報を・・・
-
CGIにCSSを
-
CGIをコピーしたのですがうまく...
-
CGIが実行されずにダウンロード...
-
cgiでhtmlファイルを読み込みたい
-
cgiのファイルが消せません
-
HTMLにCGIを
-
なぜかエラー。
-
cgiをhtmlに出力する方法
-
携帯サイトとPCサイトの振り分け
-
買い物カゴ画面(拡張子.cgi)...
-
HTMLのソースへサーバーの掲示...
-
C言語で作ったプログラムをC...
-
pgd mailformについて
-
cgiで.datファイル内の一文を削...
-
KENT WEBさんのcgi パスワード制限
おすすめ情報