74

ファイル /root/update/test.php があります。/root/connect.php というファイルもあります。このファイルには次の行があります

include "../config.php";

/root/update/test.php 内。そこにコードがあります

set_include_path(".:/root");
include "connect.php";

/root/update/test.php を実行すると、connect.php は見つかりますが、config.php が見つからないというメッセージが表示されます。

PHP Warning:  include(../config.php): failed to open stream: No such file or directory in /root/connect.php on line 2
PHP Warning:  include(): Failed opening '../config.php' for inclusion (include_path='.:/root')

警告によって、すべてを正しく実行しているように見えるため、これは混乱を招きます。インクルード パスは /root であり、存在するファイル ../config.php (/config.php) を探しています。誰かが私のためにこれを片付けることができますか? アクセス権のない本番サーバーにデプロイするため、絶対パスを使用することはできません。

Ubuntu/アパッチ

4

3 に答える 3

147

次を使用していつでも含めることができます__DIR__

include(dirname(__DIR__).'/config.php');

__DIR__は「魔法の定数」であり、末尾のスラッシュなしで現在のファイルのディレクトリを返します。これは実際には絶対パスです。ファイル名を に連結するだけです__DIR__。この場合、ディレクトリをさかのぼる必要があるためdirname、ファイル ツリーをさかのぼる PHP を使用し、ここから にアクセスできますconfig.php

このメソッドでもルート パスを設定できます。

define('ROOT_PATH', dirname(__DIR__) . '/');

test.php では、ルートが/root/レベルに設定されます。

include(ROOT_PATH.'config.php');

次に、必要な場所から構成ファイルを含めるように機能する必要があります。

于 2013-07-01T15:18:51.410 に答える
1

絶対パスはオプションではないと信じていることに感謝しますが、相対パスや PHP インクルード パスの更新よりも優れたオプションです。

環境に基づいて設定できる定数を含む絶対パスを使用します。

if (is_production()) {
    define('ROOT_PATH', '/some/production/path');
}
else {
    define('ROOT_PATH', '/root');
}

include ROOT_PATH . '/connect.php';

コメントしたように、現在のパスなどROOT_PATHから派生させることもできます。$_SERVER['DOCUMENT_ROOT']

于 2013-07-01T15:09:09.070 に答える