16

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

ファイルを使用したいWebサイトがありinclude_once、ローカルホストと実際のサーバーの両方でWebサイトを正しく表示できます。

以前に使用$_SERVER['DOCUMENT_ROOT']したことがありますが、ローカルホストでは機能しないため、Webサイトを更新して変更するのは困難です。

私がやりたいのは、ある種のconfig.phpファイルを作成することです。このファイルでは、ルートフォルダーが呼び出されているか、そこからファイルの検索htdocspublic_html「開始」することができます。

または、動作するインクルードパスを取得する他の方法はありますか?

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

4

5 に答える 5

38

dirname(__FILE__)両方とも__DIR__同じで、__DIR__PHP5.3が付属しています

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

URL:http://localhost/test/a.php

DIR:--NIX
     /var/www/test/a.php
     - 勝つ
     D:\ lamp \ www \ test \ a.php

//a.phpの内部
<?php
エコー__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.phpinclude_once(ROOT .'header.php'); ... include_once(ROOT .'footer.php');

つまり、tmp dir

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

アップデート

// 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を必要な場所に含める必要があります。

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

アップデート

だからあなたの問題はPHPincludeシステムではありませんが、とにかく質問です... :)

画像パスが変更されている場合(固定されていない場合)、次のように実行できます。

// 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">
于 2012-08-09T12:42:59.463 に答える
3

私は通常、あなたが言ったこと、config.phpをincludeディレクトリに設定し、その中に次の行を入れます:( define('BASE_PATH', str_replace('/include', '', dirname(__FILE__)));"/ includeは、ルートディレクトリにある場合はconfig.phpファイルが入っているディレクトリです。 )を使用できますdefine('BASE_PATH', dirname(__FILE__));。その後に他のファイルを含めたい場合は、を使用しますinclude_once(BASE_PATH . '/directory/file.php');

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

于 2012-08-09T12:01:50.140 に答える
1

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

define('PROJECT_ROOT', getcwd());
于 2012-08-09T12:01:24.760 に答える
1

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

 echo getcwd() . "\n";

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

于 2015-06-30T20:07:54.017 に答える
0

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

$dir = dirname(__FILE__);
set_include_path($dir . '/../library' . PATH_SEPARATOR . $dir . '/../engine' . PATH_SEPARATOR . get_include_path()); 
于 2015-09-03T16:59:04.790 に答える