includeやrequireでファイル参照する際の問題点

このQ&Aのポイント
  • includeやrequireでファイルを参照する際に、別のフォルダで参照される場合に問題が発生します。
  • フォルダ間の参照がうまくできないときには、パスを正しく指定する必要があります。
  • パスの指定方法によって、参照できるかどうかが変わることがあります。
回答を見る
  • ベストアンサー

includeやrequireでファイル参照する際の問題点

こんにちわ。初心者です。 includeやrequireでファイル参照する際、ファイルX内にrequire(ファイルA)と表記し参照すると思うのですが、その参照したファイルAが内部でさらに、ファイルBを参照していたとします(備考1)。その場合、ファイルBが別フォルダにあるとうまく読み込めないのですが、どうしたら、よいのでしょうか?ちなみに備考2の場合はこの問題が発生しません。 ☆備考1(うまく読み込めないパターン{パスで書きました}) フォルダ教えて\フォルダhoge\ファイルX(この内部でファイルAをrequire) フォルダ教えて\フォルダgoo\ファイルA(このファイルはjavaScriptで記述されたファイルBを参照) フォルダ教えて\フォルダgoo\ファイルB(ファイルAと同じディレクトリ内に配置) ☆備考2(うまく読み込めるパターン) フォルダ教えて\フォルダhoge\ファイルX(この内部でファイルAをrequire) フォルダ教えて\フォルダhoge\ファイルB(requireするファイルXがあるフォルダと同じディレクトリに配置) フォルダ教えて\フォルダgoo\ファイルA(このファイルはjavaScriptで記述されたファイルBを参照)

  • PHP
  • 回答数5
  • ありがとう数1

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

  • ベストアンサー
  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.5

saak888 さん、レスありがとうございます。 …その通りです、「src="../saak.js"」は「ひとつ上のフォルダにある saak.js 」という意味です。  で、saak888 さんのおっしゃっている「うまく動作しない」という意味ですが (1)「備考1」「備考2」ともうまく動作しない (2)「備考1」は動作するが「備考2」は動作しない のうち、どちらなのでしょう? もし(1)ならば、サーバ側の設定やディレクトリ構造などの問題も絡んできますので、次回私が回答を差し上げるまで少々お時間をください(saak888 さんへの私からの追加の問い合わせ内容について検討したいと思いますので)。 もし(2)であれば「備考1」で運用されることをオススメします。 では、よろしくお願いいたします。

その他の回答 (4)

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.4

saak888 さん、おはようございます。 お手数をかけてスミマセンでした(汗)。 あ、お陰様で、原因らしいものが だんだん見えてきましたよ~。 まず、持ってきていただいたコード中 src="http://poc.xserv.jp/saak.js" という部分がありますが、通常ここは「http://~~」という書き方はしないですね~。 さて、「備考1」の場合、ファイルAとファイルB(この場合 saak.js のこと、という解釈で良いでしょうか?)が同じディレクトリにありますから、単純に src="./saak.js" で良いと思います(先頭の「./」[ドット1つ+スラッシュ]というのは「現在のディレクトリの」という意味です)。 一方「備考2」の場合は、さしずめ src="../../フォルダhoge/saak.js" ということになるでしょう。(文中の「../」[ドット2つ+スラッシュ]というのは「ひとつ上のディレクトリの」という意味です)。この場合の意味は、「ファイルAの2つ上のデイレクトリ(つまり「フォルダ教えて」)の下にあるフォルダhogeに入っている saak.js」です。 もし追加でご質問あれば、お気軽にどうぞ。

saak888
質問者

補足

毎度、親切なご回答ありがとうございます。 しかし、残念ながら、うまく動作しません… もしも、ひとつ上のディレクトリ上にあるとしたら、 src="../saak.js" で良いわけですよね?しかし、うまく表示されません。 困った、、、これはそのまま同じディレクトリに置くほう(備考1)が無難なのかもしれませんね。

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.3

saak888 さん、hkd9001 です。 ええと、私の表現が悪かったようです…スミマセン(笑)。 今朝 私が書いた ----------------------------------------------------------------------------- (1)「備考1」のファイルAで、JavaScriptファイルを参照している部分のコーディング (2)「備考2」のファイルAで、JavaScriptファイルを参照している部分のコーディング ----------------------------------------------------------------------------- ということの意味は「具体的に、どういうコーディングをなさっているか、ファイルAの中身の、該当部分をコピー&ペーストして、ここへ持ってきてください」ということだったのです。 …お手数をおかけしますが、よろしく… あと「うまく読み込まれているか?」の確認は、ちょっと難しいですね~。

saak888
質問者

補足

すいません。こちらが勘違いしていたようで。 一応こんなカンジでいいんでしょうかね↓? <script type="text/javascript" src="http://poc.xserv.jp/saak.js" charset="utf-8"></script>

回答No.2

相対パスの指定ミスでは?

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.1

saak888 さん、こんにちは。 さて、お手数なのですが、ちょっと補足をお願いしたいと思います: (1)「備考1」のファイルAで、JavaScriptファイルを参照している部分のコーディング (2)「備考2」のファイルAで、JavaScriptファイルを参照している部分のコーディング 上記2つがわかると、多分お答えができると思いますので…。よろしくお願いします。

saak888
質問者

補足

(1)(2)両者共に相対パスでファイルBを参照しています。 自分の予想では絶対パスに書き換えると問題はとけるのではと…思い、絶対パスでやってみましたが、うまく動作しません。ちなみに、きちんと読み込んでいるか確認する方法ってありますかね?

関連するQ&A

  • requireやinclude時の階層の書き方

    ずっと困ってます。よろしくお願いします。 読み込む大元のファイル名がindexだとして、その中にrequireを書くとします。 そこからrequireするファイルはindexと同階層にあるaフォルダにあるreq1.phpとします。 さらにreq1.phpからrequireするファイルがあり、同階層(aフォルダ内)にあるreq2.phpとします。 req2.phpはなぜかindexと同階層と、aフォルダ内の、計2カ所に同名の同じファイルがあるとします。 コードを書くと、 index内でrequire_once('a/req1.php'); req1.php内でrequire_once(dirname(__FILE__).'/req2.php'); としています。 この場合、読み込まれるreq2は、req1と同階層にあるものではなく、indexと同階層のものが読み込まれてしまいます。また、indexと同階層のreq2を消しておけば、req1と同階層に置いてあるreq2が読み込まれます。 この辺の挙動が、なぜこうなるのかを説明してください。 特に、 1.dirnameとの関係について 2.別階層に同名ファイルが複数存在の有無に関係なく、とにかくrequireする階層を確実に1つだけに限定する方法について(dirnameではうまくいかないような気がします) の2点は詳しく知りたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • requireするファイルのパス

    プログラミングの知識はほぼ皆無なのですが、仕事でRUBYを使わなければならなくなり、オープンソースを弄っているところです。 rbファイルの記述に require '○○' とあるのですが、判らなかったので無視して実行してみたところ、 C:/Ruby193/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot loa d such file -- ○○ (LoadError) from C:/Ruby193/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require ' from makeindex.rb:2:in `<main>' というエラーが出ました。 ○○ファイルを色々なディレクトリに置いてみたのですが、どれも同じエラーでした。 一般的に、○○ファイルは何処に置くべきなのでしょうか。 尚、環境は以下の通りです。 WindowsXP RUBY 1.9.3 「require '○○'」の記述があるrbファイルの場所 c:\a rbファイルはカレントディレクトリをaにしてから実行 プログラマーの方からすれば意味不明な質問かも知れませんが、ネットで調べてみてもさっぱり判らなかったので質問させて頂きました。 宜しくお願いします。

    • ベストアンサー
    • Ruby
  • PHPでhttp上の外部ファイルをrequireしたい

    PHPでhttp上の外部ファイルをrequireしたいのですが、変数がうまく 参照できません。例えば以下のようにすると、common1.phpの中で $a=$a+1 と書いても、11と出力されずに10と出力されます。 (require自体はうまく行っているようで、common1.phpの中で print等を書くとそれ自体は問題なく実行されます。) require("./common1.php")のようにファイル指定だと問題なく11と 出力されます。原因・解決方法等ご存じのかたがいらっしゃったら 教えてください。FedoraCore4 PHP5.0.4です。 <?php $a = 10; require("http://hogehoge/common1.php"); print "$a"; ?>

    • 締切済み
    • PHP
  • エクセルのファイルを移動しても参照していたい

    あるフォルダの中で、いくつかのファイルを参照しています。 ファイル1のA + ファイル2のB が、ファイルCのセルにって感じです。 それぞれのファイルを別のフォルダに移動しても参照しつづけたいんですが、気をつける事やできない事はありますか?

  • require_once()でファイルが読み込めません

    すいません、色々やったみたのですがよく分からなかったので教えてください。 PHPのテンプレートのSmartyを使いたいと思い、公式サイトからダウンロードして/usr/local/lib/php/Smartyにコピーしました。 その後、php.iniのinclude_pathにて".:/usr/local/lib/php/Smarty"と設定し、require_once("Smarty.class.php");としたのですが、 failed to open stream: No such file or directoryや Failed opening required 'Smarty.class.php' というエラーが出て読み込めません。また、phpinfo()を見る限りではphp.iniはきちんと読みにいっているようでした。 ためしに/usr/にSmartyを置き、include_pathもそのように変更してみたのですが読み込めません。カレントディレクトリに配置した場合は上手く読み込めました。また、Smartyでなくてもどのファイルでも読み込めない状況です。 環境はFedora6、Apache2.0、PHP5です。何かアドバイスよろしくお願いします。

    • ベストアンサー
    • PHP
  • 別ファイルを参照しながらシート名を動的に

    Excelにて、VLOOKUP関数を使用し別ファイルを参照してます。 (こちらをAファイルとします) 別ファイル(こちらをBファイルとします)にはいくつかシートがあり、Aファイルに入力された値によって、Bファイルを参照するシートを変更したいのですが、うまくいきません。 AファイルはC:\workに BファイルはC:\work\workにそれぞれ配置してあります。 AファイルのセルA1には任意の値を入力可能で、その値によって参照するBファイルのシートを変更できます。 VLOOKUP(B1,INDIRECT("'C:\work\work\[Bファイル.xls]"&A1&"シート'!$A$1:$B$100") Aファイルに上記のような関数を書いても、#REFと表示されてしまいます。 どこがおかしいのでしょうか? #AファイルとBファイルを同時に開いている状態だとうまく表示されました。

  • 別のドメインのファイルをrequire

    phpで別のドメイン下のファイルをrequireしようとしていますがうまくいきません。 サーバーの環境は【Windows Server 2008 + IIS6.0 + php5.2】で、 php.iniのallow_url_includeはonに設定済みです。 ファイルA http://xxx.com/aaa.php   <html>   <head>   </head>   <body>   <?php   require_once("http://localhost/test.inc");   echo $remember;   ?>   </body>   </html> ファイルB http://yyy.com/bbb.php   <?php   $remember=5577;   ?> 仮にファイルAに「require_once("http://yyy.com/bbb.php");」と書いて実行すると、空白のページが出力され、ページのソースは   <html>   <head>   </head>   <body> となっていました。 phpコードを実行するところで処理が中断されたようです。 空白ページのタイトルは「500-内部サーバーエラー」です。 同じサーバーの違うドメインで試しても、物理的に別のサーバーで試しても結果は同じでした。 ネットで調べた限りでは結構みんなすんなりとできたみたいなので、なおさら不思議で仕方がないです。 何が考えられるか、教えていただければと思います。

    • ベストアンサー
    • PHP
  • Excelのファイルをまたいだシート参照について

    Excelのファイルをまたいだシート参照について AというファイルのシートaがbのA1を参照しているとき、Bというファイル(同じシートbを作成済) に貼り付けると、aの参照はAのファイルの別シートから参照(=[A.xls]b!A1)をするようになって しまうのですが、これをBのシート(同じ名前,b!A1)のなかで参照をするようにコピーする方法を教えてください。

  • リンク貼り付けの際にファイルのパスを相対にしたい

    Excelのリンク貼付の際に、ディレクトリが一つ上のものからリンクを貼り付けています。 フォルダA-A.xls └フォルダB-B.xls (AのセルをBにリンク貼り付け) 通常ローカルで使う場合は問題ないんですが、これを共有している場合に、B.xlsの参照先ファイルがローカルマシンのフルパスになってしまうため、エラーが出てしまいます。 そのため、Bのリンクを相対化したいのですが、どのような方法をとればいいのかわかりません。 このような場合どのような方法で解決すればよいでしょうか。 御教授いただければと思います。

  • エクセル ファイルを移動しても参照を維持する方法

    2つのファイルAとBがデスクトップ上の同一フォルダC内にあります。 AのA1セルは、BのA1セルを参照しています。 Cをデスクトップ上のフォルダD内へ移動させます。 そしてAを起動すると「更新できないリンク」の警告が出ます。 http://pc.nikkeibp.co.jp/article/column/20081022/1009006/ の3ページ目によれば2つのファイルが同一フォルダ内にあれば、フォルダごと移動しても参照は維持されるとの理解なのですが、そのようにはなっておりません。 どなたかご存知の方がいらっしゃいましたらご教授のほどよろしくお願いします。 環境 マック エクセル2011