Постоянно записывать переменные в php-файл с помощью php - PullRequest
9 голосов
/ 24 марта 2010

Мне нужно иметь возможность постоянно изменять переменные в php-файле, используя php.

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

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

Есть ли простой способ редактировать эти переменные постоянно, используя php?

Приветствия

Ответы [ 6 ]

7 голосов
/ 24 марта 2010

Если вы имеете дело только с массивом, вы можете рассмотреть 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, и т. Д.).

1 голос
/ 24 марта 2010

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

#
# THIS FILE IS AUTOGENERATED - DO NOT EDIT
#
0 голосов
/ 24 марта 2010

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

0 голосов
/ 24 марта 2010

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

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

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 голосов
/ 24 марта 2010

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

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

  • Массив Dictionary - это одномерный ассоциативный массив:

Я бы

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

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

  3. Записать массив $lang обратно в файл, используя простой цикл:

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

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

0 голосов
/ 24 марта 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...