PHP在Windows IIS上傳的圖片無法訪問的解決方法
PHP在Windows IIS上傳的圖片無法訪問的解決方法
首先登錄到網(wǎng)站后臺進(jìn)行了測試發(fā)現(xiàn)上傳的圖片在確實(shí)瀏覽器打不開且出現(xiàn)了無法訪問的錯(cuò)誤信息:“ 401 - 未 授權(quán): 由于憑據(jù)無效,訪問被拒絕?!?/p>

然后又測試了該服務(wù)器上其他幾個(gè)php項(xiàng)目發(fā)現(xiàn)也出現(xiàn)了一樣的錯(cuò)誤: 圖片上傳成功,但瀏覽器沒有權(quán)限訪問。
因?yàn)闇y試的幾個(gè)php系統(tǒng)是不一樣的,有thinkphp,wordpress,百度ueditor編輯器。
所以這幾個(gè)系統(tǒng)同時(shí)出現(xiàn)問題的概率實(shí)在是太小了,所以基本上排除了程序的bug,且看到上面的錯(cuò)誤就知道文件是存在的只是沒有訪問的權(quán)限,于是登錄到遠(yuǎn)程桌面進(jìn)入服務(wù)器找到上傳的圖片目錄并發(fā)現(xiàn)了測試的圖片,說明圖片是上傳成功的。
既然之前上傳的圖片可以訪問且圖片也上傳成功了,那為什么新上傳的圖片卻不能訪問了呢?
于是查看上傳目錄,目錄的權(quán)限已經(jīng)包含"Everyone",目錄應(yīng)該也沒有問題(之前上傳的圖片都可以訪問)

然后一看測試的圖片屬性傻眼了,原來圖片的屬性中并不包含 "Everyone"項(xiàng)這跟上傳的目錄的權(quán)限不相符啊( 如果在某個(gè)目錄下新建文件,那么新建的文件是繼承該目錄的權(quán)限的 )

看到這我就想不明白了,既然目錄的權(quán)限有 "Everyone"項(xiàng)那么上傳的圖片的權(quán)限也應(yīng)該繼承父類的權(quán)限才對,所以好長時(shí)間也沒有想明白這其中的原因,因此也不知道該如何下手解決,只是在網(wǎng)絡(luò)上漫無目的看有沒有類似的問題,并按照網(wǎng)站的說明進(jìn)行嘗試。
最后在 windows下使用IIS配置的PHP無法上傳文件的解決方法 這篇文章的幫助下成功解決了該問題
問題總結(jié):
在Windows平臺下如果PHP使用的是IIS的話那么php在上傳文件時(shí)是先將文件上傳到一個(gè)臨時(shí)目錄下的
(該配置項(xiàng)可以在php.ini的" upload_tmp_dir "里進(jìn)行配置,由于我們的服務(wù)器并沒有進(jìn)行過配置 ,所以php將使用系統(tǒng)的臨時(shí)目錄"C:\Windows\Temp" )。

然后PHP再將臨時(shí)目錄中上傳的文件再移動(dòng)到你指定的目錄中去,這樣就存在一個(gè)問題,即Temp目錄下默認(rèn)的權(quán)限是沒有相應(yīng)的IIS訪問權(quán)限的(windows默認(rèn)配置),當(dāng)文件上傳到該目錄時(shí)那么上傳的文件默認(rèn)是繼承了Temp目錄的權(quán)限,而PHP再將文件文件移到指定的目錄時(shí),被移動(dòng)的文件并不會繼承移動(dòng)后所在的目錄權(quán)限,從而導(dǎo)致從瀏覽器訪問被移動(dòng)的文件時(shí),因?yàn)樵撐募]有相應(yīng)的權(quán)限(IIS訪問權(quán)限)而無法訪正常問,也就出現(xiàn)了文件上傳成功但瀏覽器訪問時(shí)出現(xiàn) “ 401 - 未授權(quán): 由于憑據(jù)無效,訪問被拒絕。 ”的問題。
Windows默認(rèn)的權(quán)限配置

更改后的權(quán)限配置(必須包含 IUSER和IIS_IUSERS 權(quán)限或 Everyone )

解決辦法:
給php.ini中的upload_tmp_dir項(xiàng)設(shè)置一個(gè)臨時(shí)目錄并做好相應(yīng)的權(quán)限( 推薦方法 )
將"C:\Windows\Temp"目錄添加相應(yīng)的權(quán)限
重要說明:
php.ini 的upload_tmp_dir 目錄權(quán)限必須要包含 IUSER和IIS_IUSERS 權(quán)限
或Everyone
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
- nginx配置訪問圖片路徑以及html靜態(tài)頁面的調(diào)取方法
- php如何控制用戶對圖片的訪問 PHP禁止圖片盜鏈
- SpringMVC上傳圖片與訪問
- Android互聯(lián)網(wǎng)訪問圖片并在客戶端顯示的方法
- 使用AngularJS 應(yīng)用訪問 Android 手機(jī)的圖片庫
- 解決jsp頁面使用網(wǎng)絡(luò)路徑訪問圖片的亂碼問題
- js 利用image對象實(shí)現(xiàn)圖片的預(yù)加載提高訪問速度
- Asp.Net二級域名共享Forms身份驗(yàn)證、下載站/圖片站的授權(quán)訪問控制
- 輕松創(chuàng)建nodejs服務(wù)器(10):處理上傳圖片
- nodejs和php實(shí)現(xiàn)圖片訪問實(shí)時(shí)處理
相關(guān)文章
無法進(jìn)入遠(yuǎn)程桌面遠(yuǎn)程重啟WIN2003服務(wù)器的方法
如何無法進(jìn)入遠(yuǎn)程桌面有什么辦法遠(yuǎn)程重啟WIN2003服務(wù)器?下面有個(gè)不錯(cuò)的方法,大家可以參考下2014-01-01
Almp 安卓系統(tǒng)上搭建本地php服務(wù)器環(huán)境的步驟
在網(wǎng)上找到安卓系統(tǒng)的PHP+MySQL環(huán)境,甚是喜歡,拿來修改、試用了一番。已經(jīng)實(shí)現(xiàn)在安卓手機(jī)上搭建Web服務(wù)端,并且支持WordPress、Discuz、Phpmyadmin的運(yùn)行2013-07-07
在64bit Win2008上運(yùn)行Asp+Access網(wǎng)站的一些設(shè)置
這篇文章主要介紹了在64bit Win2008上運(yùn)行Asp+Access網(wǎng)站的一些設(shè)置,需要的朋友可以參考下2015-01-01
windows服務(wù)器實(shí)現(xiàn)NAT端口映射的項(xiàng)目實(shí)踐
很多時(shí)候由于業(yè)務(wù)需要要開放一些端口,又擔(dān)心遭受到網(wǎng)絡(luò)攻擊,不得不采取一些方式進(jìn)行端口的映射和隱藏,本文主要介紹了windows服務(wù)器實(shí)現(xiàn)NAT端口映射的項(xiàng)目實(shí)踐,感興趣的可以了解一下2023-08-08
Windows server 2012遠(yuǎn)程桌面會話主機(jī)和遠(yuǎn)程桌面授權(quán)
對于windows server2012服務(wù)器一般都是默認(rèn)能夠支持兩用戶遠(yuǎn)程登錄,而通過安裝遠(yuǎn)程桌面服務(wù)里的遠(yuǎn)程桌面會話主機(jī)和遠(yuǎn)程桌面授權(quán),并對其進(jìn)行配置,即可實(shí)現(xiàn)多用戶遠(yuǎn)程登錄2017-04-04
IIS 服務(wù)器備份轉(zhuǎn)移實(shí)現(xiàn)方法
最近上了一個(gè)項(xiàng)目,讓我不管通過任何的方法要把一臺IIS服務(wù)器的所有虛擬主機(jī)全部轉(zhuǎn)移到另外一臺機(jī),其實(shí)很早就因?yàn)镮IS服務(wù)器的問題而傷腦筋,終于在我的努力下通過VBSCRIPT的腳本實(shí)現(xiàn)了這個(gè)目標(biāo),不敢獨(dú)想,和廣大網(wǎng)友共享。2009-03-03
windows使用nginx實(shí)現(xiàn)網(wǎng)站負(fù)載均衡測試實(shí)例
如果你關(guān)注過nginx,必定知道nginx這個(gè)軟件有什么用的,如果你的網(wǎng)站訪問量越來越高,一臺服務(wù)器已經(jīng)沒有辦法承受流量壓力,那就增多幾臺服務(wù)器來做負(fù)載吧。2010-03-03
Winserver2019搭建主輔域名解析服務(wù)器的方法
本文主要介紹了Winserver2019搭建主輔域名解析服務(wù)器的方法,詳細(xì)的介紹了主輔域名服務(wù)器配置及其報(bào)錯(cuò)的解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04

