外部CGIファイルの読み込み

このQ&Aのポイント
  • 外部CGIファイルの読み込みについて勉強中です。
  • 外部CGIファイルを読み込む際に、ファイル名にランダムな数字を加えることで動作する理由が分かりません。
  • ローカルサーバーとホストサーバーにアップした場合で結果が変わるのも分かりません。
回答を見る
  • ベストアンサー

外部CGIファイルの読み込み

アクションスクリプトで外部CGIファイルを読み込む動作を勉強中です。 色々なサイトや書籍を参考にさせて頂いているのですが、その中で読み込みファイルを"ファイル名+ランダムな数字"としているものがありました。 説明では、『ブラウザのキャッシュが使われない為、毎回違うデータを作成する』とあるのですがなぜこれで動作するのかが分かりません。 実際のスクリプト部分は… CGIFile = "test.cgi?" + Math.floor (Math.random () * 1000); myLoadVars.load (CGIFile); です。 これでは読み込み対象のファイル名が"test.cgi?319"などとなってしまうのでエラーとなるように思うのですが…。 実際、書き出してみると"Error opening URL"と出力されます。 ローカルサーバー(ActivePerl使用)で試してもCGIは読み込まれません。 ですが、レンタルサーバー上にアップしてみるとちゃんとCGIが読み込まれていました。 なぜこのようになるのでしょうか? ローカルサーバーとホストサーバーにアップした場合で結果が変わるのもよく分かりません。 他のCGIは動作するのでローカルサーバーの設定は合っていると思うのですが…。perlのバージョン等でしょうか?CGIは全くの初心者でその辺のことはまったく分からないのですが…。 『ブラウザのキャッシュが使われない為…』とありますがこの意図も掴めずにいます。 ご教授頂ければ幸いです。よろしくお願い致します。 環境はwindowsXP,Flash8as2.0です。

  • Flash
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • 15mm
  • ベストアンサー率65% (65/100)
回答No.3

すみません、根本的な間違い(?)に気づいてませんでした。 CGIにデータを渡す方法なんですが、 load()は関数名のとおりロード、読み込むという動作のみです。 ですから、ファイル名に?をつけて強引に値を渡すのは普通のやり方ではないようです。 送る&受けるの動作は sendAndLoad() を使うのが一般的でしょう。 こいつの説明は長いと思うので省略します。調べると簡単に見つかりますので。 ローカルでError opening URLのエラーが出てだめだった理由は >ファイル名が"test.cgi?319"などとなってしまうので のような感じで、 C:\test.cgi?vars → NG(?もファイル名の文字として扱われたのかも) file://C:/test.cgi?vars → OK の違いだったのではないでしょうか。(ここはどうしようもありませんが) >ですがやはりローカルホストでは動作しません。 CGIへのアクセスは問題ないみたいですね。 ローカルとサーバでCGIの動作が違うのでしょうか・・・ CGIのみをブラウザで起動したときにもちゃんと動いてますかね? それとも、perl(かどうか知りませんが)のパスがサーバとローカルで違うとかでは? #!/usr/local/bin/perl と #!/usr/local/perl とか >キャッシュを利用してしまうと前回のデータがまた表示する為にリロードする意味で…と考えたりしたのですが…そういう事でしょうか? そんな感じでしょう。 ?が付いていてると、それによって処理が変わるわけですから、 キャッシュがあっても新しい処理結果を得るためにリロードせざるを得ないといった感じです。

pekopyon
質問者

お礼

すみません。またまた説明不足だったんですが、データ書き込み用のスクリプトではsendAndLoad()を使ってました。 それとは別にデータを送信せずに、結果(ランキング)を表示するのみの場合にload ()を使っていました。 どちらの場合も同じエラー"Error opening URL"が出ていたので説明が不足しておりました。すみません。 やはりファイル名を参照出来ないことによるエラーみたいですね。どうしようもない(正確にはエラーではない?)ようなのでこのまま進めようと思います。 ローカルとサーバーでの違いについてですが… 言語はperlです。 >パスがサーバとローカルで違うとかでは? ローカルのパスは恐らくどちらでもよかったはずです…。前に作った練習用のCGIが#!/usr/local/bin/perlでそれがローカル、サーバー共に動作していたのでパスは問題ないと思います。 >CGIのみをブラウザで起動したときにもちゃんと動いてますかね? ブラウザでの動作確認(結果をHtmlで表示する?)でも表示されないようです。ただ、htmlへ結果を書き出した経験がなく調べながらやってみたんですが、もしかするとhtmlの書き方が違っているかもしれないです。。。 ちなみにコマンドプロンプトでエラーチェックではエラーは検出されなかったんで問題ないようにも思えるのですが…。 もう少し色々試してみようと思いますが時間もかかりそうなのでここで一旦締め切ろうと思います。 何度も回答頂きまして本当にありがとうございました。分からないことだらけでどうしようもなかったんですが、大変勉強になりなんとか先にすすめそうです。 上記内容、行き詰まった時にはまた改めて質問させて頂きます。もし見かけられましたら目を通していただければ幸いです。

その他の回答 (2)

  • 15mm
  • ベストアンサー率65% (65/100)
回答No.2

日本語が原因では無いですか・・・ 他にローカルとサーバで違うところといえば、思いつくのはファイル階層だけなんですよね。 かなり根本的な質問ですけど、 Flashファイルとcgiは同一ディレクトリにあるでしょうか? たぶん一度調べたとは思いますが、もう一度以下を調べてみてください。 CGIFile は期待通りの文字列になっているか。 ファイル名は大文字・小文字まで完全に一致しているか。 ?以降をとって"test.cgi"だけにしてみてcgiが動作するか。 cgiのほうでエラーが出てるときも"Error opening URL"になるんですかね? ちなみに?のことなんですけど、 test.cgi?319 これは、test.cgiに「319」という文字列を渡して処理してもらうという意味です。 cgiのほうでそれを参照して処理しないと使えませんが。 関数における引数に近いものと思っていただくと理解しやすいかもしれません。 test(319);  → test()関数に319という引数を渡す test.cgi?319 → test.cgiに319という文字列を渡す

pekopyon
質問者

お礼

回答ありがとうございます。 >CGIFile は期待通りの文字列になっているか。 OKです。 >ファイル名は大文字・小文字まで完全に一致しているか。 OKです。 >?以降をとって"test.cgi"だけにしてみてcgiが動作するか。 "Error opening URL"は出なくなりました。 ですがやはりローカルホストでは動作しません。 ホストサーバーでは動作しました。 説明不足だったんですが、行おうとしている動作は、 最終目標としてはFlashでゲームをつくり得点のランキングをCGIで表示させるといったものです。 その為に今回、Flash側でダイナミックテキストに入力した数字をCGIに渡し、CGIの方では別に読み込んだ.datファイルと照らし合わして上位10コの数値を並びかえ、.datファイルを更新、その数値をFlashファイルに渡す。 といった動作をさせようとしています。 ですので、もしかするとCGIの方で.datを読み込む際に何か原因があるのかと思ったりしました。パスなどは合っているようですが…。 もう少し色々試して原因を探ってみようと思います。 ?についてですが解説ありがとうございます。分からなかったので勉強になりました。 今回の場合はランダムな数字を渡しているって事ですね。っていう事は数字自体に意味はなく、ブラウザのキャッシュを参照させない為に便宜的に数字を渡すという処理を行っているという解釈でいいんでしょうか? ?以降をとっても動作するということは何のために"キャッシュを参照させない"必要があるんでしょう…?? キャッシュを利用してしまうと前回のデータがまた表示する為にリロードする意味で…と考えたりしたのですが…そういう事でしょうか? 何度もお時間を割いて頂くのも申し訳ないですが回答頂ければありがたいです。

  • 15mm
  • ベストアンサー率65% (65/100)
回答No.1

Error opening URL に関しては、自分も知らなかったのですが、参考URLを見てみてください。 >『ブラウザのキャッシュが使われない為…』とありますがこの意図も掴めずにいます。 例えば、お使いのブラウザのアドレスバーに残っている履歴を見てみてください。 同じURLがたくさんあったりするはずです。 URLの?以降の文字が少し違うだけで別のURLとして認識されているのがわかると思います。 つまり、?によってURLを少し変えることで、 キャッシュ自体をさせないのではなく、キャッシュを参照させないということだと思います。 http://www.adobe.com/jp/support/flash/ts/documents/fl0265.html

参考URL:
http://www.adobe.com/jp/support/flash/ts/documents/fl0265.html
pekopyon
質問者

お礼

15mm様回答ありがとうございます。 参考URLを拝見しましたが、私の場合はパス上に日本語を使用しているわけではなかったのでそれが原因ではないようです。 >URLの?以降の文字が少し違うだけで別のURLとして認識されているのがわかると思います。 なるほどそういう事ですか!!ですがなぜ違うURLで表示出来るのでしょう…? この"?"の意味・使い方がいまいちつかみきれないのですが『test.cgi?123』等の場合は"?"以下は無視するという意味があるんでしょうか? アドレスバーに yahoo.co.jp?123など と入力してもちゃんとページが表示されたのでオンライン上では無視される??などと考えたりしたのですが…。 検索でも解説ページをみつけられずにいます。ご教授いただけないでしょうか?よろしくお願い致します。

関連するQ&A

  • 外部ファイルの先読み

    メインのページにランダムで画像が変わるよう rnd = Math.floor(Math.random()*10)+1; _root.photo.loadMovie("photo"+rnd+".jpg"); とスクリプトを入れました。 ローカルだともちろん問題ないのですが、サーバーにアップして確認してみると、表示するときになって読み込むものですからちょっと遅れて表示されてしまいます。 これを回避するために先読みする方法がありましたら教えていただけますでしょうか? ちなみに始めにロード画面が表示されるのですが、その完了と一緒に外部ファイルの画像も読み込みが終わるようにしたいと思っています。 よろしくお願いします。 FLASH MX/WINDOWS XP

    • ベストアンサー
    • Flash
  • CGIの外部呼出しについて

    こんにちは。 私は今自分のサイトに日記を設置したくて、nicky.cgiというCGIをダウンロードしました。 現在使っているサーバーはCGIが利用禁止ですので、CGIの外部参照可能な別サーバーにnicky.cgiをアップロードし、それをimgタグで呼び出してみたのですが… なぜか上手くいきません。CGIの方はちゃんと動作していますし、タグの方も特別おかしいところはありません。ですが、呼び出したページを見てみると画像が読み込めなかったときと同じような×マークが出るだけで、CGIは呼び出せませんでした。 これは何故でしょうか?ちなみにローカルで見てもサーバーにアップしても呼び出せてません。 また他に呼び出す方法はあるでしょうか?一応javascriptを使う方法もやってみましたができませんでした。 やってみてできなかったタグは <IMG SRC="http://○○○○.cgi" BORDER="0">というのと、 <script src="http://○○○○.cgi" language="javascript"></script> のふたつです。 CGIは上にも書きましたが別サーバにアップしたもののURLを指定していますが、もしかしてここが違うのでしょうか…。 タグなどのおかしいところや他の呼び出す方法があれば教えてくださると助かります。

    • 締切済み
    • CGI
  • ローカル環境でのCGIエラー

    ActivePerlとAn HTTPdでWindowsXP HomeEditionのPC上でCGIを動かそうと思っています。 どちらも最新版をダウンロードしてインストールしました。 ActivePerlに関してはegフォルダ下のexample.plで動作確認が取れています。 An HTTPdに関してはhttp://127.0.0.1以下のURLを指定してページが表示されています。 ですが、htmlからcgiを呼び出そうとすると「ページを表示できません」「サーバーが見つからないか、DNS エラーです。」のエラーが出てしまいます。 試しにcgiファイルをフルパスで指定したのですが同じでした。 ちなみに、簡単なCGIプログラムtest.cgiを作成、サーバにアップして動作を確認しましたがローカルではエラーになります。 また、ローカルでコマンドプロンプトにて c:\usr\local\bin\perl c:\プログラムのパス\cgi-bin\test.cgi と入力すると内容を表示します。 コマンドプロンプトでCGIプログラムのあるcgi-binディレクトリに移動して perl -v と入力するとperlのバージョン情報を表示するので、パスは通っていると思われます。 Au HTTPdのerrors.logには Thu Aug 16 19:21:18 2007 Warning: CGI TerminateProcess 2500 error 5 とりあえず、自分で原因を絞れるであろうところはあたってみたつもりですが、何か見落としていることがあるでしょうか? もしかしたらAu HTTPdに問題があるでしょうか?

    • 締切済み
    • CGI
  • CGIが動かない

    ActivePerlをインストールし終えたのです。 さらに、自宅サーバのCGI動作はOKにしてあります。 なのに、CGIが動きません。 ※http://www.***********/test.cgi のようにアクセスしてるのですが・・・ OS:Win 2000 Server , AN HTTPD を使用しています。

  • ActivePerlでcgiがうごきません

    D:\web\test\aaa\bbb\bbb.cgi 上記にあるcgiを動かしたいのですが、 ActivePerlをインストールしてもエラー500が出ます。 ActivePerlのインストール時に行うディレクトリ指定は、 C:\usr\local\で指定しています。 アパッチやphpはちゃんと動いています。 D:\web\test\ccc\上にあるxoopsは動作しています。 宜しくお願いします。 他に足りない情報がありますでしょうか?

  • IIS上でフリーCGIが動かない

    Windos2003Server IIS6.0環境で ActivePerl5.8.8 を導入しましたが、 KENTWEBなどで配布されているフリーCGIをブラウザから開くと、 画面が真っ白のまま何も表示されていません。(エラー表示もありません) 以下のテスト用CGIを作成し、フリーCGIと同フォルダに置いてアクセスすると正常動作します。 --------------------------- #!/user/local/bin/perl print "Content-type: text/html\n\n"; print "こんにちわ\n" --------------------------- この現象の原因としてどのようなことが考えられるでしょうか。 ご存知の方がおられましたらご教示ください。

  • ローカルでのCGIの実行テストの方法を教えてください

    CGIをWindows Meで動作させたいのですが、とほほのWWW入門を見てみると、 ActivePerlとAn HTTPDのソフトを使うとかいてあり、 An HTTPDは雑誌のCD-ROMで入手したのですがActivePerlはありませんでした。 インターネットから入手するしかないのでしょうか?ダイアルアップ接続のため、 時間が掛かりそうだし、なかなかダウンロードする気になりません。 もし他にローカル環境でCGIの動作テストをする方法があれば教えてください。 またAn HTTPDのソフトだけではローカルでのCGIテストはできませんか? それと、とほほのWWW入門に「ActivePerlのオプションであるPerlScriptを インストールした人は、セキュリティに関して十分に注意し、レジストリの修正を 忘れないようにしてください。」と書いてありますが、これはどういう意味ですか? PerlScriptをインストールするのとしないのとではどう違うのですか? 教えてください。よろしくお願いします。

    • ベストアンサー
    • Perl
  • IISでCGIを動かすには?

    NT4.0にIISでwebサーバを立ちあげています。 ローカルなネットワークではありますが、クライアントからスクリプトを 実行させると「表示できません」というエラーになります。 また、サーバマシンのブラウザで表示させると、CGIスクリプトがそのまま 表示されてしまいます。 .cgiのMIMEタイプの設定がうまくできていないのでしょうか? レジストリをいじってみたのですが、よく分かりませんでした。 お分かりになる方、ぜひ教えてください。よろしくお願いいたします。

  • 外部コマンドで返された値をCGIで取り込むには?

    外部コマンドで返された値をCGIで取り込むには? 環境:Activeperl 5.8.9/IIS6/Windows2003Server [hello.cgi] ==================================== #! /Perl/bin/perl #HTMLヘッダーを出力します print "Content-type: text/html\n\n"; print "エコーのテスト<BR>"; my $msg=`echo hello`; print "エコーは".$msg."です"; exit; ==================================== 上記cgiを、Windowsのコマンドプロンプト上で「c:\perl>hello.cgi」とすると、ちゃんとDOS窓上で動きますが。同ファイルに 対して、http://www.test.com/scripts/hello.cgi とすると、ブラウザ上にて、 ============= エコーのテスト エコーはです ============= のような感じになって、$msgを出力してくれません、どうしてでしょうか?お知恵をおかしください。

    • ベストアンサー
    • Perl
  • 1回目だけエラーが出ます

    CGIでフォームメールを作ったのですが、1回目だけサーバエラーが起こるとの指摘を受けました。 私の方でもローカルとサーバにアップしてからもCGIのテストは行ったのですが、ローカルで動かした後だったからか、1度もエラーは表示されず、原因が分かりません。 エラーが出た後、いったんブラウザを閉じてもう一度開き直すと動作するようです。 これの対処法をご存じの方、教えていただけますでしょうか。

    • 締切済み
    • CGI

専門家に質問してみよう