3

config.php という名前の php 配列である構成ファイルがあります。

return array(
    'template_dir' => __DIR__ '/configs/templates.php'
)

次に、この構成ファイルを使用したいときはいつでも、config.php をインクルードします。この方法で構成ファイルを作成するのも非常に簡単です。

file_put_contents($config, 'return ' . var_export($data, true));

しかし、魔法の定数DIRを展開せずに構成ファイルに書き込めるようにしたいと思います。これまでのところ、これを行う方法を思いつくことができませんでした。recursiveArrayReplace メソッドを作成してパス全体を削除し、それを

    __DIR__

しかし、それは常に

    '__DIR__ . /configs/template.php'

その場合、実行時に展開されません。

どうすれば書けますか

   __DIR__ to an array in a file or how ever else without the quotes so that it looks like,

array('template_dir' => __DIR__ . '/configs/templates.php');
4

3 に答える 3

1

パスを に__DIR__置き換える代わりに、先頭のアポストロフィも置き換える必要があります。

たとえば、パスが次の/foo/bar場合は、次のように置き換えます。

"'/foo/bar""__DIR__ . '"


前:

'/foo/bar/configs/template.php'

後:

__DIR__ . '/configs/template.php'
于 2012-10-08T04:06:40.460 に答える
1

var_export()式ではなく変数を出力するため、これは不可能です。

代わりに、すべてのパスを相対ディレクトリとして記述し、データを取得した後に完全な作業パスに正規化することをお勧めします。

オブジェクトを返すことも検討できます。

class Config
{
    private $paths = array(
        'image_path' => '/configs/template.php',
    );

    public function __get($key)
    {
        return __DIR__ . $this->paths[$key];
    }
}

return new Config;

または、PHP コードを自分で生成する必要があります。

于 2012-10-08T04:15:40.077 に答える
0

次のように設定を直接書くのはどうですか:

$data = <<<EOT
return  array('template_dir' => __DIR__ . '/configs/templates.php');
EOT;

file_put_contents($config, $data);
于 2012-10-08T04:14:32.113 に答える