質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

4回答

308閲覧

phpでインクルードするときのファイルパスについて

Wood

総合スコア8

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2018/04/27 01:35

前提・実現したいこと

/
L parts - all.php
L lib - human.php
| L wood.php
L index.php

上記のフォルダ構成でindex.phpとhuman.phpにpartsのall.phpをincludeする際の話です。

発生している問題・エラーメッセージ

index.phpでall.phpをインクルードする時は、include ("parts/all.php");
human.phpでall.phpをインクルードする時は、include("../parts/all.php");
だと思うのですが、
これをいちいち切り替えるのがめんどくさいという話になります。
これを解消するにはどうしたらいいのでしょうか?

補足情報

補足してほしいことがあれば、質問お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

includeするファイルの置き場所どんなものでも、/partsに固定する、というお話であれば。

phpの設定として、「includeパス」を指定することも可能ですよ。

プログラムの中で設定するなら

php

1set_include_path('/parts')

か、

php

1ini_set('include_path', '/parts');

これが、手間であれば
.htaccess ファイルでも指定可能だったかと。

これを設定しておくと、

include('all.php')

と書いた時に、このincludeパスのディレクトリを参照しに行けるようになるはずです。

投稿2018/04/27 01:50

mix-peach

総合スコア1910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ある程度の規模があるプロジェクトなら、オートロードに任せてしまいましょう。自分でincludeを書く必要もなくなります。

PHPのオートロード(autoload)

投稿2018/04/27 01:38

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/28 01:34

ただたんに composer などを利用するだけでは解決しないと思いますよ・
maisumakun

2018/04/28 01:41

そういう基盤整備をすることも含めて、「ある程度の規模があるプロジェクトなら」という前提を付けています。
guest

0

対象ディレクトリまでのフルパスを何かしら定数を用意されてもよいと思いますが、おそらく簡単なのは下記ですね。

DOCUMENT_ROOT

現在実行されているスクリプトが存在するドキュメントルート ディレクトリです。サーバーのコンフィグレーションファイルで 定義されています。

※ただしPHP をコマンドラインで実行している場合には、 使用できるものは僅かであることに注意してくださいとマニュアルにもあるので動作させる環境には注意してください。

public_html/がドキュメントルートとして下記のようになっていたら

public_html/       L parts - all.php       L lib - human.php       | L wood.php       L index.php

下記のような形でpartsディレクトリまでのフルパスが取得できるはず。

php

1$_SERVER["DOCUMENT_ROOT"]."/parts/";

投稿2018/04/27 01:43

編集2018/04/27 03:56
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/27 03:45

おかん、確かCLIで動かす場合は$_SERVERはセットされへんから使えへんので注意が必要や言うといたほうがええで。
m.ts10806

2018/04/27 03:52

おかん? index.phpとかそういうところからブラウザ参照前提で考えてました。 追記しておきます。
退会済みユーザー

退会済みユーザー

2018/04/28 01:36

Listing するようなCLIアプリも index.php だな・・・・
guest

0

こんな関数用意しとく

php

1function get_lib_file_path($fname){ 2 if(file_exists($f=$_SERVER["DOCUMENT_ROOT"].'/public/lib/'.$fname.'.php')){return $f;} 3 return false; 4} 5

こう使う

php

1if($f= get_lib_file_path('hoge')){include $f;}

こんな風にしてpublic/libになければdefault/libのものをincludeというのにもしやすい

php

1function get_lib_file_path($fname){ 2 if(file_exists($f=$_SERVER["DOCUMENT_ROOT"].'/public/lib/'.$fname.'.php')){return $f;} 3 if(file_exists($f=$_SERVER["DOCUMENT_ROOT"].'/default/lib/'.$fname.'.php')){return $f;} 4 return false; 5} 6

投稿2018/04/27 04:13

KazuhiroHatano

総合スコア7804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問