thinkphp5的mkdir() Permission denied問題


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

你如果不僅僅寫代碼,還得部署到線上,那么這個tp5的這個錯誤,你有很大概率會遇見它。

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

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

所以解決mkdir() premission denied 的問題最直接的方式,把runtime權限放開,讓所有用戶都可以創建它。

chmod -R 777 runtime

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

如果你對文件的安全要求比較苛刻,那么以上的答案並不能令你滿意,簡單,高效的方法背后一般需要犧牲一些安全因素為代價。

但以下提供的方法或許是一個不錯的選擇。

更改runtime目錄的所有者,也就是runtime這個目錄權限只針對所有者開放。

以我的項目為例,服務器是nginx,nginx中設置的訪問用戶為www用戶,那么我只需要把runtime目錄有root用戶改為www用戶就能解決此問題。

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呢,那你現在應該知道怎么改了吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM