2010-03-24 69 views
9

我需要能够使用php永久更改php文件中的变量。 $lang['title'] = "Stuff";使用php永久地将变量写入php文件

我已经能够用来访问文件的纯文本:

我使用笨和使用语言的辅助存储这种格式的PHP文件中的文本变量创建多语言网站fopen()等等,我似乎可以找到我想用正则表达式编辑的区域,并在我做出更改后重写该文件,但看起来有点冒险。

是否有任何简单的方法来使用php永久编辑这些变量?

干杯

+0

更好的问题!有令牌生成器,但它只是分开PHP代码,它不能把它放回到一起。有兴趣看看会发生什么。 – 2010-03-24 10:52:09

+1

你究竟想做什么?为什么你需要动态地将语言写入CodeIgniter语言文件?如果这是一个CMS,那么肯定将语言库扩展为与数据库接口将是一个更好的主意? – 2010-03-24 11:19:33

回答

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 . ' ?>'); 

或者,如果你不想在手工编辑将来,您应该考虑以不同的方式存储数据(例如在数据库中,或者等等)。

+0

+1取消了我的回覆,这是最简单的方法! – Andy 2010-03-24 10:58:18

+0

为var_export提供+1。没有意识到为此产生完美格式的数据。 – 2010-03-24 10:59:28

+0

如果你只想写,这是完美的。 – 2010-03-24 11:09:34

0

我曾经遇到类似的问题。我通过简单地添加一个聪明的模板来修复它。我做的方式,如下:

  1. 从文件中读取数组
  2. 添加到阵列
  3. 传递数组中的智者在阵列上给Smarty
  4. 回路,并使用生成文件模板(这样,你有完全的控制,这可能会在REG-EX会丢失)
  5. 替换文件

让我知道,如果这有助于。

1

它看起来比较容易的方式来存储在别处的数据(例如,数据库),并写一个简单的脚本来生成* .php文件,顶部此评论:

# 
# THIS FILE IS AUTOGENERATED - DO NOT EDIT 
# 
0

假设

  • 你需要在人类可读和人编辑的形式字典文件(没有序列化等。)

  • 辞典阵列是一维的,关联数组:

  1. 包含()的函数的

  2. 是否所有内部词典文件$lang数组上的必要操作(添加单词,删除单词,更改单词)

  3. $lang阵列放回文件中使用一个简单的循环:

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

这是一个极其有限的方法,当然。我真的很感兴趣,看看是否有真正的“PHP源代码解析器,更换器和编写器”。这应该可以使用tokenizer功能。

0

如果它也是一个真正的多语言站点,您可能会喜欢寻找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

Pear Config将允许您使用其'PHPArray'容器读取和写入包含设置的PHP文件。我发现生成的PHP比从var_export()