如何从另一个文件(如Wordpress install.PHP文件)编辑PHP文件?

如何从另一个文件(如Wordpress install.PHP文件)编辑PHP文件?,php,content-management-system,fopen,Php,Content Management System,Fopen,我正在尝试为我的CMS创建一个安装脚本,但我不知道如何 我希望脚本将config.php中的$var设置为输入的值 比如: 这是工作还是我在用坏方法?因为我试过了,但没用 file_put_contents('/path/to/config.php', "$settings1 = ".clean($_POST['settings1']), FILE_APPEND | LOCK_EX); 并且要知道权限。又快又脏。 需要编辑的文件: $i_am_a_var = [I AM A PLACE H

我正在尝试为我的CMS创建一个安装脚本,但我不知道如何

我希望脚本将
config.php
中的
$var
设置为输入的值

比如:


这是工作还是我在用坏方法?因为我试过了,但没用

file_put_contents('/path/to/config.php', "$settings1 = ".clean($_POST['settings1']), FILE_APPEND | LOCK_EX);
并且要知道权限。

又快又脏。
需要编辑的文件:

$i_am_a_var = [I AM A PLACE HOLDER NUMBER 4];
以下是安装脚本:

$c=file_get_content('file_to_edit.php');
$c=str_replace('[I AM A PLACE HOLDER NUMBER 4]',"'zimbabue the new value'",$c);
file_put_content('file_to_edit.php',$c);

执行此操作的方法是将配置文件解析为一个变量,对其进行解析并更改解析数据中的设置,然后将文件重新写入文件,覆盖旧文件

如果这是您自己的cms,并且您正在创建系统,那么我将使用数组配置,如$settings['key']=$value;或者您也可以创建ini文件,并使用php的内置函数解析然后重新写入数据

这是我用了很长时间的方法,它对我很有效

示例

以下是Zend Framework组件Zend_Config_Writer的示例用法:(http://zendframework.com/manual/en/zend.config.writer.introduction.html)

它们有用于ini、xml、yaml和本机php数组的组件。明智的做法是将其纳入您的cms或研究他们使用的方法

希望有帮助


Jay

我建议您使用.ini文件进行配置。它们非常容易阅读(比如看一看)。写它们有点困难,但我仍然认为这比你想做的要容易


此外,您也可以将JSON文件与JSON_encode()和JSON_decode()一起用于此类目的,因为您已经完成了读取和写入此类文件的函数。

请定义“不起作用”。除了极有可能受到最坏类型的注入的攻击之外,这看起来还不错。不过,您可能需要在定义“不起作用”时多做一些工作。我的水晶球在商店里。这段代码,即使它真的工作了,也会用你的一行“设置”完全覆盖原始文件,并生成一个语法无效(例如加载时出现致命错误)的php文件。它总是在同一行重写,并且设置以5-6组的形式输入到文件中。。。(5步安装)@Christ。它会在这里写出“=postvaluehere
,因为它使用了双引号,一个未定义的
$setings1
config.php`也是不带引号的,所以这段代码根本就不会运行。:D直接从POST将代码保存到php文件?:DDD这真是个好主意!我需要在之前和之后使用CHMOD 777和755?apache用户应该对该文件具有写入权限。您能再解释一下吗?这种方法对我来说非常有趣。。。我想创建一个数组,比如
$settings=array(1=>“value”,2=>“value2”,等等)…有没有办法用另一个函数写入它?文件是否需要存在或将被创建?我会在create函数中将其分为create和edit两个方法,如果您要使用Zend的包,请使用Zend_Config创建一个新的配置对象,然后将其传递给write方法。在编辑方法中,加载已存在的文件并更新设置,然后将其传递给写入方法。如果一个文件不存在,编写器将创建一个新文件。如果你不想使用Zend软件包,我会查看它们的源代码,寻找你想要使用的格式,并将功能复制到你的项目中?
$c=file_get_content('file_to_edit.php');
$c=str_replace('[I AM A PLACE HOLDER NUMBER 4]',"'zimbabue the new value'",$c);
file_put_content('file_to_edit.php',$c);
$config = new Zend_Config_Ini('config.ini',
                          null,
                          array('skipExtends'        => true,
                                'allowModifications' => true));

// Modify a value
$config->production->hostname = 'foobar';

// Write the config file
$writer = new Zend_Config_Writer_Ini(array('config'   => $config,
                                       'filename' => 'config.ini'));
$writer->write();