thinkphp5的mkdir() Permission denied問題

最近一直在用tp5寫項目,在此遇到的問題也比較多。今天來談談「mkdir() Permission denied」錯誤。javascript

你若是不單單寫代碼,還得部署到線上,那麼這個tp5的這個錯誤,你有很大機率會碰見它。java

由於這跟文件的權限有關係,特別是自動生成的文件或者目錄類的權限,linux服務器出於安全因素對於用戶的權限有着嚴格的控制。linux

對於tp框架而言,自動生成的文件或者目錄應該是runtime目錄,因此在線部署代碼的時候,開放此類目錄的權限。nginx

因此解決mkdir() premission denied 的問題最直接的方式,把runtime權限放開,讓全部用戶均可以建立它。web

chmod -R 777 runtime

在liunx中進入項目目錄執行以上命令,就能解決這個問題,簡單,高效。apache

若是你對文件的安全要求比較苛刻,那麼以上的答案並不能令你滿意,簡單,高效的方法背後通常須要犧牲一些安全因素爲代價。安全

但如下提供的方法或許是一個不錯的選擇。服務器

更改runtime目錄的全部者,也就是runtime這個目錄權限只針對全部者開放。框架

以個人項目爲例,服務器是nginx,nginx中設置的訪問用戶爲www用戶,那麼我只須要把runtime目錄有root用戶改成www用戶就能解決此問題。spa

ps aux|grep nginx //查看當前的nginx進程,可以找到nginx用戶是哪一個(多是www,user或者其餘的) chown -R www runtime //chown -R <nginx 用戶> runtime,改變runtime全部者爲nginx用戶

ok,進入項目目錄去執行上面的命令吧,是否有效一試便知。

上面的方法的解釋是由於對於web的每個請求都是由服務器(nginx,apache等)代勞的,真正操做這些項目文件或目錄的是這些服務器用戶,好比nginx中的www用戶,apache中的apache用戶。因此指定文件或者目錄的全部者就是這個問題的關鍵,至於第一個方法設置最高權限爲什麼也能夠呢,這個就至關於任何用戶都能訪問這個runtime目錄,固然也包括www或者apache用戶。退一步,上面的第二個方法是以nginx爲例,若是你的服務器是apache呢,那你如今應該知道怎麼改了吧。

相關文章
相關標籤/搜索