首先登錄到網(wǎng)站后臺進(jìn)行了測試發(fā)現上傳的圖片在確實(shí)瀏覽器打不開(kāi)且出現了無(wú)法訪(fǎng)問(wèn)的錯誤信息:“401 -?未授權: 由于憑據無(wú)效,訪(fǎng)問(wèn)被拒絕。”
?

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

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

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

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

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

?
解決辦法:
-
給php.ini中的upload_tmp_dir項設置一個(gè)臨時(shí)目錄并做好相應的權限(推薦方法)
- 將"C:\Windows\Temp"目錄添加相應的權限
重要說(shuō)明:
php.ini 的upload_tmp_dir 目錄權限必須要包含IUSER和IIS_IUSERS權限或Everyone
來(lái)源http://www.cnblogs.com/huangtailang/p/4608175.html