使用php将变量永久写入php文件
我需要能够使用php永久更改php文件中的变量 我正在使用codeigniter和language helper创建一个多语言网站,该网站将文本以以下格式存储在php文件中:使用php将变量永久写入php文件,php,codeigniter,Php,Codeigniter,我需要能够使用php永久更改php文件中的变量 我正在使用codeigniter和language helper创建一个多语言网站,该网站将文本以以下格式存储在php文件中: $lang['title']=“Stuff” 我已经能够使用fopen()等访问文件的纯文本,我似乎可以用正则表达式找到我想要编辑的区域,并在进行更改后重写文件,但这似乎有点粗糙 是否有任何简单的方法可以使用php永久编辑这些变量 干杯我曾经遇到过类似的问题。我通过简单地添加一个smarty模板来修复它。我的做法如下: 从
$lang['title']=“Stuff”代码>
我已经能够使用fopen()等访问文件的纯文本,我似乎可以用正则表达式找到我想要编辑的区域,并在进行更改后重写文件,但这似乎有点粗糙
是否有任何简单的方法可以使用php永久编辑这些变量
干杯我曾经遇到过类似的问题。我通过简单地添加一个smarty模板来修复它。我的做法如下:
从文件中读取数组
添加到数组中
将阵列传递给smarty
在smarty中循环数组并使用模板生成文件(这样您就拥有了完全控制权,这在reg ex中可能会丢失)
替换文件
让我知道这是否有帮助。将数据存储到其他地方(例如数据库)并编写一个简单的脚本来生成*.php文件看起来更容易,上面有以下注释:
#
# THIS FILE IS AUTOGENERATED - DO NOT EDIT
#
如果它只是一个你正在处理的数组,你可能需要考虑一下。它将以有效PHP代码的格式打印或返回表达式
因此,如果您有一个包含大量$lang['title']=“Stuff”的语言_foo.php代码>行,您可以执行以下操作:
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_导出($lang,true);
文件内容('language\u foo.php','';
另一方面,如果将来不想手工编辑它们,则应该考虑以不同的方式存储数据(例如在数据库中,或者<代码>序列化)(Do等)。
< P>假设
- 您需要一个可读且可编辑的字典文件(无序列化等)
- 字典数组是一维关联数组:
我会的
Include()函数中的字典文件
对$lang
数组执行所有必要的操作(添加单词、删除单词、更改单词)
使用简单循环将$lang
数组写回文件:
foreach ($lang as $key => $value)
fwrite ($file, "\$lang['$key'] = '$value';\n";
当然,这是一种极其有限的方法。我真的很想看看是否有真正的“PHP源代码解析器、转换器和编写器”。使用这些函数应该可以做到这一点。如果它也是关于一个真正的多语言站点,您可能会喜欢研究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.');
}
如果维护变得麻烦的话,我也会从数据库自动生成 将允许您使用其“PHPArray”容器读取和写入包含设置的PHP文件。我发现生成的PHP比从var\u export()
生成的PHP可读性更强,这是个好问题!虽然有标记器,但它只会分解PHP代码,无法将其重新组合在一起。有兴趣看看会发生什么。你到底想做什么?为什么需要将语言动态写入CodeIgniter语言文件?如果这是一个CMS,那么扩展语言库以与DB接口肯定是一个更好的主意?+1用于var_导出。我不知道这会以完美的格式生成数据。如果你只想写,那就太完美了。-1投票支持错误的答案-你应该使用“序列化”-我投票赞成不指出自我修改代码会导致灾难。