web-dev-qa-db-ja.com

PHPインクルードファイルのルートフォルダを設定する方法

インターネットの調査に何日も費やしましたが、理解して実装できる答えが見つかりません。

_include_once_ファイルを使用して、localhostと実際のサーバーの両方でWebサイトを適切に表示できるWebサイトがあります。

以前に_$_SERVER['DOCUMENT_ROOT']_を使用しましたが、localhostでは機能しないため、Webサイトを更新して変更を加えるのは困難です。

私がしたいのは、ルートフォルダーがhtdocsまたは_public_html_と呼ばれ、そこからファイルを「開始」することを伝えることができるconfig.phpファイルを作成することです。 。

または、インクルードパスを機能させる他の方法はありますか?

たとえば、 dirname(__FILE__)、___DIR___など。ただし、どのように機能するか、コードのどこに書き込むかなどは説明しませんでした。答えの一部を見つけるのに少しうんざりしていて、それから輪になって走り回り、隙間を「埋める」だけです。私はPHPの専門家ではありません。それを使って私の生活を少し楽にしようとしています。

14
Vetaxili

dirname(__FILE__)と___DIR___は同じで、___DIR___はPHP 5.3

これらは、「呼び出し元のファイルのパス」を示すために使用されます。

 URL:http://localhost/test/a.php 
 
 DIR:--NIX 
 /var/www/test/a.php 
 --WIN 
 D:\ lamp\www\test\a.php 
 
 // a.php's inside 
 <?php 
 echo __DIR __; 

Linuxでは次のようになります:_/var/www/test_

したがって、すべてのプロジェクトで設定パラメータが必要な場合は、config.phpで定義し、両方のファイル名を含める場所で使用します。

 ./ 
 config.php 
 index.php 
 header.php 
 footer.php 
 /lib
 foo.php 
 /tmp
 bar.php 

./config.php define('ROOT', __DIR__ .'/');

./index.php include_once(ROOT .'header.php'); ... include_once(ROOT .'footer.php');

つまり、_tmp dir_で使用します

./tmp/bar.php include_once(ROOT .'lib/foo.php');

[〜#〜] update [〜#〜]

_// config.php
<?php
define("ROOT", __DIR__ ."/");
_

そのため、これを_index.php_に使用して_banner.php_を含め、_banner.php_は_./banners/banner.php_で待機しています。

_// index.php and the very first line!
<?php
include_once("config.php");
?>
// some html stuff
// ...
<?php include_once(ROOT ."banners/banner.php"); ?>
// some more html stuff
// ...
_

そのため、最初に必要な場所にconfig.phpを含める必要があります。

これは必要な限り基本的なことだと思います...

[〜#〜] update [〜#〜]

あなたの問題はPHP includeシステムではなく、とにかく質問です... :)

イメージパスが変更されている場合(修正されていない場合)、次のようにできます。

_// config.php
define("ROOT", __DIR__ ."/");
define("HTTP", ($_SERVER["SERVER_NAME"] == "localhost")
   ? "http://localhost/your_work_folder/"
   : "http://your_site_name.com/"
);

// banner.php
<img src="<?php print HTTP; ?>images/banner.gif">
_
32
K-Gun

私は通常、インクルードディレクトリにconfig.phpを記述し、次の行を設定します。define('BASE_PATH', str_replace('/include', '', dirname(__FILE__)));( "/ includeは、config.phpファイルがあるディレクトリであれば、ルートディレクトリにある場合は、define('BASE_PATH', dirname(__FILE__));)を使用できます。その後に他のファイルを含める場合は、include_once(BASE_PATH . '/directory/file.php');を使用します。

注:この概念は、決して私にとって独創的なものではありません。

3
jpevarnek

現在の作業ディレクトリを取得/表示するために、phpにはそのための組み込み関数があります

 echo getcwd() . "\n";

これにより、現在実行中のphpファイルの現在のディレクトリが表示されます。

1
Pir Fahim Shah

現在の作業フォルダーを返す getcwd() という関数があります。スクリプトの最初にこれを呼び出すと、通常はdefine()を使用して定数に保存できます。

define('PROJECT_ROOT', getcwd());
1
Whisperity

インクルードパスを変更することもできます。たとえば、

$dir = dirname(__FILE__);
set_include_path($dir . '/../library' . PATH_SEPARATOR . $dir . '/../engine' . PATH_SEPARATOR . get_include_path()); 
0
JohnK