日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

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

發(fā)布時間:2023/12/15 综合教程 38 生活家
生活随笔 收集整理的這篇文章主要介紹了 为什么在服务器上php里执行file_put_contents创建文件返回是false呢,文件目录已经设置为777的权限了,不解(Tencent) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

想用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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。