PHP在Windows IIS上傳的圖片無法訪問的解決方案_win伺服器

來源:互聯網
上載者:User

PHP在Windows IIS上傳的圖片無法訪問的解決方案

首先登入到網站後台進行了測試發現上傳的圖片在確實瀏覽器打不開且出現了無法訪問的錯誤資訊:“ 401 - 未 授權: 由於憑據無效,訪問被拒絕。”

然後又測試了該伺服器上其他幾個php項目發現也出現了一樣的錯誤: 圖片上傳成功,但瀏覽器沒有許可權訪問。
因為測試的幾個php系統是不一樣的,有thinkphp,wordpress,百度ueditor編輯器。
所以這幾個系統同時出現問題的機率實在是太小了,所以基本上排除了程式的bug,且看到上面的錯誤就知道檔案是存在的只是沒有訪問的許可權,於是登入到遠端桌面進入伺服器找到上傳的圖片目錄並發現了測試的圖片,說明圖片是上傳成功的。
既然之前上傳的圖片可以訪問且圖片也上傳成功了,那為什麼新上傳的圖片卻不能訪問了呢?
於是查看上傳目錄,目錄的許可權已經包含"Everyone",目錄應該也沒有問題(之前上傳的圖片都可以訪問)

然後一看測試的圖片屬性傻眼了,原來圖片的屬性中並不包含 "Everyone"項這跟上傳的目錄的許可權不相符啊( 如果在某個目錄下建立檔案,那麼建立的檔案是繼承該目錄的許可權的 )

看到這我就想不明白了,既然目錄的許可權有 "Everyone"項那麼上傳的圖片的許可權也應該繼承父類的許可權才對,所以好長時間也沒有想明白這其中的原因,因此也不知道該如何下手解決,只是在網路上漫無目的看有沒有類似的問題,並按照網站的說明進行嘗試。

最後在 windows下使用IIS配置的PHP無法上傳檔案的解決方案 這篇文章的協助下成功解決了該問題


問題總結:
在Windows平台下如果PHP使用的是IIS的話那麼php在上傳檔案時是先將檔案上傳到一個臨時目錄下的
(該配置項可以在php.ini的" upload_tmp_dir "裡進行配置,由於我們的伺服器並沒有進行過配置 ,所以php將使用系統的臨時目錄"C:\Windows\Temp" )。

然後PHP再將臨時目錄中上傳的檔案再移動到你指定的目錄中去,這樣就存在一個問題,即Temp目錄下預設的許可權是沒有相應的IIS存取權限的(windows預設配置),當檔案上傳到該目錄時那麼上傳的檔案預設是繼承了Temp目錄的許可權,而PHP再將檔案檔案移到指定的目錄時,被移動的檔案並不會繼承移動後所在的目錄許可權,從而導致從瀏覽器訪問被移動的檔案時,因為該檔案沒有相應的許可權(IIS存取權限)而無法訪正常問,也就出現了檔案上傳成功但瀏覽器訪問時出現 “ 401 - 未授權: 由於憑據無效,訪問被拒絕。 ”的問題。

Windows預設的許可權配置

更改後的許可權配置(必須包含 IUSER和IIS_IUSERS 許可權或 Everyone )

解決辦法:
給php.ini中的upload_tmp_dir項設定一個臨時目錄並做好相應的許可權( 推薦方法 )
將"C:\Windows\Temp"目錄添加相應的許可權
重要說明:
php.ini 的upload_tmp_dir 目錄許可權必須要包含 IUSER和IIS_IUSERS 許可權
或Everyone

以上就是本文的全部內容,希望對大家的學習有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.