为什么我试图写的文件"不存在"?

时间:2014-12-15 04:32:05

标签: php file codeigniter

我的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资源管理器中的位置的屏幕截图。 config folder

我在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版本,并且说文件或目录不存在。也许我正在使用错误的道路。它应该是什么?

3 个答案:

答案 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(...));