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

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

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

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

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

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

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

