为什么在服务器上php里执行file_put_contents创建文件返回是false呢,文件目录已经设置为777的权限了,不解(Tencent)
想用file_get_contents讀取網(wǎng)絡(luò)上的圖片文件并由file_put_contesnts寫入到服務(wù)器本地,file_get_contesnts執(zhí)行沒問題,可以讀取信息,然后將讀出的數(shù)據(jù)$data執(zhí)行:
var_dump(file_put_contents($local_file_position, $data));在測試中會顯示var_dump出的信息,但最后file_put_contents返回是false,不知道為什么,在網(wǎng)上搜說是aparche沒有寫權(quán)限,是這樣的嗎?如果是,如何設(shè)置呢?
環(huán)境:CentOS 6.5 + MySQL5.5.35 + tomcat7.0.47
回復(fù)討論(解決方案)
補(bǔ)充一下,要寫入的文件所在路徑的權(quán)限已經(jīng)設(shè)置為777
用的是絕對路徑還是相對路徑?
絕對路徑和相對路徑是一樣的
先確認(rèn)file_get_contents()獲取的數(shù)據(jù)是否存在,數(shù)據(jù)類型是否合法。
這個已經(jīng)確認(rèn)數(shù)據(jù)是存在的,數(shù)據(jù)就是字符串,即使我用fopen 和fwrite也是存在問題。
估計(jì)是權(quán)限不夠
echo substr(sprintf('%o', fileperms('你的目錄')), -4); //看看是什么結(jié)果
絕對路徑和相對路徑是一樣的
要求能寫入的話 文件所在的目錄也是需要有寫的權(quán)限的
比如 /home/centos/123.txt
目錄home、centos也都是需要寫的權(quán)限的不只是單單123.txt需要寫權(quán)限
估計(jì)是權(quán)限不夠
echo substr(sprintf('%o', fileperms('你的目錄')), -4); //看看是什么結(jié)果
返回0755
估計(jì)是權(quán)限不夠
echo substr(sprintf('%o', fileperms('你的目錄')), -4); //看看是什么結(jié)果
我修改成了777,執(zhí)行返回:
0777
file_put_contents 失敗時會有明確的錯誤信息輸出
請貼出
php文件t.php放在目錄(絕對路徑)/usr/local/www/wxtest
<?php header("Content-type: text/html; charset=utf-8");
$fp=fopen('txt/test.txt', 'wb');
if($fp) fwrite($fp, "TESTSETST");
else echo "fail to create file.
";
fclose($fp);
?>
在windows瀏覽器地址直接輸入該php文件
執(zhí)行結(jié)果如下:
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 目錄中
請檢查目錄存在且可寫
目錄的權(quán)限已經(jīng)設(shè)置成了777權(quán)限。
并且防止上級目錄權(quán)限不足,我把/usr/local/www/wxtest/txt所有目錄都設(shè)置成了755,都包含寫權(quán)限,還是不行。
1. 755權(quán)限指的是 rwxr-xr-x, 同組和其他用戶是沒有寫權(quán)限的。 777才是全部用戶擁有所有權(quán)限。
2. 建議使用絕對路徑,寫文件前在腳本內(nèi)判斷路徑是否存在,不存在則先創(chuàng)建路徑(目錄)再寫文件,這個是血淋淋的教訓(xùn)。
1. 755權(quán)限指的是 rwxr-xr-x, 同組和其他用戶是沒有寫權(quán)限的。 777才是全部用戶擁有所有權(quán)限。
2. 建議使用絕對路徑,寫文件前在腳本內(nèi)判斷路徑是否存在,不存在則先創(chuàng)建路徑(目錄)再寫文件,這個是血淋淋的教訓(xùn)。
權(quán)限修改為 777 也不行啊。路徑肯定是存在的。
把/usr/local/www/wxtest/txt設(shè)成777
把/usr/local/www/wxtest/txt設(shè)成777
把/usr/local/www/wxtest/txt設(shè)成777
已經(jīng)設(shè)置成了777
是不是apache里面還有需要設(shè)置的,或是系統(tǒng)里面那個地方還需要設(shè)置?
確定是對組外用戶的權(quán)限是777?
確定是對組外用戶的權(quán)限是777?
組外用戶不就是other組嗎?你指的是什么?
呵呵,解決了,結(jié)貼,謝謝各位的幫忙!
呵呵,解決了,結(jié)貼,謝謝各位的幫忙!
怎么解決的 可否分享下
呵呵,解決了,結(jié)貼,謝謝各位的幫忙!
怎么解決的 可否分享下
默認(rèn)下selinux是開啟的
查看SELinux狀態(tài):
1、/usr/sbin/sestatus -v ##如果SELinux status參數(shù)為enabled即為開啟狀態(tài)
SELinux status: enabled
2、getenforce ##也可以用這個命令檢查
關(guān)閉SELinux:
1、臨時關(guān)閉(不用重啟機(jī)器):
setenforce 0 ##設(shè)置SELinux 成為permissive模式
##setenforce 1 設(shè)置SELinux 成為enforcing模式
2、修改配置文件需要重啟機(jī)器:
修改/etc/selinux/config 文件
將SELINUX=enforcing改為SELINUX=disabled
重啟機(jī)器即可
另外,如果以上還是不能解決的話要設(shè)置一下目錄的權(quán)限策略
chcon -R -t httpd_sys_content_t /home/html
總結(jié)
以上是生活随笔為你收集整理的为什么在服务器上php里执行file_put_contents创建文件返回是false呢,文件目录已经设置为777的权限了,不解(Tencent)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6张信用卡欠款10000到47000不等
- 下一篇: vender是什么意思?常见的编程语言中