为什么在服务器上php里执行file_put_contents创建文件返回是false呢,文件目录已经设置为777的权限了,不解(Tencent)
想用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
<?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文件
執行結果如下:
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
總結
以上是生活随笔為你收集整理的为什么在服务器上php里执行file_put_contents创建文件返回是false呢,文件目录已经设置为777的权限了,不解(Tencent)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6张信用卡欠款10000到47000不等
- 下一篇: 美国0封伊朗已经6天了,伊石油出口真归零