Это неортодоксальные вопрос, но есть достаточно простой ответ здесь, что не требует регулярных выражений, поэтому я представлю это вместо этого.
Предположим, что ваш конфигурационный файл называется config.php
и содержит фрагмент кода, который вы указали в вашем примере:
<?php
return [
'var1' => 'test1',
'var2' => 'test2',
'var3' => 'test3',
];
Вы действительно можете присвоить возвращаемое значение include
или require
переменной. Например, в другом сценарии (если вы находитесь в том же каталоге), вы можете сделать это:
<?php
// your config file...
$file = __DIR__ . '/config.php';
// ensure the file exists and is readable
if (!is_file($file) || !is_readable($file)) {
throw new RuntimeException(
sprintf('File %s does not exist or is not readable!', $file)
);
}
// include file and assign to variable `$config`
// which now contains the returned array
$config = include $file;
echo 'original config:' . PHP_EOL;
print_r($config);
// update config key `var1`
$config['var1'] = 'UPDATED!';
echo 'updated config:' . PHP_EOL;
print_r($config);
Это дает:
original config:
Array
(
[var1] => test1
[var2] => test2
[var3] => test3
)
updated config:
Array
(
[var1] => UPDATED!
[var2] => test2
[var3] => test3
)
Я был первоначально немного удивлен тем, что вы могли бы использовать return
вне контекст функции/метода, но это совершенно верно. Вы узнаете что-то новое каждый день ... Этот вариант использования фактически документирован в соответствии с документацией для include
- для получения более подробной информации см. Example #5 include and the return statement.
Обратите внимание, что если вы используете include
или require
, чтобы использовать ненадежные или внешние скрипты, применяются обычные соображения безопасности. Это обсуждается в документации, приведенной выше.
Кроме того, если ваш файл включен в синтаксическую ошибку, то вы, вероятно, получите parse error
или подобное, но я думаю, это очевидный момент!
Редактировать
Наконец, следует указать на то, что Ваш вопрос не спрашивает, как сохранить обновленную конфигурацию обратно в файл, но вы же оставить комментарий под этим предполагает, что вы хотите сделать это также ,
Однако, если вы хотите обновить и сохраняться в конфигурации на файл, я бы определенно использовать более податливый метод для записи/чтения эти данные/с диска - возможно json_encode()
и json_decode
, serialize()
и unserialize()
.
Тем не менее, вот наивный раствор, в котором вы можете написать свои обновленные конфигурации:
// ...
// file has to be writeable!
if (!is_writeable($file)) {
throw new RuntimeException(
sprintf('File %s is not writeable!', $file)
);
}
file_put_contents($file,
sprintf('<?php return %s;', var_export($config, true)));
Далее чтение:
Надеется, что это помогает :)
И как это, что происходит? – Utkanos
И почему это не так просто, как 'echo $ array ['var1'];' работает для вас? – JakeGould
@JakeGould, потому что я хочу извлечь значение из файла, а затем обновить значение и вставить его обратно в файл. – Tafelglotzer