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

Sho*_*291 8 php codeigniter file

我的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!";
}
Run Code Online (Sandbox Code Playgroud)

这是该文件在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');
Run Code Online (Sandbox Code Playgroud)

以上文件路径都没有工作......它可能是别的吗?

仅供参考:FCPATH ='W:\ wamp\www\zeus \',它由CI的前端控制器定义,以返回该文件的路径.

更新:我尝试只使用本机PHP版本,它说文件或目录不存在.也许我正在使用错误的道路.它应该是什么?

qui*_*tin 6

答案很简单,要传递一个无效的模式以来,在市委W¯¯,对fopen.它应该是小写的w.所以正在发生的fopen是返回false,然后你将它传递给fwrite而不是资源,导致它返回false.

只是改变

$open = fopen($file, 'W');
Run Code Online (Sandbox Code Playgroud)

$open = fopen($file, 'w');
Run Code Online (Sandbox Code Playgroud)

你也可以测试一下结果 fopen

if(!$open)
    echo 'Could not open file';
Run Code Online (Sandbox Code Playgroud)

您也可以尝试,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!";
}
Run Code Online (Sandbox Code Playgroud)