我需要能够使用php永久更改php文件中的变量。 $lang['title'] = "Stuff";
使用php永久地将变量写入php文件
我已经能够用来访问文件的纯文本:
我使用笨和使用语言的辅助存储这种格式的PHP文件中的文本变量创建多语言网站fopen()等等,我似乎可以找到我想用正则表达式编辑的区域,并在我做出更改后重写该文件,但看起来有点冒险。
是否有任何简单的方法来使用php永久编辑这些变量?
干杯
我需要能够使用php永久更改php文件中的变量。 $lang['title'] = "Stuff";
使用php永久地将变量写入php文件
我已经能够用来访问文件的纯文本:
我使用笨和使用语言的辅助存储这种格式的PHP文件中的文本变量创建多语言网站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 . ' ?>');
或者,如果你不想在手工编辑将来,您应该考虑以不同的方式存储数据(例如在数据库中,或者等等)。
+1取消了我的回覆,这是最简单的方法! – Andy 2010-03-24 10:58:18
为var_export提供+1。没有意识到为此产生完美格式的数据。 – 2010-03-24 10:59:28
如果你只想写,这是完美的。 – 2010-03-24 11:09:34
我曾经遇到类似的问题。我通过简单地添加一个聪明的模板来修复它。我做的方式,如下:
让我知道,如果这有助于。
它看起来比较容易的方式来存储在别处的数据(例如,数据库),并写一个简单的脚本来生成* .php文件,顶部此评论:
#
# THIS FILE IS AUTOGENERATED - DO NOT EDIT
#
假设
你需要在人类可读和人编辑的形式字典文件(没有序列化等。)
辞典阵列是一维的,关联数组:
我
包含()的函数的
是否所有内部词典文件$lang
数组上的必要操作(添加单词,删除单词,更改单词)
写$lang
阵列放回文件中使用一个简单的循环:
foreach ($lang as $key => $value)
fwrite ($file, "\$lang['$key'] = '$value';\n";
这是一个极其有限的方法,当然。我真的很感兴趣,看看是否有真正的“PHP源代码解析器,更换器和编写器”。这应该可以使用tokenizer功能。
如果它也是一个真正的多语言站点,您可能会喜欢寻找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.');
}
而且我还自动生成一个从数据库中,如果维护变得麻烦。
Pear Config将允许您使用其'PHPArray'容器读取和写入包含设置的PHP文件。我发现生成的PHP比从var_export()
更好的问题!有令牌生成器,但它只是分开PHP代码,它不能把它放回到一起。有兴趣看看会发生什么。 – 2010-03-24 10:52:09
你究竟想做什么?为什么你需要动态地将语言写入CodeIgniter语言文件?如果这是一个CMS,那么肯定将语言库扩展为与数据库接口将是一个更好的主意? – 2010-03-24 11:19:33