本篇文章給大家?guī)砹岁P(guān)于php的相關(guān)知識(shí),其中主要介紹了在Centos系統(tǒng)中是如何編譯安裝php,以及如何正確配置的,步驟很詳細(xì)!感興趣的朋友下面一起來看一下吧,希望對(duì)大家有幫助。
PHP(全稱:PHP:Hypertext Preprocessor,即“PHP:超文本預(yù)處理器”)是一種開源的通用計(jì)算機(jī)腳本語言,尤其適用于網(wǎng)絡(luò)開發(fā)并可嵌入HTML中使用。PHP的語法借鑒吸收C語言、Java和Perl等流行計(jì)算機(jī)語言的特點(diǎn),易于一般程序員學(xué)習(xí)。PHP的主要目標(biāo)是允許網(wǎng)絡(luò)開發(fā)人員快速編寫動(dòng)態(tài)頁面。
準(zhǔn)備工作
保險(xiǎn)起見使用 php 官網(wǎng)下載:https://www.php.net/downloads
使用官網(wǎng)下載速度較慢,但是安全性有保障,如對(duì)安全性沒有要求也可百度搜索相關(guān)鏡像,本文選擇最新穩(wěn)定版本 PHP 8.1.6
wget https://www.php.net/distributions/php-8.1.6.tar.gz tar -zxvf php-8.1.6.tar.gz cd php-8.1.6
yum install libxml2 libxml2-devel libsqlite3x-devel openssl bzip2 libcurl-devel libcurl libjpeg libpng freetype gmp libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel zlib zlib-devel glibc glib2 ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-devel -y
注意:當(dāng)前 Centos 官方鏡像已停止服務(wù),
yum install
安裝devel
軟件時(shí),如報(bào)錯(cuò)無法安裝可嘗試將/etc/yum.repos.d/
目錄下的CentOS-Base.repo.rpmsave
中的文件內(nèi)容覆蓋至CentOS-Linux-BaseOS.repo
,CentOS-AppStream.repo.rpmsave
覆蓋至CentOS-Linux-AppStream.repo
,操作前請(qǐng)注意備份
因 yum 源中沒有 oniguruma 包,這里使用 github 源碼編譯安裝,項(xiàng)目地址:https://github.com/kkos/oniguruma
wget https://github.com/kkos/oniguruma/releases/download/v6.9.8/onig-6.9.8.tar.gz tar -zxvf onig-6.9.8.tar.gz cd onig-6.9.8 ./configure --prefix=/usr make && make install
安全起見,我們需要?jiǎng)?chuàng)建一個(gè)用戶用于運(yùn)行 php,一般這個(gè)用戶是禁止登陸的,本文創(chuàng)建用戶名與用戶組均為 www
,這個(gè)名稱可以自定義
# 創(chuàng)建用戶組 groupadd www # 創(chuàng)建用戶 useradd -g www www -M -s /sbin/nologin
-g www
指定用戶組-M
不創(chuàng)建家目錄(程序運(yùn)行不需要家目錄)-s /sbin/nologin
不允許登錄,更加安全
編譯并安裝
# 生成編譯文件 ./configure --prefix=/www/server/php81 --with-config-file-path=/www/server/php81/etc --enable-fpm --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype --with-mcrypt --with-jpeg --with-png -with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl -enable-mbstring --enable-gd --with-openssl --with-mhash --enable-pcntl --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-opcache --with-xsl --enable-sockets --enable-mbregex --enable-ftp --with-webp # 編譯并安裝 make && make install # 復(fù)制配置文件 cp php.ini-production /www/server/php81/etc/php.ini # 或者使用 development cp php.ini-development /www/server/php81/etc/php.ini
如果使用 apache
的話,需要在編譯參數(shù)中新增 --with-apxs2=/www/server/apache/bin/apxs
,同時(shí) --enable-fpm
參數(shù)可去除,其中 /www/server/apache
為 apache
安裝目錄,編譯完成后在 apache
的配置文件中解注釋對(duì) php_module
的注釋即可,本文不細(xì)講 apache
配置。
配置
在 /etc/profile
下新增 PATH=$PATH:/www/server/php81/bin && export PATH
,使用 source /etc/profile
使配置立即生效。
創(chuàng)建 php-fpm
軟鏈接:
ln -s /www/server/php81/sbin/php-fpm /www/server/php81/bin/php-fpm
nginx 配置 php
復(fù)制配置文件,如果之前已經(jīng)復(fù)制過請(qǐng)?zhí)^此步驟:
cp /www/server/php81/etc/php-fpm.conf.default /www/server/php81/etc/php-fpm.conf cp /www/server/php81/etc/php-fpm.d/www.conf.default /www/server/php81/etc/php-fpm.d/www.conf
啟動(dòng) php-fpm:
/www/server/php81/sbin/php-fpm
修改 nginx 配置文件
編輯 nginx.conf
文件,在對(duì)應(yīng)的 server
下新增如下內(nèi)容:
location ~ [^/].php(/|$) { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; }
重啟 nginx ,nginx -s reload
,在網(wǎng)站根目錄新建 phpinfo.php
文件:
<?php phpinfo();
在日常的開發(fā)中,不同項(xiàng)目可能需要不同版本的 php
來運(yùn)行,這就需要通過一些配置來實(shí)現(xiàn) php
的共存。多個(gè) php
版本共存時(shí),需要在編譯時(shí)將不同版本的 php
安裝到不同的目錄。
打開 php
安裝路徑,編輯文件 etc/php-fpm.d/www.conf
或 etc/php-fpm.conf
,在文件中新增或修改以下項(xiàng):
[www] ; 根據(jù)版本配置,比如 php8.1 配置為 php-cgi-81.sock listen = /tmp/php-cgi-81.sock listen.backlog = 8192 listen.allowed_clients = 127.0.0.1 ; 運(yùn)行 master 進(jìn)程用戶名,一定要設(shè)置?。〔⑶?listen 中設(shè)置的文件 nginx 必須有讀權(quán)限,否則會(huì)報(bào)錯(cuò) listen.owner = www ; 運(yùn)行 master 進(jìn)程用戶名,參考上一個(gè) listen.group = www listen.mode = 0666 ; worker 進(jìn)程運(yùn)行的用戶,該用戶需要有運(yùn)行的 PHP 文件的讀權(quán)限,如涉及文件上傳還需要對(duì)應(yīng)目錄的寫權(quán)限 user = www ; worker 進(jìn)程的用戶組,參考上一項(xiàng) group = www ; 動(dòng)態(tài)調(diào)整 worker 數(shù) pm = dynamic ; 依據(jù)版本設(shè)置 如 php8.1 配置為 phpfpm_81_status pm.status_path = /phpfpm_81_status ; 最大 worker 進(jìn)程數(shù) 一般設(shè)置為 內(nèi)存/50M pm.max_children = 50 ; 啟動(dòng)時(shí)的 worker 進(jìn)程數(shù) pm.start_servers = 5 ; 限制時(shí)的最小 worder 進(jìn)程數(shù) pm.min_spare_servers = 5 ; 限制時(shí)的最大 worder 進(jìn)程數(shù) pm.max_spare_servers = 10 ; 請(qǐng)求超時(shí)時(shí)間 request_terminate_timeout = 100 ; 慢日志記錄時(shí)間,請(qǐng)求事件超出此時(shí)間會(huì)記錄日志 request_slowlog_timeout = 30 ; 慢日志目錄,目錄一定要存在且上面設(shè)置的 user 用戶要有寫權(quán)限 slowlog = /www/wwwlogs/php/slow.log
隨后在 nginx 配置文件,對(duì)應(yīng)的 server 中修改 fastcgi_pass
為剛才設(shè)置中的 listen
對(duì)應(yīng)的路徑,注意此文件 nginx 運(yùn)行用戶必須有讀權(quán)限,否則會(huì)報(bào)錯(cuò):
location ~ [^/].php(/|$) { - fastcgi_pass 127.0.0.1:9000; + fastcgi_pass unix:/tmp/php81.sock; fastcgi_index index.php; include fastcgi.conf; }
php-fpm
即php-Fastcgi Process Manager
,php-fpm
是FastCGI
的實(shí)現(xiàn),并提供了進(jìn)程管理的功能。php-fpm
進(jìn)程包含master
進(jìn)程與worker
進(jìn)程,一般情況下,master
進(jìn)程只有一個(gè),負(fù)責(zé)監(jiān)聽端口、調(diào)度請(qǐng)求,而worder
進(jìn)程則有多個(gè),每個(gè)進(jìn)程內(nèi)部都嵌入了一個(gè)PHP
解釋器,是PHP
代碼真正運(yùn)行的地方。前文設(shè)置中的worker
即php-fpm
的worker
進(jìn)程數(shù)量。
編輯文件 /etc/init.d/php-fpm81
,如需多版本兼容文件名后加上當(dāng)前版本,如這里使用 php-fpm81
,寫入如下內(nèi)容:
#!/bin/bash # chkconfig: - 51 64 . /etc/init.d/functions # php-fpm 路徑 exec=/www/server/php81/sbin/php-fpm # 鎖文件 用于識(shí)別當(dāng)前軟件是否在運(yùn)行 lock=/var/lock/subsys/php-fpm81 # 標(biāo)識(shí) 輸出信息用 可隨意修改 proc=php-fpm81 function start() { pidofproc $exec > /dev/null [ $? = 0 ] && echo "${proc} 正在運(yùn)行中" && exit daemon $exec if [ $? = 0 ]; then echo "${proc} 啟動(dòng)成功" rm -f lock touch $lock else echo "${proc} 啟動(dòng)失敗 $?" fi } function stop() { pidofproc $exec > /dev/null [ $? != 0 ] && echo "${proc} 未運(yùn)行" && exit killproc $exec if [[ $? == 0 ]]; then echo "${proc} 停止成功" rm -f $lock else echo "${proc} 停止失敗 $?" fi } function reload() { killproc $exec -HUP if [[ $? == 0 ]]; then echo "平滑重啟成功" else echo "平滑重啟失敗 $?" fi } function restart() { stop start } function procStatus() { status $exec > /dev/null if [[ $? == 0 ]]; then echo "${proc} 已啟動(dòng)" else echo "${proc} 未啟動(dòng)" fi } case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) restart ;; status) procStatus ;; *) echo $"Usage: $0 {start|stop|reload|restart|status}" esac
隨后添加為開機(jī)自啟即可,如下:( php-fpm81
是上一步自定義得到文件名)
# 添加運(yùn)行權(quán)限 chmod +x /etc/init.d/php-fpm81 chkconfig --add php-fpm81 chkconfig php-fpm81 on
手動(dòng)操作命令如下:
# 啟動(dòng) /etc/init.d/php-fpm81 start # 停止 /etc/init.d/php-fpm81 stop # 平滑重啟 /etc/init.d/php-fpm81 reload # 重啟 /etc/init.d/php-fpm81 restart # 運(yùn)行狀態(tài) /etc/init.d/php-fpm81 status
推薦學(xué)習(xí):《PHP視頻教程》