PHP开发环境配置指南

Environment

  1. Mac
  2. PHP 7.1

Process

Mac

  • 在 Mac 上,可以使用 brew 系列命令进行软件包的操作。在国内的情况下,需要先切换其镜像源。
brew install php@7.1

PHP

  • 在 /usr/local/etc/php/7.1/php-fpm.conf 配置 PHP 进程管理的全局参数。
; 一般可以配置进程ID的文件路径,不配置也不会有什么问题,但是建议还是配置。
pid = run/php-fpm.pid

; php-fpm 错误日志保存路径,如果资源允许,就配置下啦。
error_log = log/php-fpm.log

; 错误日志写入等级,等级越高,记录的日志量越少。
log_level = warning

;紧急重新启动间隔用于确定何时启动正常重新启动的时间间隔。这对于解决加速器共享内存中的意外损坏非常有用。
; Available Units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
emergency_restart_threshold = 1
emergency_restart_interval = 3h

; Time limit for child processes to wait for a reaction on signals from master.
; Available units: s(econds), m(inutes), h(ours), or d(ays)
; Default Unit: seconds
; Default Value: 0
process_control_timeout = 65s

; FPM 创建的进程数量最大限制。作为 dynamic PM 时,进程数量的限制。还是很有必要设置的,不然会随着请求量的增加,创建大量进程,抢占 CPU,造成服务停摆。
process.max = 5000

; 开启守护进程
daemonize = yes

; 其他参数不作处理就可以了。
  • 在 /usr/local/etc/php/7.1/php-fpm.d 目录下,在对应的文件里配置非局部的参数。
; 指定进程池,默认值就可以了。
[www]

; 不配置用户组和用户,会报错。默认值就可以了。
user = www
group = www

; 配置监听端口,一般默认是9001,如果已经被占用了,就换其他的好了。但一定要在 Nginx 响应的配置里对应上。
;也有采用 socket 方式做监听的。以上两种方式各有千秋。
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
;'/path/to/unix/socket' - to listen on a unix socket.    //在没有历史配置的情况下,不存在此路径
; fastcgi_pass unix:/dev/shm/php-cgi.sock;    //在 /dev/shm/php-cgi.sock 下,文件存在,运行正常
listen = 127.0.0.1:9003

; 当 pm 参数配置太小,无法满足请求时,会在日志(error_log)生成相应的警告。同时,会造成TCP连接数飙升,Nginx请求堵塞,内存也飙升。
; 当发现 php-fpm 进程占据大部分CPU和内存时,首先要降低 process_idle_timeout ,其次是降低空闲进程数。
; static(静态)或者dynamic(动态),如果dm设置为static,那么其实只有pm.max_children这个参数生效(如果采用云服务器,可以根据其监控与统计来设置参数值)
pm = dynamic

; 静态方式下开启的php-fpm对应端口进程数量,在动态方式下他限定php-fpm对应端口的最大进程数(这里要注意pm.max_spare_servers的值只能小于等于pm.max_children)
; 当 pm 配置为 'static'、 'dynamic' 或者 'ondemand' 时,子进程创建数量的限制。还是很有必要设置的,不然会随着请求量的增加,创建大量进程,抢占 CPU,造成服务停摆(说两遍,划重点)。
pm.max_children = 10000

; 动态方式下的起始php-fpm对应端口进程数量 min_spare_servers + (max_spare_servers - min_spare_servers) / 2。这里不要设置太大,不然会占很多服务器资源
pm.start_servers = 500

; 动态方式空闲状态下的最小php-fpm对应端口进程数量,这里不要设置太大,不然会占很多服务器不必要的资源。根据业务并发量设置即可。
pm.min_spare_servers = 100

; 动态方式空闲状态下的最大php-fpm对应端口进程数量
pm.max_spare_servers = 1000

; php-fpm对应端口进程时间限制。不要设置太大,不然空闲的进程会大量消耗CPU和内存。
pm.process_idle_timeout = 1s;

;每个子进程在重新启动前应执行的请求数。
;这对于解决第三方库中的内存泄漏非常有用。对于无休止的请求处理,请指定“0”。不建议设置 “0”。刷新子进程,以及其内存,这是很有必要点。
; Default Value: 0
pm.max_requests = 200

; The timeout for serving a single request after which the worker process will
; be killed. This option should be used when the 'max_execution_time' ini option
; does not stop script execution for some reason. A value of '0' means 'off'.
; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)
; Default Value: 0
request_terminate_timeout = 65s

; 配置进程内存,以便堆栈大小分配
php_admin_value[memory_limit] = 3072M
  • 在 /usr/local/etc/php/7.1/conf.d/ext-opcache.ini 文件里,配置扩展类库。这里配置是 opcache 的类库,其一般都在 PHP 安卓路径下的 lib 文件夹里。其他版本,其他类库的配置,一般都在 php.ini 里配置引入,并且响应的参数也在 php.ini 文件里配置。
; opcache 开启后,对编译过的 php 文件进行缓存,省去过多的重复编译,提高效率。
zend_extension="/usr/local/opt/php@7.1/lib/php/20160303/opcache.so"
  • 配置 php.ini 参数,设定上传文件参数大小限制。如果文件上传超过了这个限制,会报错:413 Request Entity Too Large 。
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 10M

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 10M

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 30
  • 根据服务器资源,配置 php.ini 参数优化,提高资源使用率
; 输出缓存区大小配置。优化大量数据流输出,使一次输出大量列表数据成为可能。如果想要修改输出缓冲区的大小,确保使用的值是4(32位系统)或8(64位系统)的倍数。(默认4096)
output_buffering = 5120

; 最大脚本进程执行时间
max_execution_time = 300

; 最大脚本进程读取数据时间(默认60s)
max_input_time = 300

; 最大脚步进程消耗内存大小(默认128M)
memory_limit = 5120M

[opcache]
; Determines if Zend OPCache is enabled
opcache.enable=1

; Determines if Zend OPCache is enabled for the CLI version of PHP
opcache.enable_cli=1

; The OPcache shared memory storage size.
opcache.memory_consumption=256

; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=64

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
opcache.max_accelerated_files=7000

; When disabled, you must reset the OPcache manually or restart the
; webserver for changes to the filesystem to take effect.
opcache.validate_timestamps=1

; How often (in seconds) to check file timestamps for changes to the shared
; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
opcache.revalidate_freq=3
  • 在其目录下,php-fpm 的启用命令。
; 开启 php-fpm
./php-fpm -D

; 杀死 php-fpm 进程
pkill php-fpm

; php-fpm master 进程可以理解一下以下的信号:
; INT, TERM 立刻终止
; QUIT 平滑终止 
; USR1 重新打开日志文件
; USR2 平滑重载所有worker进程并重新载入配置和二进制模块
; 注意:pid = run/php-fpm.pid,master 主进程ID保存位置,在 php-fpm.conf 文件里可以配置
;关闭php-fpm:
kill -INT `cat /opt/php71/var/run/php-fpm.pid`
; 平滑重启php-fpm:
kill -USR2 `cat /opt/php71/var/run/php-fpm.pid`

Conclusion

不同的版本,对应的文件路径会有些出入,以上仅供参考,请君灵活处理。

References

转载本文,请注明出处、作者

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值