浅析php环境配置

网站 Sep 7, 2020

PHP作为开源的服务器端脚本语言,在web应用方面非常广泛。如果你想下载某些开源应用,github上php开源软件选择往往比Java还多。最近,研究了linux下php的安装,主要有以下体会。

PHP-INI

php.ini文件是php的核心配置文件且只能命名为php.ini,它是对php应用程序全局起作用的设置文件,里面选项非常多,包含php页面使用内存大小限制,上传下载文件大小限制,浮点型的精度等。

FPM-PHP

fpm-php(FastCGI ProcessManager)本来是php的第三方包,在php5.3.3后成为了php的核心成员,不需要单独下载安装。FastCGI诞生之前,web端转发一个php请求后,需要重新加载php.ini,通过fpm-php创建master进程,收到多个php请求,创建子进程来共享master进程加载的php.ini信息。安装fpm-php后,启动php实际上通过启动的fpm-php.service来实现。fpm-php和web之间的通信可以通过两种方式实现,socket和tcp方式,通过/etc/php-fpm.d/www.conf的配置来配置。两种方式的差异主要在listen的配置不一样。一个是php-fpm.sock,一个是服务器的ip:9000。

socket方式是长连接方式,适用于php和其他服务在同一台服务器上

[www]
user = nginx
group = nginx
listen = /run/php-fpm.sock

tcp方式是http请求方式,适用于集群并发量高的多服务器上

[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000

再谈进程如何分配,以下面配置来说,start_servers=10说明php服务就启动10个worker子进程一直处于等待中,min_spare_servers=5是指最小活动进程。php启动时开启8个进程,如果没有收到web请求,fpm-php就会释放一些,最终达到5个进程。但是最大不能超过max_spare_servers = 35。至于max_children=50,那是静态配置方式,不变的,是一种浪费资源的方式,一直启动50个进程再那里等待,即使网站应用没有一个人访问也是一样。

pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 35

扩展包

仅安装php往往不能满足应用软件的需求,还需要其他很多扩展包来支持php应用。例如,【odbc,common,ima,mongodb,xml等】,但是需要注意的是安装的时候下面这些包是基于pecl的【apcu,imagick,goeip,mcrypt,redis,zip,memcache】。尤其,zip包特别需要指定pecl,否则扩展包安装不成功,其他pecl包可以从remi源中自动找到响应包。

yum install php-common
yum install php-apcu
yum install php-pecl-zip

web服务器相关配置

php和web服务器nginx,apache还需要做一些关联配置,在他们的配置文件里面加入以下:

nginx:
location ~ .*\.php$
{
    fastcgi_pass  unix:/run/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include fastcgi_params;
    try_files $uri = 404;
}

apache:
<FilesMatch \.php$>
  SetHandler "proxy:unix:/run/php-fpm.sock|fcgi://localhost"
</FilesMatch>

但是,ubuntu系统下PHP应用使用apache服务器的情况下,需要配置,否则相反apache服务器报错无法启动。以上对php的配置理解,今后随着对它研究的加深,还会写一些关于php新的东西。

标签

乔峰

Hello, Websoft9

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.