登录  /  注册

为什么在服务器上php里执行file_put_contents创建文件返回是false呢,文件目录已经设置为777的权限了,不解

php中文网
发布: 2016-06-23 14:01:04
原创
3654人浏览过

想用file_get_contents读取网络上的图片文件并由file_put_contesnts写入到服务器本地,file_get_contesnts执行没问题,可以读取信息,然后将读出的数据$data执行:
var_dump(file_put_contents($local_file_position, $data));在测试中会显示var_dump出的信息,但最后file_put_contents返回是false,不知道为什么,在网上搜说是aparche没有写权限,是这样的吗?如果是,如何设置呢?

环境:CentOS 6.5 + MySQL5.5.35 + tomcat7.0.47


回复讨论(解决方案)

补充一下,要写入的文件所在路径的权限已经设置为777

用的是绝对路径还是相对路径?

绝对路径和相对路径是一样的

先确认file_get_contents()获取的数据是否存在,数据类型是否合法。

这个已经确认数据是存在的,数据就是字符串,即使我用fopen 和fwrite也是存在问题。

估计是权限不够
echo substr(sprintf('%o', fileperms('你的目录')), -4); //看看是什么结果

绝对路径和相对路径是一样的
要求能写入的话 文件所在的目录也是需要有写的权限的
比如 /home/centos/123.txt
目录home、centos也都是需要写的权限的不只是单单123.txt需要写权限

估计是权限不够
echo substr(sprintf('%o', fileperms('你的目录')), -4); //看看是什么结果

返回0755

估计是权限不够
echo substr(sprintf('%o', fileperms('你的目录')), -4); //看看是什么结果

我修改成了777,执行返回:

0777

file_put_contents 失败时会有明确的错误信息输出
请贴出

php文件t.php放在目录(绝对路径)/usr/local/www/wxtest
$fp=fopen('txt/test.txt', 'wb');
if($fp) fwrite($fp, "TESTSETST");
else echo "fail to create file. 
";
fclose($fp);
?>

在windows浏览器地址直接输入该php文件
执行结果如下:
Warning: fopen(txt/test.txt): failed to open stream: Permission denied in /usr/local/www/wxtest/t.php on line 87 fail to create file. 
Warning: fclose() expects parameter 1 to be resource, boolean given in /usr/local/www/wxtest/t.php on line 90 

提示很清楚了,
Permission denied 
拒绝访问

你是要把文件写到 /usr/local/www/wxtest/txt 目录中
请检查目录存在且可写

目录的权限已经设置成了777权限。
并且防止上级目录权限不足,我把/usr/local/www/wxtest/txt所有目录都设置成了755,都包含写权限,还是不行。

1. 755权限指的是 rwxr-xr-x, 同组和其他用户是没有写权限的。 777才是全部用户拥有所有权限。

2. 建议使用绝对路径,写文件前在脚本内判断路径是否存在,不存在则先创建路径(目录)再写文件,这个是血淋淋的教训。

1. 755权限指的是 rwxr-xr-x, 同组和其他用户是没有写权限的。 777才是全部用户拥有所有权限。

2. 建议使用绝对路径,写文件前在脚本内判断路径是否存在,不存在则先创建路径(目录)再写文件,这个是血淋淋的教训。

权限修改为 777  也不行啊。路径肯定是存在的。

把/usr/local/www/wxtest/txt设成777

把/usr/local/www/wxtest/txt设成777

把/usr/local/www/wxtest/txt设成777

已经设置成了777

是不是apache里面还有需要设置的,或是系统里面那个地方还需要设置?

确定是对组外用户的权限是777?

确定是对组外用户的权限是777?

组外用户不就是other组吗?你指的是什么?

呵呵,解决了,结贴,谢谢各位的帮忙!

呵呵,解决了,结贴,谢谢各位的帮忙!
怎么解决的 可否分享下


呵呵,解决了,结贴,谢谢各位的帮忙!
怎么解决的 可否分享下

默认下selinux是开启的
查看SELinux状态:
1、/usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态
SELinux status:                 enabled
2、getenforce                 ##也可以用这个命令检查
关闭SELinux:
1、临时关闭(不用重启机器):
setenforce 0                  ##设置SELinux 成为permissive模式
                              ##setenforce 1 设置SELinux 成为enforcing模式
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可

另外,如果以上还是不能解决的话要设置一下目录的权限策略
chcon -R -t httpd_sys_content_t /home/html

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号