麻烦老手给个 PHP 写入文件的实例

2018-01-31 19:13:40 +08:00
 lverea
想要实现表单提交内容,写入 config.php 对应位置
2624 次点击
所在节点    PHP
14 条回复
xubeiyan
2018-01-31 21:44:09 +08:00
这样是不安全的,因为 php 文件是可解释执行的,不怕别人插入恶意代码吗?应该使用 php 去读写某个不可执行的文件,或者使用数据库,大概是这样 write_config.php 写入-> config_file ->被 read_config.php 读取
lverea
2018-02-01 01:52:26 +08:00
@xubeiyan 也就是说,config.ini.php 文件不是直接写入文件生成的,都是数据入库后生成的?
to2false
2018-02-01 09:24:08 +08:00
config 一般存储一些不经改动的配置项,如果是动态的存数据库,至于表单提交做好过滤
zarte
2018-02-01 10:09:31 +08:00
file_put_contents(var_export($_POST),'config.php');
xubeiyan
2018-02-01 14:37:31 +08:00
@lverea 你楼下的那位说得对……这种有修改需求的最好是写入数据库……就算你要写入文件,也要用不可以被解释执行的文件来保障安全
lverea
2018-02-02 04:36:10 +08:00
@zarte 大概是这意思,感谢你的回答,相比其他切合实际点。
lverea
2018-02-02 04:38:31 +08:00
首先感谢大家的回答,但这些都有点答非所问的感觉。也许是我的提问不对。我重新换个问法。
lverea
2018-02-02 04:54:49 +08:00
我打算用 php 做一个自己的 blog,blog 的数据链接我已经手动配置到 config.php 文件里了,我想把 blog 名称,描述等几个常量也写在里面,方便调用。现在问题来了,我希望通过网站后台直接修改 blog 名称,而不是每次都 FTP 修改 config 文件。现在大致知道需要用到的 php 函数,但问题是没有一个实际的例子可学习,所以到此发问。结果回答的都是专家级的解答也是醉了。愿意花时间帮解答的,愿意支付酬金,可直接加我 QQ81525260
lslqtz
2018-02-02 10:16:45 +08:00
以上并不是专家级的回答,而是基本的安全常识。。。。
lverea
2018-02-02 19:56:59 +08:00
@lslqtz 对啊都是些基本常识,却说的好像多牛逼似的。总之都是些口水话,没有任何意义。
lverea
2018-02-02 19:57:45 +08:00
越是谦虚越是跟你显摆
vishun
2018-02-10 10:26:17 +08:00
博客名称,描述这种可以修改的配置,放到数据库里就是了,没必要修改配置文件。
abusizhishen
2018-02-11 13:26:53 +08:00
为什么不存到数据库里呢?
phpok
2018-02-13 10:50:43 +08:00
代码如下:
$dbconfig = array();
$dbconfig['host'] = $_POST['host'];
$dbconfig['port'] = $_POST['port'];
$dbconfig['user'] = $_POST['user'];
$dbconfig['pass'] = $_POST['pass'];
$dbconfig['data'] = $_POST['data'];
$dbconfig['prefix'] = $_POST['prefix'];
$content = file_get_contents('config.php');
$content = preg_replace('/host\s*=.*/i','host = "'.$dbconfig['host'].'"',$content);
$content = preg_replace('/port\s*=.*/i','port = "'.$dbconfig['port'].'"',$content);
$content = preg_replace('/user\s*=.*/i','user = "'.$dbconfig['user'].'"',$content);
$content = preg_replace('/pass\s*=.*/i','pass = "'.$dbconfig['pass'].'"',$content);
$content = preg_replace('/data\s*=.*/i','data = "'.$dbconfig['data'].'"',$content);
$content = preg_replace('/prefix\s*=.*/i','prefix = "'.$dbconfig['prefix'].'"',$content);
file_put_contents('config.php',$content);

特别说明下,上面代码没有任何过滤,也就是很容易出现安全问题。
建议您可以对 $_POST 进行安全封装下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/427528

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX