php-fpm进程管理方式以及子进程数量配置原则详解
php-fpm的进程管理方式pm是一个重要的参数,主要来控制子进程的数量。
pm进程管理方式有三种:
static:
表示在php-fpm运行时直接fork出 pm.max_chindren个子进程
dynamic:
表示,运行时fork出pm.start_servers个进程,随着负载的情况,动态的调整,最多不超过pm.max_children个进程。同时,保证闲置进程数不少于pm.min_spare_servers数量,否则新的进程会被创建,当然也不是无限制的创建,最多闲置进程不超过pm.max_spare_servers数量,超过则一些闲置进程被清理。
ondemand:
当有请求时,创建进程,启动不创建,最多不超过pm.max_chindren进程数,当进程闲置会在pm.process_idle_timeout秒后被及时释放。
如果选择配置pm参数?
dynamic适合小内存机器,灵活分配进程,省内存。static适用于大内存机器,动态创建回收进程对服务器资源也是一种消耗。一般大访问量应用不会选择ondemand,因为fork一次性大量进程开销很大。
PHP-FPM子进程数量应该如何设置?
一般生产环境会选择static方式
关于max_children, [能利用内存数/(单个进程内存数 * 1.2)];另外一种方式,可将其设置较大[能利用内存数/单个进程内存数],然后观察(PHP-FPM的运行状态),通过max active processes参数来合理配置。
关于start_servers、min_spare_servers、max_spare_servers官方有个建议公式:
start_servers = min_spare_servers + (max_spare_servers - min_spare_servers) / 2
昨天,服务器的DNS突然不能使用,导致相关子站一直崩溃,日志中看到大量类似错误:
file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known...
file_get_contents('http://www.111cn.net'): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known...
很明显是DNS无法解析域名,只得更换:
#打开linux网络配置文件 vi resolv.conf #注释老的namesever ,添加如下新的nameserver nameserver 202.106.0.20 search localdomain #保存内容重启网络服务 service network restart
为此,收集了常用的DNS服务器地址:
#114 DNS
114.114.114.114
114.114.115.115
#阿里 AliDNS
223.5.5.5
223.6.6.6
#oneDNS
112.124.47.27
114.215.126.16
#Google DNS
8.8.8.8
8.8.4.4
#OpenDNS
208.67.222.222
208.67.220.220
国内省市DNS服务器地址:
北京:
202.96.199.133
202.96.0.133
202.106.0.20
202.106.148.1
202.97.16.195
202.138.96.2
深圳:
202.96.134.133
202.96.154.15
广州:
61.144.56.100
61.144.56.101
广东:
202.96.128.86
202.96.128.143
上海:
202.96.199.132
202.96.199.133
202.96.209.5
202.96.209.133
天津:
202.99.96.68
202.99.104.68
广西:
202.96.128.68
202.103.224.68
202.103.225.68
河南:
202.102.227.68
202.102.245.12
202.102.224.68
河北:
202.99.160.68
福建:
202.101.98.54
202.101.98.55
厦门:
202.101.103.55
202.101.103.54
湖南:
202.103.0.68
202.103.96.68
202.103.96.112
湖北:
202.103.0.68
202.103.0.117
202.103.24.68
江苏:
202.102.15.162
202.102.29.3
202.102.13.141
202.102.24.35
浙江:
202.96.102.3
202.96.96.68
202.96.104.18
陕西:
202.100.13.11
202.100.4.16
202.100.4.15
202.100.0.68
山东:
202.102.154.3
202.102.152.3
202.102.128.68
202.102.134.68
山西:
202.99.192.68
202.99.198.6
四川:
202.98.96.68
61.139.2.69
重庆:
61.128.128.68
成都:
202.98.96.68
202.98.96.69
辽宁:
202.98.0.68
202.96.75.68
202.96.75.64
202.96.69.38
202.96.86.18
202.96.86.24
安徽:
202.102.192.68
202.102.199.68
10.89.64.5
吉林:
202.98.5.68
202.98.14.18
202.98.14.19
江西:
202.101.224.68
202.109.129.2
202.101.240.36
新疆:
61.128.97.74
61.128.97.73
贵州:
202.98.192.68
10.157.2.15
云南:
202.98.96.68
202.98.160.68
黑龙江:
202.97.229.133
202.97.224.68
219.150.32.132
海南:
202.100.192.68
202.100.199.8
宁夏:
202.100.0.68
202.100.96.68
甘肃:
202.100.72.13
内蒙古:
202.99.224.68
青海:
202.100.128.68
约定几个目录
/usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini
一,php-fpm的启动参数
#测试php-fpm配置 /usr/local/php/sbin/php-fpm -t /usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t #启动php-fpm /usr/local/php/sbin/php-fpm /usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf #关闭php-fpm kill -INT `cat /usr/local/php/var/run/php-fpm.pid` #重启php-fpm kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
二,php-fpm.conf重要参数详解
pid = run/php-fpm.pid #pid设置,默认在安装目录中的var/run/php-fpm.pid,建议开启 error_log = log/php-fpm.log #错误日志,默认在安装目录中的var/log/php-fpm.log log_level = notice #错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice. emergency_restart_threshold = 60 emergency_restart_interval = 60s #表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。 process_control_timeout = 0 #设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0. daemonize = yes #后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。 listen = 127.0.0.1:9000 #fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置. listen.backlog = -1 #backlog数,-1表示无限制,由操作系统决定,此行注释掉就行。backlog含义参考: http://www.3gyou.cc/?p=41 listen.allowed_clients = 127.0.0.1 #允许访问FastCGI进程的IP,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接 listen.owner = www listen.group = www listen.mode = 0666 #unix socket设置选项,如果使用tcp方式访问,这里注释即可。 user = www group = www #启动进程的帐户和组 pm = dynamic #对于专用服务器,pm可以设置为static。 #如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定: pm.max_children #,子进程最大数 pm.start_servers #,启动时的进程数 pm.min_spare_servers #,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程 pm.max_spare_servers #,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理 pm.max_requests = 1000 #设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0. pm.status_path = /status #FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到 ping.path = /ping #FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/)。 ping.response = pong #用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong. request_terminate_timeout = 0 #设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。 request_slowlog_timeout = 10s #当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中. 设置为 '0' 表示 'Off' slowlog = log/$pool.log.slow #慢请求的记录日志,配合request_slowlog_timeout使用 rlimit_files = 1024 #设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。 rlimit_core = 0 #设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值. chroot = #启动时的Chroot目录. 所定义的目录需要是绝对路径. 如果没有设置, 则chroot不被使用. chdir = #设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径. 默认值: 当前目录,或者/目录(chroot时) catch_workers_output = yes #重定向运行过程中的stdout和stderr到主要的错误日志文件中. 如果没有设置, stdout 和 stderr 将会根据FastCGI的规则被重定向到 /dev/null . 默认值: 空.
三,常见错误及解决办法整理
1,request_terminate_timeout引起的资源问题
request_terminate_timeout的值如果设置为0或者过长的时间,可能会引起file_get_contents的资源问题。
如果file_get_contents请求的远程资源如果反应过慢,file_get_contents就会一直卡在那里不会超时。我们知道php.ini 里面max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。真正能够控制 PHP 脚本最大执行时间的是 php-fpm.conf 配置文件中的request_terminate_timeout参数。
request_terminate_timeout默认值为 0 秒,也就是说,PHP 脚本会一直执行下去。这样,当所有的 php-cgi 进程都卡在 file_get_contents() 函数时,这台 Nginx+PHP 的 WebServer 已经无法再处理新的 PHP 请求了,Nginx 将给用户返回“502 Bad Gateway”。修改该参数,设置一个 PHP 脚本最大执行时间是必要的,但是,治标不治本。例如改成 30s,如果发生 file_get_contents() 获取网页内容较慢的情况,这就意味着 150 个 php-cgi 进程,每秒钟只能处理 5 个请求,WebServer 同样很难避免”502 Bad Gateway”。解决办法是request_terminate_timeout设置为10s或者一个合理的值,或者给file_get_contents加一个超时参数。
$ctx = stream_context_create(array( 'http' => array( 'timeout' => 10 //设置一个超时时间,单位为秒 ) )); file_get_contents($str, 0, $ctx);
2,max_requests参数配置不当,可能会引起间歇性502错误:
pm.max_requests = 1000
设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 ’0′ 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
这段配置的意思是,当一个 PHP-CGI 进程处理的请求数累积到 500 个后,自动重启该进程。
但是为什么要重启进程呢?
一般在项目中,我们多多少少都会用到一些 PHP 的第三方库,这些第三方库经常存在内存泄漏问题,如果不定期重启 PHP-CGI 进程,势必造成内存使用量不断增长。因此 PHP-FPM 作为 PHP-CGI 的管理器,提供了这么一项监控功能,对请求达到指定次数的 PHP-CGI 进程进行重启,保证内存使用量不增长。
正是因为这个机制,在高并发的站点中,经常导致 502 错误,我猜测原因是 PHP-FPM 对从 NGINX 过来的请求队列没处理好。不过我目前用的还是 PHP 5.3.2,不知道在 PHP 5.3.3 中是否还存在这个问题。
目前我们的解决方法是,把这个值尽量设置大些,尽可能减少 PHP-CGI 重新 SPAWN 的次数,同时也能提高总体性能。在我们自己实际的生产环境中发现,内存泄漏并不明显,因此我们将这个值设置得非常大(204800)。大家要根据自己的实际情况设置这个值,不能盲目地加大。
话说回来,这套机制目的只为保证 PHP-CGI 不过分地占用内存,为何不通过检测内存的方式来处理呢?我非常认同高春辉所说的,通过设置进程的峰值内在占用量来重启 PHP-CGI 进程,会是更好的一个解决方案。
3,php-fpm的慢日志,debug及异常排查神器:
request_slowlog_timeout设置一个超时的参数,slowlog设置慢日志的存放位置
tail -f /var/log/www.php2.cc.log
上面的命令即可看到执行过慢的php过程。
大家可以看到经常出现的网络读取超过、Mysql查询过慢的问题,根据提示信息再排查问题就有很明确的方向了
FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。本文我们将介绍在Linux下安装ffmpeg及ffmpeg的PHP扩展的详情步骤,还有在64位的win7下ffmpeg的php扩展安装。
1.什么是FFmpeg?现在我们来看看百度百科的介绍。
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。
2.编译所需源码包
yasm:http://yasm.tortall.net/Download.html(汇编器,新版本的ffmpeg增加了汇编代码)
lame:http://lame.sourceforge.net/download.php(Mp3音频解码)
OpenCore AMR:http://sourceforge.net/projects/opencore-amr
AmrNB:http://www.penguin.cz/~utx/amr
AmrWB:http://www.penguin.cz/~utx/amr
FFMpeg:http://ffmpeg.org/download.html。
分别解压缩并编译上述源码包
#tar xzvf *.tar.gz
#tar xjvf *.tar.bz2
解压后直接使用
#./configure
#make
#make install
命令进行编译安装。
编译FFMpef的时候稍微特殊一点:
#./configure --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-shared
#make
#make install
#ldconfig
最后写入config后,终端运行ffmpeg命令,出现success和已安装的扩展,则运行成功。
3.使用方法
MP3转换AMR: ffmpeg -i 1.mp3 -ac 1 -ar 8000 1.amr
AMR转换MP3: ffmpeg -i 1.amr 1.mp3
可能遇到的问题
1.ffmpeg默认安装目录为“/usr/local/lib”,有些64位系统下软件目录则为“/usr/lib64”,编译过程中可能会出现
“ffmpeg: error while loading shared libraries: libmp3lame.so.0: cannot open shared object file: No such file or directory”等类似的错误,
解决办法是建立软链接:
#ln -s /usr/local/lib/libmp3lame.so.0.0.0 /usr/lib64/libmp3lame.so.0
2.此时如果出现以下提示:
ffmpeg: error while loading shared libraries: libavdevice.so.54: cannot open shared object file: No such file or directory
可以通过如下方式查看ffmpeg的动态链接库哪些没有找到:
# ldd `which ffmpeg`
libavdevice.so.54 => not found
libavfilter.so.3 => not found
libavformat.so.54 => not found
libavcodec.so.54 => not found
libswresample.so.0 => not found
libswscale.so.2 => not found
libavutil.so.51 => not found
libm.so.6 => /lib64/libm.so.6 (0x00002ab7c0eb6000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ab7c100b000)
libc.so.6 => /lib64/libc.so.6 (0x00002ab7c1125000)
/lib64/ld-linux-x86-64.so.2 (0x00002ab7c0d9a000)
如果类似于上面的输出内容,查找以上类库:
# find /usr/local/lib/ | grep -E "libavdevice.so.54|libavfilter.so.3|libavcodec.so.54"
/usr/local/lib/libavfilter.so.3.17.100
/usr/local/lib/libavcodec.so.54.59.100
/usr/local/lib/libavdevice.so.54
/usr/local/lib/libavcodec.so.54
/usr/local/lib/libavfilter.so.3
/usr/local/lib/libavdevice.so.54.2.101
会发现全部在/usr/local/lib/下
查看链接库配置文件
# more /etc/ld.so.conf | grep /usr/local/lib
如果不包含的话,需要编辑此文添加:
/usr/local/lib
/usr/local/lib64
运行配置命令
# ldconfig
----------------------------------------------------------------------------------------------------------
以上为转载
1 如果安装amrnb遇到错误:
configure: error: You need patch utility to prepare sources.
执行:
yum install patch
2 遇到ERROR: libopencore_amrnb not found
cd ..
wget http://downloads.sourceforge.net/project/opencore-amr/opencore-amr/0.1.2/opencore-amr-0.1.2.tar.gz?r=http://sourceforge.net/projects/opencore-amr/&ts=1285256783&use_mirror=ufpr
tar -xf opencore-amr-0.1.2.tar.gz
cd opencore-amr-0.1.2
./configure
make && make install clean
3 出现"make: *** [libavcodec/libavcodec.so.55] Error 1"
make clean 一下再./configure ...
安装ffmpeg-php
(1)下载安装包
wget http://jaist.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.5.3.1/ffmpeg-php-0.5.3.1.tbz2
或http://jaist.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/
安装ffmepg-php
#tar -jxvf ffmpeg-php-0.6.0.tbz2
#cd ffmepg-php
#/usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php/bin/php-config --with-ffmpeg=/usr/local/ffmepg
#make && make install
报错情况
make: *** [ffmpeg-php.lo] 错误 1
解决:
# mv ffmpeg-php.loT ffmpeg-php.lo
make: *** [ffmpeg_movie.lo] 错误 1
解决:
# mv ffmpeg_movie.loT ffmpeg_movie.lo
make: *** [ffmpeg_frame.lo] 错误 1
解决:
# mv ffmpeg_frame.loT ffmpeg_frame.lo
make: *** [ffmpeg_errorhandler.lo] 错误 1
解决:
# mv ffmpeg_errorhandler.loT ffmpeg_errorhandler.lo
make: *** [ffmpeg_tools.lo] 错误 1
解决:
# mv ffmpeg_tools.loT ffmpeg_tools.lo
(4)测试
在php的配置php.ini文件,添加如下内容
extension=ffmpeg.so
重启apache或php-fpm,用php测试
/usr/local/php/bin/php -r 'phpinfo();' | grep ffmpeg
ffmpeg
ffmpeg support (ffmpeg-php) => enabled
ffmpeg-php version => 0.5.3.1
ffmpeg-php gd support => enabled
ffmpeg.allow_persistent => 0 => 0
ffmpeg.show_warnings => 0 => 0
............................省略
64位win7系统下ffmpeg的php扩展的安装
我在我的笔记本上安装了64位的win7,php的版本和上一个都是一样的,然后也是下载了那个版本(win32)的ffmpeg扩展包,然后把php_ffmpeg.dll放入到php的ext目录下,把其余的放入system32下。发现无效,去apache的的error.log查看也是没有什么错误提醒,搞得我很郁闷,我还在csdn上发帖子也是告诉我去error.log上去查看错误,但是就是看不到,我还尝试过在php.ini中写一个错误的dll,发现apache的error.log下也是看不到错误。
最终发现这样可以解决问题:还是把php_ffmpeg.dll放入到ext下,其余的dll不要放在system32下,而是要放入64位系统独有的C:\Windows\SysWOW64目录下,然后就好了。
PS:尽管ffpmpeg有64位的扩展,但是这个64位是和php的一致的,而不是和你的操作系统一致的。我最终调试出来问题是用在命令下下运行php,直接如果有错误的话,比如你加载了错误的dll,这个时候会弹出来错误的,很快帮助能解决问题!
PHP可通过PCNTL扩展实现进程控制,如进程创建,信号处理,进程中断判断等。但只能在CLI模式下操作。
PCNTL的信号机制是基于 ticks 机制实现的。因此在使用信号相关函数时需要在前面添加declare(ticks = n) 语法结构。
pcntl_alarm ( int $seconds )指定秒数后向进程发送一个 SIGALRM 信号
pcntl_signal ( int $signo , callback $handler [, bool $restart_syscalls ])给指定信号$signo设置回调函数
declare(ticks = 1);
function signal_handler($signal) {
print "Caught SIGALRM\n";
pcntl_alarm(3);
}
pcntl_signal(SIGALRM, "signal_handler", true);
pcntl_alarm(3);
for(;;) {
}
pcntl_exec ( string $path [, array $args [, array $envs ]] )执行指定命令,执行完即结束,后面将不会执行
$dir = '/root/';
$cmd = 'ls';
$option = '-l';
$pathtobin = '/bin/ls';
$arg = array($cmd, $option, $dir);
pcntl_exec($pathtobin, $arg);
echo 'will not exec here';
pcntl_fork ( void )为当前进程fork子进程
此时,父进程执行过程中,得到的fork返回值为子进程号(>0),失败时,在 父进程上下文返回-1,不会创建子进程,并且会引发一个PHP错误;
父进程的阻塞同时会阻塞子进程。但是父进程的结束不影响子进程的运行;
子进程会从执行pcntl_fork()的那条语句开始执行(包括此函数),但是此时它返回的是零(代表这是一个子进程)。在子进程的代码块中最好有exit语句,即执行完子进程后立即就结束。
int pcntl_wait ( int &$status [, int $options = 0 ] ) 等待或返回fork的子进程状态
说明子进程调用结束后,并没有完全销毁,而是变成了僵尸进程,不占内存,仅存在进程列表。此时需要调用父进程调用wait来等待子进程结束。如果父进程在子进程前退出了,那么init进程将会对僵尸进程进行管理,它还是可以被清除的。第二个参数可设置阻塞方式:
1. WUNTRACED 阻塞方式调用的,函数返回值为子进程的pid,如果没有子进程返回值为-1;
2. WNOHANG 非阻塞方式调用,函数还可以在有子进程在运行但没有结束的子进程时返回0。
$pid = pcntl_fork ();
//父进程和子进程都会执行下面代码
if ( $pid == -1 ) {
//错误处理:创建子进程失败时返回-1.
die( 'could not fork' );
} else if ( $pid ) {
//父进程会得到子进程号,所以这里是父进程执行的逻辑
pcntl_wait ($status, WUNTRACED); //等待子进程中断,防止子进程成为僵尸进程。
echo "ok".PHP_EOL;
} else if ($pid == 0){
//子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
echo "子进程运行" . getmypid() .PHP_EOL;
sleep(5);
exit;
}
echo "父进程运行" . getmypid() .PHP_EOL;
相关文章
IntelliJ IDEA2021.1 配置大全(超详细教程)
这篇文章主要介绍了IntelliJ IDEA2021.1 配置大全(超详细教程),需要的朋友可以参考下...2021-04-18- VPN可以虚拟出一个专用网络,让远处的计算机和你相当于处在同一个局域网中,而中间的数据也可以实现加密传输,用处很大,特别是在一些大公司,分公司处在不同的区域。...2016-01-27
- 这篇文章主要介绍了Tomcat配置及如何在Eclipse中启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-04
- 如果我们需要安培Laravel4的话最php最低要求要在php5.3.7版本并且我们需要把mcrypt与openss这两个扩展开启才可以,具体步骤我们参考下文。 前面我们介绍我了 com...2016-11-25
- PHP-FPM我们相信各位用高版本的php经常使用到了,下面整理了一些关于PHP-FPM的笔记,有兴趣的可进来看看。 今天赶上了123System OPenVZ VPS全场半价的机会,购入了一...2016-11-25
详解Maven profile配置管理及激活profile的几种方式
这篇文章主要介绍了详解Maven profile配置管理及激活profile的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-26- vue项目中有一些方法需要在多个页面调用,但为了避免在每个页面都import进来,可以把方法加到原型上去,这样在每个组件中都能使用了,下面这篇文章主要给大家介绍了关于配置vue全局方法的两种方式,需要的朋友可以参考下...2021-09-13
php-fpm 启动报please specify user and group other than root, pool ‘default’
本文章来给大家介绍关于php-fpm 启动报please specify user and group other than root, pool ‘default’的解决办法。 安装PHP ,配置fpm 成功后启动发现报错: St...2016-11-25- 这篇文章主要介绍了IDEA如何添加配置文件到classpath中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
- 通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31
- 以下就是部署PHP时的4个配置修改说明,大家一个一个进行学习研究。1、short_open_tag 是什么呢? 决定是否允许使用代码开始标志的缩写形式(<? ?> )。如果要和 XML 结合使用PHP,可以禁用此选项以便于嵌入使用<?x...2015-10-21
华为畅享20Pro配置怎么样?华为畅享20Pro参数配置分析
华为畅享20Pro配置怎么样?对于即将上市的华为畅享20 Pro手机,很多的网友们也是相当关注的,大家都想要知道这款华为畅享20 Pro手机的配置到底怎么样,赶紧看看吧...2020-06-29- 在使用vue-router的项目中,实例化VueRouter是其配置选项routes该选项指定路由与视图的组件的关系或者路由与其他路由的关系,Router配置选项中是其中最重要的配置。本文就详细的介绍一下...2021-10-25
详解element-ui 表单校验 Rules 配置 常用黑科技
这篇文章主要介绍了element-ui 表单校验 Rules 配置 常用黑科技,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11tomcat9 下载安装和配置+整合到eclipse的教程详解
这篇文章主要介绍了tomcat9 下载安装和配置+整合到eclipse,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-28- 这篇文章主要介绍了pytest配置文件pytest.ini的详细使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-17
- 今天研究了个开源项目,数据库是mysql的,其中的脚本数据需要备份,由于本人的机器时mac pro,而且mac下的数据库连接工具都不怎么好用,就想着如何利用windows下的数据库连接工具使用,并做相关备份,另外windows系统下的sqlyo...2015-10-21
mysql(master/slave)主从复制原理及配置图文详解
这篇文章主要介绍了mysql(masterslave)主从复制原理及配置图文详解,以前脚本之家小编发过相关的内容,但这么好的非常少见特分享一下,需要的朋友可以参考下...2016-06-12- 这篇文章主要介绍了微信小程序 开发之全局配置的相关资料,需要的朋友可以参考下...2017-05-09
- 这篇文章主要介绍了vue配置多代理服务接口地址操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-08