Как написать или открыть массив php без оценки или расширения магической константы __DIR__
У меня есть файл конфигурации, который является массивом php с именем config.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');
3 ответа
Это невозможно, потому что 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 самостоятельно.
Вместо того, чтобы заменить путь на __DIR__
Вам также необходимо заменить начальный апостроф.
Например, если путь был /foo/bar
тогда вы захотите сделать эту замену:
"'/foo/bar"
в "__DIR__ . '"
До:
'/foo/bar/configs/template.php'
После:
__DIR__ . '/configs/template.php'
Как насчет написать конфигурацию напрямую:
$data = <<<EOT
return array('template_dir' => __DIR__ . '/configs/templates.php');
EOT;
file_put_contents($config, $data);