我的某个网站有一个config.php文件,其中包含运行该网站所需的信息。它有点像这样:
<?php
$site_name="The Site";
$base_url = "http://site.com";
$upload_path = "/images";
?>
从中获取值很简单,我只使用require 'config.php';
但是如何从html表单中添加选项呢?意味着我如何更新价值观?我想到的一种方法是使用fopen和fsave,有点像这样:
<?php
$filename = 'config.php';
$somecontent = "config here";
if (is_writable($filename)) {
if (!$handle = fopen($filename, 'w')) {
echo "Cannot open file ($filename)";
exit;
}
// Write $somecontent to our opened file.
if (fwrite($handle, $somecontent) === FALSE) {
echo "Cannot write to file ($filename)";
exit;
}
echo "Success, wrote ($somecontent) to file ($filename)";
fclose($handle);
} else {
echo "The file $filename is not writable";
}
?>
但这是执行此操作的标准方法吗?这是所有这些cms写出配置文件的方式吗?
答案 0 :(得分:4)
$cfg['sitename'] = $_POST['sitename'];
$file = "config.php";
$contents = "<?php\r\n\$cfg=".var_export($cfg,1).";\r\n?>";
file_put_contents($file,$contents);
答案 1 :(得分:3)
好吧,我不喜欢重写PHP脚本(config.php)的想法。
我认为更好的解决方案是拥有一个config.ini文件(您必须保护对文件的访问权限。您可以通过.htaccess文件执行此操作,或者您可以将文件移出document_root范围)并阅读文件。
config.ini内容:
key1 = value
key2 = value
key3 = value
key4 = value
注意:
[Production]
mysql_server = value
mysql_username = value
...
[Development]
mysql_server = value
mysql_username = value
...
答案 2 :(得分:2)
写入.php文件根本不是一个好主意。最好将配置存储在数据库,.ini文件或xml文件中。使用这个“存储”进行配置使其非常易于读写。
注意:请注意,您应该从文档根目录中输出.ini,.xml文件,以避免从Web访问它。
另外,我建议你检查Zend Config http://framework.zend.com/manual/ru/zend.config.html,了解如何在OOP MVC框架中实现对配置的写入。
答案 3 :(得分:1)
您可以使用模板引擎为config.php创建模板,例如Smarty的
<强> config.tpl 强>
<?php
// DB Settings
$db_host = "{$db->host}";
$db_user = "{$db->user}";
$db_password = "{$db->password}";
...
使用Smarty为您渲染 config.php 并捕获输出并保存到真实配置文件。
<?php
$smarty->assign('db', $db);
$output = $smarty->fetch('config.tpl');
// ...save the output into config.php
使用此方法的优点是您可以分离配置文件的布局和内容,例如您可以在配置文件中添加额外的注释,或轻松安排项目的订单。
此外,使用此方法,您可以轻松转移到其他格式,如 INI 或 XML 格式,如其他人所建议的那样。
答案 4 :(得分:1)
我已经使用tszming的模板解决方案一段时间了,如果您已经轻松使用Smarty或其他模板系统,它可以正常工作,否则可能需要付出太多精力来保存您的配置。
更简单的解决方案是在数组中包含所有配置选项,并将其保存在编码为JSON的文件中。在每个脚本的开头,您file_get_contents()
和json_decode()
将设置文件放入数组中。每当您想要保存当前选项时json_encode()
选项数组,并使用file_put_contents()
写入设置文件。
这允许PHP以最小的麻烦读取和编写配置,但您仍然可以使用文本编辑器对其进行编辑。
答案 5 :(得分:0)
我想这就是大多数CMS的管理面板如何允许您直接写入配置文件,但是:
REGISTER_GLOBALS
最好也应该关闭,尽管这比一般情况下与此有关的更多是安全问题。答案 6 :(得分:0)
我个人经验的建议是将最基本的东西保存在配置文件(数据库连接)和数据库表中的其他所有内容中。你应该总是尽量避免在服务器上写东西,除非你真的不得不遇到许可问题,安全问题等等......
当您想要分发这样的脚本时,它变得越来越重要。
其余的,与上面的答案非常相似:
<?php
$config = "<?php\r\n";
$file = "/path/to/config.php";
foreach ( $_POST [ 'config' ] as $config_label => $config_value ):
$config .= "$$config_label = '{$config_value}'\r\n";
endforeach;
file_put_contents($file,$config);
祝你好运。