私はこの構造を持っています
controllers
- base.php
\ subfolder
- home.php
でhome.php
電話したい
require("../base.php")
しかし、ファイルが見つからなかったというエラーメッセージが表示されます。同じフォルダで動作します。
サブフォルダで動作させる方法はありますか?
私はこの構造を持っています
controllers
- base.php
\ subfolder
- home.php
でhome.php
電話したい
require("../base.php")
しかし、ファイルが見つからなかったというエラーメッセージが表示されます。同じフォルダで動作します。
サブフォルダで動作させる方法はありますか?
フルパスの使用を試みることができます:
$origin = $_SERVER['DOCUMENT_ROOT'];
$home = $origin. "/controllers/home.php";
require($home);
しかし、それは長期的にはお尻の痛みであることを私は理解していますが、それは解決策です。私はこれまでそのような問題を抱えたことはありません。
しかし、おそらくこれはもっと役立つかもしれませんか?PHPインクルードファイル。エラーファイルが見つかりません
試す:
require("/<full dir path>/base.php");
もう1つのヒント-Windowsの場合(Linuxにデプロイする場合は役に立たない)は、ダブルスラッシュを使用して「\\」をエスケープする必要がある場合があります。
それが機能しない場合は、おそらくアクセス許可の問題です。
編集:これを使用して、インクルードパスを取得します。
echo ini_get('include_path');
これにより、使用するパスがわかります。
CodeIgniterはindex.php
スクリプト内から実行され、require
関数のパスはパスに基づいて解決されindex.php
ます。たとえばtest.php
、CodeIgniterルートフォルダーに入れてrequire './test.php'
からコントローラーから呼び出す場合test.php
、問題なく含まれます。
質問に答えるには、__DIR__
常に現在のスクリプトフォルダに設定されているphpマジック定数が必要です。答えは次のとおりです。
require __DIR__."/../base.php";
内から呼び出されますhome.php
。
編集:プラットフォームに依存しないソリューションは次のようになります:
require __DIR__.DIRECTORY_SEPARATOR."..".DIRECTORY_SEPARATOR."base.php";
この記事の執筆時点では、require
(および同様の関数の)パスがindex.phpの場所に基づいているという点で、受け入れられた答えは正しいです。ただし、CodeIgniterにはindex.phpで定義された非常に便利な定数があり、アプリケーションのさまざまな部分へのパスを作成できます。
APPPATH
定数は、コントローラー/ライブラリなどを指すのに最適です。
require APPPATH . 'controllers/base.php';
さらに良い解決策は、の形式でベースコントローラーを作成することですapplication/core/MY_Controller.php
。MY_Controller
その後、ファイルを必要とせずにを使用してコントローラーを拡張できます。ベースコントローラに関するPhilの記事をチェックしてください。