PHPでincludeから取り込んだphpファイル内の相対パスの記述方法について

このQ&Aのポイント
  • PHPでincludeから取り込んだphpファイル内の相対パスの記述方法についてまとめました。階層の異なる場所にあるphpスクリプトファイル内に記述してあるticker.phpを参照する方法や、参照先のembedファイルの相対パスの設定方法について説明しています。
  • PHPのincludeで取り込んだphpファイル内の相対パスの記述方法についてまとめました。異なる階層にあるphpスクリプトファイル内で、ticker.phpを参照する方法や、参照先のembedファイルの相対パスの設定方法について解説しています。
  • PHPのinclude文によって取り込んだphpファイル内の相対パスの記述方法についてまとめました。異なる階層にあるphpスクリプトファイル内で、ticker.phpを正しく参照する方法や、参照先のembedファイルの相対パスの設定方法について詳しく説明しています。
回答を見る
  • ベストアンサー

PHPでincludeから取り込んだphpファイル内の相対パスの記述方法について

階層の異なる場所にあるphpスクリプトファイル内に記述してあるticker.phpを参照するとします。 --"sample.php" <?php include_once(dirname(__FILE__) . "/../ticker.php"); ?> ------------ --"../ticker.php" // ※一部割愛 <embed src="ticker.swf"> ------------ と、このように何の変更も加えない状態だと、ticker.php内に記述しているembedファイルがsample.phpフォルダにあると見なされ、swfファイルの読み込みに失敗します。この「ticker.swf」をきちんと参照できるようにしたいのですが、最適な方法はございますでしょうか。

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

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

  • ベストアンサー
  • little-m
  • ベストアンサー率44% (45/102)
回答No.2

私の場合は、include 元の、実行 php 側に相対パスのdefine を行っています。 例)以下2つの実行 php と 1つのライブラリphp があった場合 public_html/sample.php ----------- 実行php(1) public_html/test/sample.php ----- 実行php(2) public_html/lib/ticker.php ----- ライブラリphp ■実行php(1)側 define('TOP_DIR', './'); include_once(dirname(TOP_DIR.'lib/ticker.php'); ■実行php(2)側 define('TOP_DIR', '../'); include_once(dirname(TOP_DIR.'lib/ticker.php'); ■ライブラリphp側 <embed src="<?php echo TOP_DIR?>ticker.swf">

その他の回答 (2)

  • little-m
  • ベストアンサー率44% (45/102)
回答No.3

No.2 です。以下間違えました。 (誤) include_once(dirname(TOP_DIR.'lib/ticker.php'); (正) include_once(TOP_DIR.'lib/ticker.php');

Tank2005
質問者

お礼

define分での定義による方法が大変参考になりました。自身の構築するサイトでもこの方法を採用したいと思います。

回答No.1

Webルートからの絶対パスで参照すればよいかと思います。 例)ticker.swfの場所が ttp://www.hoge.jp/swf/ticker.swf であれば、 <embed src="/swf/ticker.swf">

Tank2005
質問者

補足

ticker.swfをsample.phpだけに適応させるだけならこれでもいけますが、さらに別のフォルダにticker.swfを参照するファイルを追加するとなると応用が利きにくそうです。

関連するQ&A

  • PHP/icludeを使った相対パスの引き方について

    プログラム初心者です。 includeやrequireなどの関数を使ってファイルを呼び込むために、下記のようなソースを作りましたが、Fatalエラーになってしまいます。どこがいけないのかご指摘をいただけないでしょうか? ネットでこれらの関数の扱い方について検索しますと、PHPでは実行されたファイルのディレクトリがルートとして扱われるそうで、他のディレクトリを参照する時は、相対パスのみでは無理の様子でした。この場合、組込み定数となる__FILE__を使って絶対パスを導かなければいけないような記述がありました。これに習って書いてみたのですが、どうもうまくいきませんのでご指導をいただければと思います。 ■以下、ツリー構造 root |_con ←フォルダ階層 | |_nav.php ←ファイル階層 |_mod | |_nav.csv |_view |_index.php ■以下、phpファイル群 /////// nav.php ////////// <?php $Data=file (dirname(__FILE__)."/../mod/nav.csv"); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$DataN[$i]); ?> /////// index.php //////// <?php include once (dirname(__FILE__). "/../con/nav.php"); ?>

    • ベストアンサー
    • PHP
  • php インクルードincludeした時のパス

    phpにてincludeした時のパスで躓いています。 現在のツリーは以下の様になっています。 index.html common  ├header.html  ├footer.html  ├right.html  ├img   ├navi-home.jpg   ├navi-1.jpg  ├css   ├base.css salon  ├hair    ├kari     ├index.html     ├access     ├ ├index.html     ├menu     ├ ├index.html この中の../hair/kari/index.htmlの中に ../common/header.html及びfooter.htmlを <?php include_once(dirname(__FILE__).'/../../../common/header.html'); ?> にてインルードしています。(書き方あってます?dirname(__FILE__).いります?) つぎに../hair/kari/access/index.htmlの中にもインクルードします。 <?php include_once(dirname(__FILE__).'/../../../../common/header.html'); ?> という風に一つ下の階層なので../を付け足しました。 このようにページ毎にheaderまでの相対パスが違うので、そのページ毎にパスを書き換えていかなければいけないものなのでしょうか? また../始まりではなく/始まりでないと表示されません。 /始まりは絶対パスでしたっけ? この書き方は間違っているのでしょうか? そして最後に、 ../common/header.htmlの中の画像ファイルやリンクは <img src="/common/img/navi-home.jpg"> の様に書かないと、インクルードしたファイル側で表示されません。 これも同じように/始まりのこの書き方でいいのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • include_pathについて。

    PHP 5.2以上のバージョンの話として質問をさせて頂きます。 (ローカルではWindows版XAMPPを使用。リモートはLinuxサーバー。) ----- <ファイルの位置関係> imgディレクトリ --- C.jpg (画像ファイル) mainディレクトリ --- A.php sub ディレクトリ --- funcディレクトリ --- B.php (img、main、subディレクトリは3つとも同階層) //------- (A.phpの記述) require_once '../sub/func/B.php'; //------- (B.phpの記述) echo '<img src="C.jpgのパス">'; // ←■画像Cを表示したい■ //★どう表示されるかテスト★ echo dirname(__FILE__) ;   //----- このような状況で、 A.phpにアクセスすると、★テスト★の所は、 ~/sub/func   //←のように表示される。 // つまりこれは、__FILE__ は、 // A.phpではなく、B.phpを指している。(?) と、このような時、B.phpの中で、 C画像の相対パスは、どう書いたらよろしいのでしょうか? A.phpから見た、C画像の相対パスで書いたらいい? それとも、B.phpから見たソレでしょうか? phpinfo()でinclude_pathの項目を調べると、 .:/usr/local/lib/php/~ のように書かれています。(デフォルトのままです。)

    • ベストアンサー
    • PHP
  • PHPのinclude_pathについて

    以下はPEARでExcelファイルを作成し、ダウンロードするプログラムです。 <?php require_once("Spreadsheet/Excel/Writer.php"); $workbook = new Spreadsheet_Excel_Writer('sample3-1.xls'); $worksheet =& $workbook->addWorksheet('サンプル'); $workbook->close(); print('<html>'); print('<head>'); print('<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />'); print('</head>'); print('<body>'); print('<p><a href="./sample3-1.xls">Excelファイル</a></p>'); print('</body></html>'); ?> このプログラムを実行すると、 Warning: require_once(Spreadsheet/Excel/Writer.php) [function.require-once]: failed to open stream: No such file or directory in C:\Inetpub\wwwroot\Test\src\excelsample.php on line 2 Fatal error: require_once() [function.require]: Failed opening required 'Spreadsheet/Excel/Writer.php' (include_path='.;C:\php5\pear') in C:\Inetpub\wwwroot\Test\src\excelsample.php on line 2 というエラーメッセージが出ます。 php.iniには、PEARのパッケージをインストールした際に ;***** Added by go-pear include_path=".;C:\php-5.2.17-Win32-VC6-x86\pear" ;***** と記述されているにも関わらず、エラーメッセージのpathはinclude_path='.;C:\php5\pear'となっており、原因がわかりません。 php.iniはC:\WINDOWSの直下に置いてあります。 PHPのバージョンはphp-5.2.17-Win32-VC6-x86で、Cドライブの直下にインストールしています。 WebサーバーはIISです。 eclipseを使っており、バージョン?はpleiades-e3.6-php_20110326です。 また、phpinfoのinclude_pathはLocalとMasterの両方が.;C:\php5\pearとなっています…。 Configuration File (php.ini) Path C:\WINDOWS Loaded Configuration File C:\WINDOWS\php.ini この2つはこの様になっており、これは2つの場所は一致していないといけないのでしょうか? 解決手段がまったくわかりません。 何かこのエラーについてわかることがあれば教えていただけませんか?

    • 締切済み
    • PHP
  • インクルードファイルからの相対パス

    main.php: <?php include('x/sub.php'); ....... ?> x/sub.php: <?php $a=file('data.txt'); ....... ?> において data.txt は main.php と同じディレクトリになければなりません インクルードされたファイルからファイルを呼び出すときに インクルード先からの相対パスでファイルを指定できるようにできないでしょうか? つまり上の場合にはdata.txtがsub.phpと同じディレクトリにあるようにです

    • ベストアンサー
    • PHP
  • phpの記述につきまして

    phpの記述につきまして データベースから <? echo $file_name; ?> で $file_name に ****.php の値が呼び出されるのですが include の記述で <?php include("<? echo $file_name; ?>"); ?> と言う風に 利用表示するとエラーになってしまします。  include("ここにDBからのPHPファイル名を呼び出したい!") とするには どのように記述すれば宜しいでしょうか? ご教授いただければ幸いに存じます。

    • ベストアンサー
    • PHP
  • php include がどうしてもできません;;

    php include がどうしてもできません;;; php、超がつく程初心者です; Windows7、Internet explorer9、Apache2.2、PHP5.4.6、現在はlocalhost上でphp動作確認、 作業しております。 サイトのメニューをPHPで作成したいと思い色々必死に調べ、htdocsフォルダ直下同士?のphpは何とか表示させることができました。(localhostですが) しかしhtdocsより下のフォルダに入っているものですと、例え同階層でも表示がされません; ↓のような感じで完全に詰まってしまいました; htdocs/index.html に htdocs/topmenu.php を表示させる↓ htdocs/index.html内で <?php include(dirname(__FILE__).'/topmenu.php'); ?> → 成功 htdocs/naiyou/naiyou1.html に htdocs/naiyou/menu.php を表示させる↓ htdocs/naiyou1.html 内で <?php include(dirname(__FILE__).'/menu.php'); ?> → 失敗 htdocs/naiyou/naiyou1.html に htdocs/topmenu.php を表示させる↓ htdocs/naiyou1.html 内で <?php include(dirname(__FILE__).'/../topmenu.php'); ?> → やっぱり失敗 htdocsフォルダ直下のみでしかできない設定に私がしてしまっているのでしょうか。 元々直下のみしか表示できないもの…? それとももっと基本的なところでひかかっているのかな… 何かのパスが間違っているのでしょうか。 htdocsフォルダの場所とDocumentRootは共に "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs" となっています; 知識不足もあり言葉が足りないこと、説明がよく分からないことも多いこともあるかと…すみません。 既出の質問等も探しているのですが同条件を中々見つけられず、もうかれこれ1ヶ月近く解決せず悩んでいます。 申し訳ありませんが、どなたかご教授ください...;

    • ベストアンサー
    • PHP
  • phpのincludeについて

    お世話になります。 Apache/2.2.3 PHP5.1.6 のレンタルサーバを利用しています。 httpdocs   |___lib   |  |___test.php   |___index.php という構造にしています。 -----test.php-------- <?php $a = 'sample'; ?> --------------------- -----index.php------- <?php include_once 'lib/test.php'; echo $a; ?> --------------------- 上記の場合、index.phpには 「sample」と表示されます。 -----index.php------- <?php include_once 'http://example.com/lib/test.php'; echo $a; ?> --------------------- 上記の場合、なぜか表示されません。 そこで「http://~~」はincludeできないのかなと思ったのですが -----test.php-------- <?php $a = 'sample'; echo $a; ?> --------------------- -----index.php------- <?php include_once 'http://example.com/lib/test.php'; ?> --------------------- とすると、なぜか「sample」と表示されました。 この結果から、includeはできているみたいです。 なんとか -----test.php-------- <?php $a = 'sample'; ?> --------------------- -----index.php------- <?php include_once 'http://example.com/lib/test.php'; echo $a; ?> --------------------- で「sample」と表示させたくて試行錯誤してみたのですが どうしても解決できません。 お力添えのほどお願いできればと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでincludeを使うと?が入る。

    さらくインターネットのレンタルサーバを使用していますが、 index.phpに include('header.php'); を入れてヘッダー部分のHTMLの呼び出しを行なっていますが 表示されるソースを見ていると、includeで呼び出しているヘッダー部分の手前に「?」が 入ってしまいます。 include(dirname(__FILE__).'/header.php'); include($_SERVER['DOCUMENT_ROOT'] . "/header.php"); など使っても同じ現象のため、どうしたら「?」を無くすことができるでしょうか。

    • ベストアンサー
    • PHP
  • include時の頭の良いパス指定について

    include時の頭の良いパス指定について 長い上に少々わかりにくい話ですが、includeする場合のパスについてです。 現在の構成は次のとおりです。 / ├inc/ │ ├file_a.class.php │ ├file_b.class.php │ ├file_c.class.php │ │ │ └require/ │   └require.php ├dir/ │└index.php │ └index.php 【/index.phpの中身】 <?php  require_once "./inc/require/require.php";  //その後いろいろ処理 ?> 【/inc/require/require.phpの中身】 <?php  require_once "./inc/file_a.class.php";  require_once "./inc/file_b.class.php";  require_once "./inc/file_c.class.php"; ?> 今回後付で、「/dir/index.php」を設置しました。 「/index.php」とほぼ処理は共通なので、「/dir/index.php」を次のように書いています。 【/index.phpの中身】 <?php  require_once "../index.php"; ?> しかし、この場合「/dir」以下からは、incまでの階層が異なるため、includeしても、 各クラスのファイルを読み込むことができず、 No such file or directory in require.php on line 2 のエラーが表示されてしまいます。 こういう場合、どういうパス指定をするのがいいのでしょうか。

    • ベストアンサー
    • PHP

専門家に質問してみよう