- ベストアンサー
CGIでHTMLファイルを読み込む方法とは?
- CGIを使用してHTMLファイルを読み込む方法について試してみましたが、うまくいきません。
- ファイルの読み込みがうまくいかない場合、コードに誤りがある可能性があります。
- ファイルパスやファイル名を正しく指定し、ファイルを開くコマンドを正確に記述することが重要です。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
openはCGIが実行されているOSが管理しているファイルを開くためのものです。ファイルの相対パスか絶対パスを指定します。URLではありません。 http://○○.com/index.html等のURLのファイルを取得するには、HTTP等のネットワーク通信を経由してファイルを取得することになります。openとはまったく別の仕組みになります。 >将来的には同一サーバー・同一ドメイン >今のところ、サーバーが全く別のところにあります。 前述の通り、openとHTTPは全く別物です。処理の負荷も全く違います。将来的にはopenを使う事になると思います(処理の負荷、速度を考慮して)。 その「将来」が近い将来なら、別サーバのファイルをCGIと同じサーバにコピーして、openを使って処理するCGIを作った方が良いと思います。今、HTTPを利用するCGIを作っても無駄になる可能性があります。 HTTPを利用する場合、openよりもかなり複雑なプログラムになります。(LWPなどのモジュールが利用できる場合は簡単で、数行のコードで済みますが・・・) LWPなどのモジュールが利用できる場合 #!/usr/local/bin/perl use LWP::Simple; $url = "http://○○.com/index.html"; $content = get($url); print $content; モジュールが利用出来ない場合は、ここで説明するのは面倒なので、 http://ash.jp/perl/socket_http.htm こちらのサイトなど参考にして下さい。 >ただ、テストで同一サーバーでもやってみましたがうまくいきません。 $filename の内容は? http://~ は使えませんよ。 CGIの有るディレクトリからの相対パスで指定してみてください。
その他の回答 (5)
- venzou
- ベストアンサー率71% (311/435)
>そのhtmlファイルに直接記述してあるものは全部読めました・・・が、cssやimageファイルは全く読み込んでくれません。 HTMLの基礎的な内容だと思いますが・・・(^^; HTML内に相対アドレスで指定されているファイルは当然そのままでは開けません。絶対アドレスに書き換えるか、参照している全てのファイルをCGI側のサーバにコピーするかどちらかです。 >お手間おかけしますがあともう少しだけアドバイスください。 私の分かる範囲でしたら、時間の許す限り何でもお答えしますが、先行きが怪しくなってきたので一度整理させて下さい。あと少しでは済まない感じがしますよ(^^; >cgiでhtmlファイルを読み込みたい 最初の質問は解決しました。別サーバのhtmlファイルを読み込むことは出来ました。 で、それを使って最終的に「何がしたいのか?」が分かりません。 現在htmlが有るサーバ:サーバAとします。 現在CGIが有るサーバ:サーバBとします。 サーバAはインターネット上に公開済みですよね? サーバBもインターネット上に構築中でしょうか?それともローカルでテスト中でしょうか? サーバBのCGIでサーバAのhtmlファイルを読み込んで、一部を修正して、その先は? ひょっとしてサーバAのサイトを丸ごとサーバB上に再現しようと言う計画でしょうか?
お礼
勘違いしておりました。 そりゃそうですよね。開けるはずがない。 コンピュータが行う作業の順番が完全に勘違いして初歩的なことを聞いてしまいました。(元ファイルが先にリンク先にデータを読みに行って、全て引き連れて今回の処理にやってくる・・・なんて訳の分からない勘違いしてました) お恥ずかしい限りです。 ということで全て解決しました。 結局今回やりたかったのは自社運営しているショッピングサイトの拡張に関わることだったんです。 商品ジャンルを増やすということで、現在のショッピングサイトのデザインイメージにそぐわないものが加わる。。。 元は元でそれなりに機能しているから残して、新サイトを立ち上げて、でもでもそこでも今の商品も混ぜて売ろうと・・・ なので一部は元のhtmlファイルを流用しようと・・・ 1つのおっきな容量のサーバーを借りて統合すればこんなことしなくてもすんだのでしょうが、複数のドメインなどを取るタイミングでその時々で安いところを選んだ結果サーバーがバラバラになってしまいました。 素人質問に丁寧にお答えいただきありがとうございました。
- venzou
- ベストアンサー率71% (311/435)
>ちなみにindex.htmlのところはhttp://○○.com/index.htmlと変えてます。 これはダメですよ。 同じサーバのファイルなら、httpではなく、ファイルのパスを指定します。 別のサーバのファイルなら、openでは開けません。 別の手段で取得可能です。 同じサーバのファイルか、別のサーバのファイルか補足願います。
補足
将来的には同一サーバー・同一ドメイン(サブドメインで分けて同じメインドメインで統一予定)を予定していますが、今のところサーバーの契約条件など諸条件もあり、サーバーが全く別のところにあります。 ドメインも基本的に関係ない(所有者は同じですが)ドメインです。 つまりは今回の件では全く別サーバーのファイルになります。 ただ、テストで同一サーバーでもやってみましたがうまくいきません。 アドバイスよろしくお願いします。
- venzou
- ベストアンサー率71% (311/435)
#2です。念のため修正します。 >print "File Open Error"; print "<html><body>File Open Error</body></html>"; タグ入れるの忘れてました。
補足
普通に問題なく表示しました・・・
- venzou
- ベストアンサー率71% (311/435)
文法的な問題ではないように思います。 まず、CGIは実行されてますか? ファイルのパーミッションや、1行目のperlのパスは問題ないですか? 下記のスクリプトの実行結果はどうなりますか? #!/usr/local/bin/perl $filename = "index.html"; if(open(IN,$filename)){ @lines = <IN>; close(IN); print "Content-Type: text/html\n"; print "\n"; print @lines; }else{ print "Content-Type: text/html\n"; print "\n"; print "File Open Error"; } exit;
補足
cgiは実行されてます。 正常に稼働しているcgiファイルと同じフォルダに置き、属性は707で、1行目などのPerlのパスも元々正常稼働しているファイルをコピペしてますので、間違いないと思います。 教えていただいたスクリプトを実行したところ File Open Error とでました。 ちなみにindex.htmlのところはhttp://○○.com/index.htmlと変えてます。 スクリプト自体はエラーが出ないのですが、標準入力でデータが取得できません。 perlの構文やパーミッションなどcgiファイルそのものとは全く別のところに問題でもあるのでしょうか。
CGIって サーバが返す仕掛けの事を言ってるだけで言語の事を指してるわけじゃない 何を使ってるのか判らないので答えようが無いんだけど? http://www.google.co.jp/search?q=perl%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB&hl=ja&lr=lang_ja
補足
明記するの忘れてました。 言語はperlです。
補足
ありがとうございます。 LWPのモジュールが使えたので、教えていただいた数行のコードで読み込みできました。 そのまま画面表示のテストをしてみましたが、そのhtmlファイルに直接記述してあるものは全部読めました・・・が、cssやimageファイルは全く読み込んでくれません。 これはこれで仕方のないことなのでしょうか。 IEで表示したファイルのソースを見る限りでは直接開いたものと何ら変わりないようなのですが・・・ ここにも何かルールがあるのでしょうか。 お手間おかけしますがあともう少しだけアドバイスください。 よろしくお願いします。