- ベストアンサー
外部CGIファイルの読み込み
- 外部CGIファイルの読み込みについて勉強中です。
- 外部CGIファイルを読み込む際に、ファイル名にランダムな数字を加えることで動作する理由が分かりません。
- ローカルサーバーとホストサーバーにアップした場合で結果が変わるのも分かりません。
- みんなの回答 (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 とか >キャッシュを利用してしまうと前回のデータがまた表示する為にリロードする意味で…と考えたりしたのですが…そういう事でしょうか? そんな感じでしょう。 ?が付いていてると、それによって処理が変わるわけですから、 キャッシュがあっても新しい処理結果を得るためにリロードせざるを得ないといった感じです。
その他の回答 (2)
- 15mm
- ベストアンサー率65% (65/100)
日本語が原因では無いですか・・・ 他にローカルとサーバで違うところといえば、思いつくのはファイル階層だけなんですよね。 かなり根本的な質問ですけど、 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という文字列を渡す
お礼
回答ありがとうございます。 >CGIFile は期待通りの文字列になっているか。 OKです。 >ファイル名は大文字・小文字まで完全に一致しているか。 OKです。 >?以降をとって"test.cgi"だけにしてみてcgiが動作するか。 "Error opening URL"は出なくなりました。 ですがやはりローカルホストでは動作しません。 ホストサーバーでは動作しました。 説明不足だったんですが、行おうとしている動作は、 最終目標としてはFlashでゲームをつくり得点のランキングをCGIで表示させるといったものです。 その為に今回、Flash側でダイナミックテキストに入力した数字をCGIに渡し、CGIの方では別に読み込んだ.datファイルと照らし合わして上位10コの数値を並びかえ、.datファイルを更新、その数値をFlashファイルに渡す。 といった動作をさせようとしています。 ですので、もしかするとCGIの方で.datを読み込む際に何か原因があるのかと思ったりしました。パスなどは合っているようですが…。 もう少し色々試して原因を探ってみようと思います。 ?についてですが解説ありがとうございます。分からなかったので勉強になりました。 今回の場合はランダムな数字を渡しているって事ですね。っていう事は数字自体に意味はなく、ブラウザのキャッシュを参照させない為に便宜的に数字を渡すという処理を行っているという解釈でいいんでしょうか? ?以降をとっても動作するということは何のために"キャッシュを参照させない"必要があるんでしょう…?? キャッシュを利用してしまうと前回のデータがまた表示する為にリロードする意味で…と考えたりしたのですが…そういう事でしょうか? 何度もお時間を割いて頂くのも申し訳ないですが回答頂ければありがたいです。
- 15mm
- ベストアンサー率65% (65/100)
Error opening URL に関しては、自分も知らなかったのですが、参考URLを見てみてください。 >『ブラウザのキャッシュが使われない為…』とありますがこの意図も掴めずにいます。 例えば、お使いのブラウザのアドレスバーに残っている履歴を見てみてください。 同じURLがたくさんあったりするはずです。 URLの?以降の文字が少し違うだけで別のURLとして認識されているのがわかると思います。 つまり、?によってURLを少し変えることで、 キャッシュ自体をさせないのではなく、キャッシュを参照させないということだと思います。 http://www.adobe.com/jp/support/flash/ts/documents/fl0265.html
お礼
15mm様回答ありがとうございます。 参考URLを拝見しましたが、私の場合はパス上に日本語を使用しているわけではなかったのでそれが原因ではないようです。 >URLの?以降の文字が少し違うだけで別のURLとして認識されているのがわかると思います。 なるほどそういう事ですか!!ですがなぜ違うURLで表示出来るのでしょう…? この"?"の意味・使い方がいまいちつかみきれないのですが『test.cgi?123』等の場合は"?"以下は無視するという意味があるんでしょうか? アドレスバーに yahoo.co.jp?123など と入力してもちゃんとページが表示されたのでオンライン上では無視される??などと考えたりしたのですが…。 検索でも解説ページをみつけられずにいます。ご教授いただけないでしょうか?よろしくお願い致します。
お礼
すみません。またまた説明不足だったんですが、データ書き込み用のスクリプトではsendAndLoad()を使ってました。 それとは別にデータを送信せずに、結果(ランキング)を表示するのみの場合にload ()を使っていました。 どちらの場合も同じエラー"Error opening URL"が出ていたので説明が不足しておりました。すみません。 やはりファイル名を参照出来ないことによるエラーみたいですね。どうしようもない(正確にはエラーではない?)ようなのでこのまま進めようと思います。 ローカルとサーバーでの違いについてですが… 言語はperlです。 >パスがサーバとローカルで違うとかでは? ローカルのパスは恐らくどちらでもよかったはずです…。前に作った練習用のCGIが#!/usr/local/bin/perlでそれがローカル、サーバー共に動作していたのでパスは問題ないと思います。 >CGIのみをブラウザで起動したときにもちゃんと動いてますかね? ブラウザでの動作確認(結果をHtmlで表示する?)でも表示されないようです。ただ、htmlへ結果を書き出した経験がなく調べながらやってみたんですが、もしかするとhtmlの書き方が違っているかもしれないです。。。 ちなみにコマンドプロンプトでエラーチェックではエラーは検出されなかったんで問題ないようにも思えるのですが…。 もう少し色々試してみようと思いますが時間もかかりそうなのでここで一旦締め切ろうと思います。 何度も回答頂きまして本当にありがとうございました。分からないことだらけでどうしようもなかったんですが、大変勉強になりなんとか先にすすめそうです。 上記内容、行き詰まった時にはまた改めて質問させて頂きます。もし見かけられましたら目を通していただければ幸いです。