前言:docker中做日志服務(wù),因為鏡像會隨build消失阳柔,日志如果在項目里焰枢,也會消失,臨時解決方法舌剂,把日志寫在項目外的根目錄下的logs文件夾中济锄,掛載出來,結(jié)果死活寫不進霍转。
以下是網(wǎng)上搜的19個關(guān)鍵字荐绝,解決辦法隨著搜索的邏輯一點點出來的
- php 無法寫入非項目目錄下的文件
- php 寫項目外的目錄
- php怎么訪問本地根目錄外的文件
- php讀取站外目錄
- php 如何訪問網(wǎng)站根目錄以外的文件
- php可以訪問/tmp
- php 日志文件寫入項目外
- php訪問項目外文件
- php 寫入項目外的文件夾
- php 項目外文件夾的權(quán)限
- linux下 php訪問項目外文件夾
- nginx open_basedir不生效
- php設(shè)置open_basedir,重啟服務(wù)后不生效
- lnmp中遇到open_basedir配置無效問題
- “message”: “opendir(): open_basedir restriction in effect. File
- File(/) is not within the allowed pat
- LNMP下防跨站避消、跨目錄安全設(shè)置
- php 如何進行環(huán)境隔離
- laravel日志寫到項目外
從不報錯到報錯
有的時候低滩,不報錯才是最難的,首先岩喷,文件寫不進恕沫,肯定有異常,異常不顯示均驶,肯定是關(guān)閉了報錯信息昏兆。
ini_set('error_reporting',E_ALL);ini_set('display_errors',1);
先把報錯打印出來。
從nginx權(quán)限開始
接受參數(shù)的第一步是nginx提供服務(wù)的80端口妇穴,是否是nginx用戶所在用戶組沒有權(quán)限呢爬虱?查看nginx.conf,發(fā)現(xiàn)一切正常腾它,查看fastcgi.conf,最底部有PHP的配置跑筝,fastcgi_param PHP_ADMIN_VALUE "open_basedir=/logsa/";。前面加個#號注釋掉瞒滴,繼續(xù)曲梗。
文件夾是否有寫權(quán)限
chmod 777 /logs,這個權(quán)限安排的明明白白。
php.ini配置(解決方法)
[PATH=/home/www/shop] open_basedir=/home/www/shop/:/tmp/:/logs/
兩種任選一種妓忍,上面是絕對路徑虏两,下面是host映射
[HOST=test.cn] open_basedir=/home/www/shop/:/tmp/:/logs/
重啟后解決。
難點在2個世剖,1是很久不開debug了定罢,2是我用的環(huán)境是docker,給排查增加了一層難度旁瘫。剛開始還以為是掛載的問題呢祖凫。其實docker就是一個獨立的系統(tǒng)琼蚯,路徑就是/home/root之類的。windows下的C:\D:\在docker里寫入惠况,肯定是not found遭庶。
后續(xù)
查看PHP手冊,發(fā)現(xiàn)這兩種配置是在PHP5.3中新增的稠屠,叫做配置段列表峦睡。可以為自己指定的域名或者路徑配置獨特的PHP.ini配置权埠。
比如a.com可以設(shè)置display_error=off和上面的全局配置不沖突并且在此域名下優(yōu)先級更高赐俗。
這僅在CGI/FASTCGI模式下生效,并且可以在nginx的fastcgi_params里設(shè)置弊知。
PS,這也讓我找到了不生效的問題所在阻逮,在nginx.conf里,我的server使用fastcgi_params來配置了open_basedir秩彤。
所以優(yōu)先級為php.ini<nginx.conf<fastcgi.conf<[PATH]or[HOST]