![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
単純な質問です。
定数ファイル等、共通のファイルを、サイト内のPHPファイル全てで読み込みたい場合の方法について。
example.com
/index.php
/[const]/main.php
/[page]/index.php
※[ ]はディレクトリを表す
サイトexample.comにおいて、
トップページ index.phpと、
/[page]以下のindex.phpで、
同じ定数ファイルを読み込みたいとします。
例では、/[const]/main.php を読み込もうとしています。
------------------------------
index.phpのスクリプト内では、
require_once 'const/main.php';
------------------------------
と書け、
------------------------------
/[page]/index.phpのスクリプト内では、
require_once '../const/main.php';
------------------------------
と書くことになるかと思います。
このとき、読み込むファイルのパスが両者で異なりますよね。
(「../」が有るか無いかで異なる)
これを、共通化したいのですが、可能でしょうか?
つまり、例えばですが、
require_once 'COMMON_FILE';
と書けば、どちらのスクリプトファイルにおいても、
正しいパスが読み込まれる、というような。
また、サイトドメインが変更されても、書き換えなくて済むようにしたいです。
(例)example.com → example.net へ移動しても、書き換え要らずの方法で、何か方法を教えて下さい。
とっても、初歩的なことをお聞きして、すみません。
No.2ベストアンサー
- 回答日時:
>require_once $_SERVER["SERVER_NAME"].'/const/main.php';
なるほど。
であれば、
require_once $_SERVER["DOCUMENT_ROOT"]."/const/main.php";
としたらいけそうですね。
DOCUMENT_ROOTの上にライブラリを置くことになったら少々面倒ですが。
$_SERVER["SERVER_NAME"]ではなく、
$_SERVER["DOCUMENT_ROOT"]でしたか。笑
これならいけそうでしょうか。嬉しいです^^
>DOCUMENT_ROOTの上にライブラリを置くことになったら少々面倒
あ~、そういう技(セキュリティを意識した)もあるみたいですよね~。
確か、XOOPSにそんなのがありました。
ライブラリの位置的に問題がなさそうであれば、
$_SERVER["DOCUMENT_ROOT"]で、ちょっとやってみようかと思います。
No.4
- 回答日時:
__FILE__(定義済みの定数) とかで自分自身のフルパスを参照すると、幸せになれるかもです。
あとdir()とか。>__FILE__(定義済みの定数)
試してみました所、自分自身のところまでパスが来てしまうので、
ちょっと行きすぎでした。(幸せを逃しました。)
しかし、今後、何かには使えそうだなと感じました。
私にとって、この__FILE__は、
知っているようで意外と使えていない定数でした。
>あとdir()とか
これも初めて使ってみました。
仕様については何となく掴めましたが、
残念ながら、それを今回の場合においてどう利用すると、
幸せになれるのかが分かりませんでしたので、
ここでも幸せを逃しました。
しかし、頂いた1文から、多くの事を学ぶことができました。
ありがとうございます。
No.3
- 回答日時:
よくわかんないけど、環境変数で絶対パス拾ってきて絶対パスで指定したら書き換えはしなくてすむんじゃないかなぁ
require_once $_SERVER["DOCUMENT_ROOT"]."/index.php";
普通にインクルードできましたよ?
set_include_path ( string $new_include_path )
使ったてよさそうなのになんでだめなん?
>環境変数で絶対パス拾ってきて絶対パスで指定したら書き換えはしなくてすむんじゃ
そうみたいですね^^
初めて知りましたが、使えそうですね。
皆さん、よく使われる方法なんでしょうかね。
>set_include_path ( string $new_include_path )
ほぉ。。。
そんな技もあるのですか。。
ちょっと調べてみました。
-----------------------------------
<?php
// PHP 4.3.0 以降で動作します
set_include_path('/inc');
// すべてのバージョンの PHP で動作します
ini_set('include_path', '/inc');
?>
------------------------------------
というのを発見。
include_pathをスクリプト単位で変更できるようですが、
例えば、ディレクト全体で一括に変えられるのであれば、
そちらの方が楽そうですね。
あ~、この、
include_pathの設定をするスクリプト自体を
ファイルとして外に出し、
それをディレクトリ内のファイルに読み込ませておけば、
適宜、ディレクトリ単位で、include_pathの一括変更が可能そうですね。
ファイルの配置をダイナミックに移動させることが時々あるのですが、
その際に、「ソースの書き換えを行わなくて済む」方法があると
良いなと思っておりまして、
そうなると、やはり、$_SERVER["DOCUMENT_ROOT"]がベストなのでしょうかね。
[const]の配置位置や、[const]main.phpの配置位置がフラフラするようだと、
この「絶対パスによる方法」も、怪しくなってきますが、
どちらかと言うと、そういうフラフラよりかは、
[const]main.phpを読み込む側の複数あるファイルの中のどれかが
サイト内をダイナミックにフラフラすることの方がよくあるので、
相対パスよりか絶対パスで対処する方が得策な気がしてきました。
ただし、
ドキュメントルート以下で対応する場合に関しては、ですけども。
参考になりました。ありがとうございます。
No.1
- 回答日時:
php.iniでinclude_pathを書き換えるという方法が使えない状態で、
相対パスでないと引けない状態ということですと、
そのディレクトリ構成では無理です。
といったところで方法思いつきました、凄く微妙ですけど。
pageディレクトリに、constディレクトリを作ってその中に、ダミーのmain.phpを作成してやって、その中身は、
<?php
require_once '../../const/main.php';
?>
とだけ記述されていると。
つまり、ダミーのmain.phpをインクルードして、ダミーのmain.phpが本物のmain.phpを読んでくると。
そうすれば、今後以降や構成変更を行う場合でも最小限の労力ですむ・・・・かもしれません・・・・
これ以外の方法ですと、MVC構成のフレームワークなどであるフロントコントローラ+mod_rewriteなんかでアクセス制御したりするのがいいのかなぁってところでしょうか。
思っていたよりも、根の深い問題だったのですね。^^;
ということは、皆さん、それなりに苦労されているのでしょうね。苦笑
>php.iniでinclude_pathを書き換えるという方法が使えない状態で、
相対パスでないと引けない状態ということですと、
そのディレクトリ構成では無理です。
include_pathを書き換える方法の他に、
.htaccessファイルで対応できたりはしませんでしょうか。
やはり、対応できない類の設定なのでしょうか…。
>require_once '../../const/main.php';
結局、ここに、くせ者が居るわけですね。笑
私が最初考えたのは、
つまり、動的にインクルードできるような仕組みにしたい
ということなので、
読み込むファイル名(ファイルパス)を、動的な絶対パスで作成できないか、
というものです。
例えば、
require_once $_SERVER["SERVER_NAME"].'/const/main.php';
というような書き方です。
(もちろん、これではダメでしたが。)
でも、考え方的には、良い感じではありませんか?
>MVC構成のフレームワークなどであるフロントコントローラ+mod_rewriteなんかでアクセス制御
この辺りの読んでいる時の私の目は、白目でした。笑
つまり、まだよく分からないという…。苦笑
しかし、いつかのために、有り難く頭に入れておきます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) .htaccessファイルの修正がこれで問題ないかどうか 1 2022/04/21 08:42
- PHP phpでcookieがうまく保存されない 2 2023/08/02 16:40
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
- PHP アップロードファイルの数に応じてCSSを動的に変更したいのですが、方法がわかりません 3 2023/07/23 21:59
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
- PHP 掲示板を作成しておりアップロードファイルとメッセージを並べたいので、アドバイスお願い致します 2 2023/07/17 21:01
- Windows 10 指定したファイルを任意の範囲のディレクトリ内に上書き保存したい 1 2022/11/24 10:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
zendのcontrollersについて
-
fputsで書き込みを行う際に、in...
-
(初級)require等で共通ファイ...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
PHPからMSSQLへの接続結果の文...
-
フォームで戻った際に入力済み...
-
$filePath = './user_img/' . $...
-
.htaccessにphp_valueが使用できな
-
PHPのif文でその処理を途中で抜...
-
さくらサーバーでsessionが使え...
-
Apacheでhttp://localhost/が表...
-
phpでうまく画像がダウンロード...
-
Smarty includeでテンプレート...
-
現在位置より2つ上のディレク...
-
透過PNGが透過されない!!
-
「@$変数」の「@の意味は?」
-
インスタンス化に伴うメモリ消...
-
データ送信をボタンを押さずに...
-
PHP でmb_send_mailが上手くい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[PHP] 任意のDNSでIPアドレスを...
-
wordpressのルートのindex.php...
-
すべてのページのurlをindex.ph...
-
PHP/icludeを使った相対パスの...
-
require_onceで読み込む場合、...
-
.htaccessファイルの修正がこれ...
-
CakePHPの表示エラーについて
-
phpによる携帯振り分けとSEOの...
-
相対パスの挙動を理解できない
-
モバイルとPC にエージェン...
-
phpで24時間おきに任意のテキス...
-
ゼンド フレイムワークがどうや...
-
$_GET 取得できない
-
歴史上の人物や宗教
-
PHPでグローバルナビゲーション...
-
PEARを使ったメール送信でのinc...
-
特定のディレクトリだけ、phpを...
-
深い階層のフォルダの作成や削...
-
smartyで同じテンプレートを使...
-
ApacheのRewrite
おすすめ情報