Постоянно запишите переменные в php файл с php

Я должен смочь постоянно заменить переменные в php файле с помощью php.

Я создаю многоязычный сайт с помощью codeigniter и с помощью помощника языка, который хранит текст в php файлах в переменных в этом формате: $lang['title'] = "Stuff";

Я смог получить доступ к простому тексту файлов с помощью fopen () и т.д., и я кажется, что я мог, вероятно, определить местоположение областей, с которыми я хочу отредактировать с регулярными выражениями и переписать файл, после того как я внес изменения, но это кажется небольшим hacky.

Там какой-либо простой способ состоит в том, чтобы отредактировать эти переменные постоянно с помощью php?

Удачи

9
задан DonutReply 24 March 2010 в 10:47
поделиться

6 ответов

Если вы имеете дело только с массивом, вы можете рассмотреть вариант var_export . Он распечатает или вернет выражение в формате, соответствующем PHP-коду.

Итак, если у вас есть language_foo.php, содержащий кучу $ lang ['title'] = "Stuff"; строк, вы можете сделать что-нибудь вроде:

include('language_foo.php');
$lang['title2'] = 'stuff2';
$data = '$lang = ' . var_export($lang, true) . ';';
file_put_contents('language_foo.php', '<?PHP ' . $data . ' ?>');

В качестве альтернативы, если вы не захотите вручную редактировать их в будущем, вам следует рассмотреть возможность хранения данных другим способом (например, в базе данных или serialize () 'd и т. д.).

7
ответ дан 4 December 2019 в 22:28
поделиться

Pear Config позволит вам читать и записывать файлы PHP, содержащие настройки, используя его контейнер 'PHPArray'. Я обнаружил, что сгенерированный PHP более читабелен, чем PHP из var_export ()

0
ответ дан 4 December 2019 в 22:28
поделиться

Предполагая, что

  • Вам нужен файл словаря в удобочитаемой и редактируемой человеком форме (без сериализации и т. Д.)

  • Массив Dictionary представляет собой одномерный ассоциативный массив:

Я бы

  1. Включить () файл словаря внутри функции

  2. Выполнить все необходимые операции с массивом $ lang (добавить слова, удалить слова, изменить слова)

  3. Записать $ lang обратно в файл с помощью простого цикла:

     foreach ($ lang as $ key => $ value) 
    fwrite ($ file, "\ $ lang ['$ key'] = '$ value '; \ n "; 
     

, конечно, это крайне ограниченный подход. Мне было бы действительно интересно узнать, существует ли настоящий" синтаксический анализатор, средство изменения и записи исходного кода PHP ". Это должно быть возможно сделать с помощью функций токенизатора .

0
ответ дан 4 December 2019 в 22:28
поделиться

Кажется, намного проще хранить данные в другом месте (например, в базе данных) и написать простой скрипт для генерации файлов * .php с этим комментарием вверху:

#
# THIS FILE IS AUTOGENERATED - DO NOT EDIT
#
1
ответ дан 4 December 2019 в 22:28
поделиться

Если речь идет также о действительно многоязычном сайте, вам может быть интересно заглянуть в gettext расширение PHP. Он возвращается к библиотеке, которая использовалась для локализации в течение многих лет, и где инструменты, позволяющие не отставать от файлов перевода, существуют почти столько же. Это также делает поддержку всех языков в более поздних версиях продукта более интересной.

Что касается других новостей, я бы не использовал массив, а скорее подходящие определения, чтобы у вас был файл

switch ($lang) {
case 'de':
  define('HELLO','Hallo.'); 
  define('BYE','Auf wiedersehen.'); 
break;
case 'fr':
   define('HELLO','Bonjour'); 
   define('BYE','Au revoir.'); 
   break;
case 'en':
default:
   define ('HELLO','Hello.'); 
   define ('BYE','Bye.'); 
}

И я бы также автоматически сгенерировал его из базы данных, если обслуживание становится проблемой.

0
ответ дан 4 December 2019 в 22:28
поделиться

Однажды я столкнулся с подобной проблемой. Я решил ее, просто добавив шаблон smarty. Я сделал это следующим образом:

  1. Считать массив из файла
  2. Добавить в массив
  3. Передать массив в smarty
  4. Перебрать массив в smarty и сгенерировать файл с помощью шаблона (таким образом вы получаете полный контроль, которого может не хватать в reg-ex)
  5. Заменить файл

Дайте мне знать, если это поможет.

0
ответ дан 4 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: