file_put_contents写入失败

$info=file_get_contents(APP_PATH . 'extra' . DS . 'Config.php'); //路径没错,能正常读取
   $data = input('post.');
   if (isset($data['AllBuckets'])){
       $data['Buckets'] = implode(',',$data['AllBuckets']);
       unset($data['AllBuckets']);
   }
   if ($data['cloud'] == 0){
       $data['verification'] = 0;
   }
   foreach($data as $k=>$v){
       //正则替换
        $info = preg_replace("#\'{$k}\'\=\>\'.*?\'\,#","'{$k}'=>'{$v}',",$info);
   }
   var_dump(file_put_contents(APP_PATH . 'extra' . DS . 'Config.php',$info));

返回了init(1421),但却没有写入成功
服务器环境CENTOS 7.3
APACHE2.4
PHP7.1.7

目前已查:
/tmp目录为777
网站目录拥有者和apache运行用户一致
网站目录权限为755(尝试改为777无效)

求解是哪里错了?本地windows正常

阅读 13.8k
5 个回答

很有可能就是你的路径错了。但是又返回了写入的字节数,说明是写入了文件,但是因为你的路径错了,写入的是另外一个文件,而不是你期待的文件。file_put_content()执行时如果发现路径中的文件不存在会尝试新建一个文件的。因此建议你把你的路径打印出来看一下是否是你期待的路径。

输出文件名及内容,用 is_writeable测试下。我猜你看错路径了。

看下文件地址是否存在,看下文件是否拥有写的权限

返回的写入的字节数,说明写入成功了,检查下正则替换有没有操作成功

正则替换原型
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

这样调用试下,看下替换成功的次数
$count = 0;
$info = preg_replace("#\'{$k}\'\=\>\'.*?\'\,#","'{$k}'=>'{$v}',",$info,-1,$count);
echo $count;

这有点。。。
都返回写入字节数了,直接将中间的逻辑去掉来测试啊:

$info='123'

看能写入成功吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题