1

重複の可能性:
PHPにはトップディレクトリのファイルが必要です

私は長い間PHPを使用してきましたが、仕事を成し遂げるために常にPHPを作成してきました。現在、ベストプラクティスを学び、スキルを向上させようとしています。今、私は任意のディレクトリからPHPスクリプトにファイルを含めるための最良の方法は何であるか疑問に思っています。

私はいつも次のことをしました:

<?php
    // From settings.php
    define('ABSPATH', '/home/dalyn/public_html/');

    // Then I put this at he top of all of my other files

    include 'includes/settings.php';
    include ABSPATH . 'includes/db.php';
    include ABSPATH . 'includes/functions.php';
?>

しかし、ファイルがサブディレクトリにある場合は、次のようなことを行う必要があります。

<?php
    include '../includes/settings.php';
    include ABSPATH . 'includes/db.php';
    include ABSPATH . 'includes/functions.php';
?>

これを行うためのより良い方法はありますか?私はOOPを学び始めているので、適用できるOOPソリューションがあれば、私はすべての耳です。

ありがとうございました。

4

4 に答える 4

2

私は通常、私のapplication / Bootstrap.php(zendフレームワークアプリケーションの場合)にこれに似たものを持っています。

define( 'BASE_PATH'          , dirname( __DIR__ ) . '/'                          ); //!< application root directory: note this file is not in the root directory  
define( 'VAR_PATH'           , BASE_PATH        . 'var/'                         ); //!< optional system generated config files
define( 'CACHE_PATH'         , BASE_PATH        . 'cache/'                       ); //!< caches in the filesystem. See ISV_CacheManager
define( 'APPLICATION_PATH'   , BASE_PATH        . 'application/'                 ); //!< where the modules live
define( 'MODEL_PATH'         , APPLICATION_PATH . 'models/'                      ); //!< path to models
define( 'FORM_PATH'          , APPLICATION_PATH . 'forms/'                       ); //!< path to forms
define( 'CONTROLLER_PATH'    , APPLICATION_PATH . 'modules/default/controllers/' ); //!< path to default module controllers
define( 'HELPER_PATH'        , APPLICATION_PATH . 'helpers/'                     ); //!< global zend view helpers
define( 'INCLUDE_PATH'       , APPLICATION_PATH . 'include/'                     ); //!< useful support classes
define( 'DOCUMENT_ROOT'      , $_SERVER['DOCUMENT_ROOT']                         ); //!< http root directory. note _no_ trailing slash.  
define( 'IMAGE_PATH'         , '/image/'                                         ); //!< from the http document root 
define( 'SCRIPT_PATH'        , '/js/'                                            ); //!< from the http DOCUMENT_ROOT

それらのいくつかはオートローダーに供給され、他のものはrequire_onceMODEL_PATHのような直接インクルードパスに使用します。'Directory / Directory / IncludeFile.php';

于 2012-11-10T00:35:52.070 に答える
1

自動読み込みを試しましたか?http://php.net/manual/en/language.oop5.autoload.php ..申し訳ありませんが、コメントを書き込む権限がまだありません。

更新されました。Wesleyは正しいです。自動ロードを機能させるには、クラス名をファイル名と同じにする必要があります。申し訳ありませんが、OOP-PHPを実行していると思います。自動ロードが機能しない場合は、従来の方法で行う必要があります

function __autoload($class) {
require ABSPATH. $class .".php";
}

classname=filenameのABSPATH内のファイルはすべて自動的にロードされます。

異なるファイルを含むさまざまなパスがある場合は、パス名を使用して複数の定数変数を作成する必要があります。そして、特定のパスを使用してオートロード内でそれらを呼び出します。

たとえば。

class Myprogram{

public function __construct(){

define('ABSPATH', '/home/dalyn/public_html/');
define('ABSPATH_1', '/home/dalyn/public_html/includes');
define('ABSPATH_2', '/home/dalyn/public_html/some_other_folder');

}

function __autoload($class) {
require ABSPATH. $class .".php";
    require ABSPATH_1. $class .".php";
    require ABSPATH_2. $class .".php";
 }   

}

//Some other file
$myProg = new Myprogram(); // this will define your constants as well as autoload all the required files

OOPを使用していない場合。さまざまなパスを定数として定義し、現在の方法でファイルを含める必要があります。このプロセスを自動化したい場合

このコードは役に立ちます。

if ($handle = opendir(ABSPATH)) {
  while (false !== ($entry = readdir($handle))) {
     if ($entry != "." && $entry != "..") {
        include_once ABSPATH . $entry;
    }
  }
  closedir($handle);
}

これには、ABSPATHフォルダーに存在するすべてのファイルが含まれます。関数を作成して、任意のパスで呼び出すことができます。

お役に立てれば。

ディン

于 2012-11-09T23:51:57.007 に答える
0

何かを含めるときは、を使用しdirname(__FILE__)て、含めようとするファイルへのパスを取得します。

<?php
include dirname(__FILE__).'/includes/db.php';

ただし、OOPを使用する場合は、クラスを使用するときにファイルが自動的に含まれるクラスローダーを確認することをお勧めします。Doctrineを使用したものやComposerを使用したもののように、すでにコーディングされているものがいくつかあります。

http://www.doctrine-project.org/

http://getcomposer.org/

于 2012-11-09T23:55:34.117 に答える
0
 set_include_path('.'.PATH_SEPARATOR.'your path to includes folder'
            . PATH_SEPARATOR . './library/'
);
于 2012-11-10T03:14:54.083 に答える