我的CI应用程序中有一个自定义配置文件。在我的Web应用程序的管理面板中,我想有一个表单,我可以用它来更改自定义文件的配置数组的值。我现在的问题是write_file函数总是返回false,我不知道为什么。我很确定我正在正确编写函数中的路径,并且config目录不是只读的(这是wamp,所以是windows)。该文件肯定存在。我做错了什么?
这是application / controllers / config / assets.php
$file = FCPATH . 'application\config\assets_fe.php';
if(is_writable($file)) {
$open = fopen($file, 'W');
if(!fwrite($open, $frontend)){
echo "Could not write file!";
} else {
echo "File written!";
}
} else {
echo "File not writable!";
}
这是该文件在Windows资源管理器中的位置的屏幕截图。
我在write_file函数中尝试了以下文件路径:
write_file(FCPATH.'application/config/assets_fe.php', $frontend, 'W');
write_file('application/config/assets_fe.php', $frontend, 'W');
write_file('./application/config/assets_fe.php', $frontend, 'W');
以上文件路径都没有工作......可能是其他的吗?
仅供参考:FCPATH ='W:\ wamp \ www \ zeus \',它由CI的前端控制器定义,以返回该文件的路径。
更新:我尝试仅使用本机PHP版本,并且说文件或目录不存在。也许我正在使用错误的道路。它应该是什么?
答案 0 :(得分:6)
答案很简单,您将无效模式( W )传递给fopen
。它应该是小写的 w 。所以发生了什么fopen
正在返回false
,然后您将其传递给fwrite
而不是资源,导致它返回false
。
只需更改
$open = fopen($file, 'W');
到
$open = fopen($file, 'w');
您也可以测试fopen
if(!$open)
echo 'Could not open file';
您也可以尝试file_put_contents
,因为您没有对文件句柄执行任何其他操作。
$file = FCPATH.'application\config\assets_fe.php';
if(is_writable($file)){
if(!file_put_contents($file, $frontend)) {
echo "Could not write file!";
} else {
echo "File written!";
}
} else {
echo "File not writable!";
}
答案 1 :(得分:0)
您必须使用set_item写入配置文件。
$this->config->set_item('item_name', 'item_value');
对于数组:
$this->config->set_item('ftp_frontend', array(...));
它位于config。
答案 2 :(得分:0)
我认为你不需要在config.php文件中写。您可以使用CI配置类覆盖配置文件的值,而不是在config.php
文件中写入,如下所示
单项
$this->config->set_item('item_name', 'item_value');
对于数组项
$this->config->set_item('item_array', array(...));