Последнее редактирование:
Что ж, я придумала довольно «надежное» решение 🙂 в виде (переносимой) функции, но поскольку некоторые люди здесь достаточно раздражены, не понимая проблему, и заблокировали этот вопрос (военное решение: убей то, чего не понимаешь) ), Я не могу опубликовать это здесь. Жалость.
У меня есть набор файлов, которые содержат константы, как показано ниже.
define ('LNG_GSU_LNK_LBL', '[details]'); define ('LNG_METHODCROSS_GSU_CLS', 'class'); define ('GSU_METH', 'method'); define ('CROSS_GSU_ACTION_NO_REMOVE', 'не может удалить \' module \ '(is); развернуто');
Какой самый надежный метод для извлечения имен констант и значений из заданного, выбранного файла.
РЕДАКТИРОВАТЬ:
Мне нужно получить эти константы в массив, не определяя их фактически, непосредственно путем чтения файла, например:
массив ('LNG_GSU_LNK_LBL' => '[details]', 'LNG_METHODCROSS_GSU_CLS' => 'class')
… так далее
РЕДАКТИРОВАТЬ 2:
До сих пор я получил это далеко:
$ file_array = file ($ path, FILE_SKIP_EMPTY_LINES); // внедряем lang файл в строку, удаляя php теги $ string1 = implode ('', $ file_array); $ string2 = str_replace (array (''), '', $ string1); // регулярное выражение удаления содержимого между маркерами $ regex = '/\/\*.+?\*\//si'; $ replace_with = ''; $ replace_where = $ string2; $ string3 = preg_replace ($ regex, $ replace_with, $ replace_where); // регулярное выражение: удалить несколько новых строк $ string4 = preg_replace ("/ \ n + /", "\ n", $ string3);
РЕДАКТИРОВАТЬ 3:
ожидаемый результат
массив ( 'LNG_GSU_LNK_LBL' => '[details]', 'LNG_METHODCROSS_GSU_CLS' => 'class', 'GSU_METH' => 'method', 'CROSS_GSU_ACTION_NO_REMOVE' => 'не может удалить \' module \ '(is); развернуть» );
Если вы не хотите включать файл, вы должны использовать: token_get_all ().
В противном случае вам нужно / включить файл, содержащий их, и вы можете использовать итеративно get_defined_constants()
:
$all = array();
$consts = get_defined_constants();
foreach($consts as $k=>$v){
if (strpos($k,"LNG")===0 && !isset($all[$k]))
$all[$k]=$v;
}
Обратите внимание, что синтаксический анализ исходного кода PHP похож на синтаксический анализ HTML с регулярным выражением, лучше держаться подальше от этого.
Основываясь на ответе Dynamic, включите файл в другой отдельный файл, доступный через Интернет, который не загружается в ваше текущее приложение (поэтому не будет других пользовательских констант во время выполнения):
//standalone.php
include "that_file.php";
$consts = get_defined_constants(true);
$newUserConsts = $consts['user'];
echo json_encode($newUserConsts);
//within your application
$newUserConsts = json_decode(file_get_contents('http://yoursite.com/standalone.php'));
Или, если вы не можете сделать отдельный файл, доступный через Интернет:
$consts = get_defined_constants(true);
$existingUserConsts = $consts['user'];
include "that_file.php";
$consts = get_defined_constants(true);
$newUserConsts = $consts['user'];
var_dump(array_diff_key($newUserConsts, $existingUserConsts));