Мне нужно иметь возможность постоянно изменять переменные в php-файле, используя php.
Я создаю многоязычный сайт с использованием codeigniter и используя помощник языка, который хранит текст в php-файлах в переменных в этом формате: $lang['title'] = "Stuff";
Мне удалось получить доступ к обычным текстам файлов, используя fopen () и т. Д., И мне кажется, что я мог бы, вероятно, найти области, которые я хочу редактировать, с помощью регулярных выражений и переписать файл после внесения изменений, но это кажется немного взломанным.
Есть ли простой способ редактировать эти переменные на постоянной основе с помощью php?
ура
Если это всего лишь массив, с которым вы имеете дело, вы можете рассмотреть 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 . ' ?>');
вinclude('language_foo.php'); $lang['title2'] = 'stuff2'; $data = '$lang = ' . var_export($lang, true) . ';'; file_put_contents('language_foo.php', '<?PHP ' . $data . ' ?>');
Кроме того, если вы не захотите вручную редактировать их в будущем, вам следует рассмотреть возможность хранения данных по-другому (например, в базе данных или serialize()
'd и т. Д. И т. Д.).
Легче хранить данные где-то в другом месте (например, базу данных) и писать простой скрипт для генерации * .php-файлов с этим комментарием сверху:
# # THIS FILE IS AUTOGENERATED - DO NOT EDIT #
Однажды я столкнулся с подобной проблемой. Я исправил его, просто добавив шаблон smarty. То, как я это делал, было следующим:
Позвольте мне знать, если это помогает.
При условии, что
Вам нужен файл словаря в удобной для человека форме и редактируемой человеком форме (без сериализации и т. Д.),
Массив словаря является одномерным ассоциативным массивом:
я бы
Включить () файл словаря внутри функции
Выполняйте все необходимые операции над массивом $lang
(добавьте слова, удалите слова, измените слова)
Напишите массив $lang
обратно в файл, используя простой цикл:
foreach ($lang as $key => $value) fwrite ($file, "\$lang['$key'] = '$value';\n";
Конечно, это очень ограниченный подход. Мне было бы очень интересно узнать, есть ли подлинный «парсер, исходник и сценарист PHP». Это должно быть возможно, используя функции токенизатора .
Если это также действительно многоязычный сайт, вам может понравиться расширение 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.'); }
И я также автоматически создавал бы это из базы данных, если техническое обслуживание становится хлопот.
Pear Config позволит вам читать и писать файлы PHP, содержащие настройки, используя свой контейнер «PHPArray». Я обнаружил, что сгенерированный PHP более читабельен, чем с var_export()