源安装和编译安装的区别
yum 或 dnf 安装:
从yum安装来说吧,yum相当于是自动化帮你安装,你不用管软件的依赖关系,在yum安装过程是帮你把软件的全部依赖关系帮你傻瓜式的解决了。而且现在Centos7的服务启动已经换成systemctl命令来控制了。通过yum安装会帮你自动注册服务,你可以通过systemctl start xxx.service启动服务,方便快捷。但是缺点是yum安装你没办法干预,安装的目录也是分散的。你可能要执行whereis或者find命令去找yum安装的路径。有时候yum安装的软件版本比较低,你不得不去找其他的yum源,或者rpm包。
源码编译安装:
源码编译在安装过程中可能要解决很多的依赖问题,才能装好一个软件。装好的软件你还不能通过systemctl来启动服务,因为在/usr/lib/systemd/system/路径下并没有你的服务的配置文件,你要自己手写一个。但是好处在于你能选择软件的版本,自定义安装目录,安装的模块。更加灵活方便。
安装编译工具
yum install -y gcc gcc-c++
yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel libicu-devel freetype-devel libmcrypt-devel libzip-devel pcre-devel openldap openldap-devel
源码编译安装 PHP
在 https://www.php.net/downloads.php 找到需要下载的版本。
cd /software
wget https://www.php.net/distributions/php-7.3.23.tar.gz
tar -xzf php-7.3.23.tar.gz
cd php-7.3.23
配置编译参数
#命令列出所有用户
cat /etc/passwd |cut -f 1 -d:
#创建用户组和用户
groupadd www
useradd -g www www
配置fpm的用户组和用户,以及安装其他扩展
### 因为富文本编辑器的问题,请把下面所有“- -”换成“--”
./configure - -prefix=/software/php73 \
- -with-config-file-path=/software/php73/etc \
- -with-config-file-scan-dir=/software/php73/etc/php.d \
- -enable-mysqlnd \
- -with-mysqli \
- -with-pdo-mysql \
- -enable-fpm \
- -with-fpm-user=www \
- -with-fpm-group=www \
- -with-gd \
- -with-iconv \
- -with-zlib \
- -enable-xml \
- -enable-shmop \
- -enable-sysvsem \
- -enable-inline-optimization \
- -enable-mbregex \
- -enable-mbstring \
- -enable-ftp \
- -with-openssl \
- -enable-pcntl \
- -enable-sockets \
- -with-xmlrpc \
- -enable-zip \
- -enable-soap \
- -without-pear \
- -with-gettext \
- -enable-session \
- -with-curl \
- -with-jpeg-dir \
- -with-freetype-dir \
- -disable-fileinfo \
- -enable-opcache
./configure --prefix=/software/php73 是安装目录
如果配置通过,会提示如下:
+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+
Thank you for using PHP.
编译过程报错处理
报错1:configure: error: Package requirements (libxml-2.0 >= 2.7.6) were not met:No package 'libxml-2.0' found
yum install -y libxml2-devel
报错2:configure: error: Package requirements (sqlite3 > 3.7.4) were not met:No package 'sqlite3' found
yum install -y libcurl-devel
yum -y install sqlite-devel
报错3:configure: error: Package requirements (oniguruma) were not met:No package 'oniguruma' found
执行以下命令
yum config-manager --set-enabled PowerTools
yum -y install oniguruma oniguruma-devel
报错4:configure: ERROR: Package requirements (icu-uc >= 50.1 icu-io icu-i18n) were not met:
yum install libicu-devel
报错5:configure: error: Cannot find ldap libraries in /usr/lib
cp -frp /usr/lib64/libldap* /usr/lib/
报错6: -c /software/php74src/Zend/zend_execute.c -o Zend/zend_execute.lo Cmake: *** [Makefile:2283:Zend/zend_execute.lo] 错误 1
卡在这里好久,我换了一台内存大于2GB的服务器,才不报这个错误。
设置 php.ini 配置文件
将官方提供的源代码里的模板拷贝到配置参数中所指定的目录中
cp /software/php73src/php.ini-production /software/php73/etc/php.ini
然后可以根据自己服务器的需求,对php.ini文件的内容进行修改
设置php-fpm配置文件
cd /software/php73/etc
cp php-fpm.conf.default php-fpm.conf
cd /software/php73/etc/php-fpm.d
cp www.conf.default www.conf
修改 www.conf
user = www
group = www
listen = 127.0.0.1:9000
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
其他配置可根据自己的情况进行相应修改
加入系统环境变量
使用vim命令打开/etc/profile文件,在文件最末尾加上如下代码
export PHP_HOME=/software/php73
export PATH=$PATH:$PHP_HOME/bin:$PHP_HOME/sbin
保存修改后,使用source命令重新加载配置文件,命令如下
source /etc/profile
echo $PATH
命令查看环境变量中是否已经加入了相关的路径
加入系统服务
如果用yum install命令安装的,yum命令会自动创建nginx.service文件,直接用命令systemcel enable nginx.service设置开机启动即可。源码安装的手动建立nginx.service服务文件。
在 /usr/lib/systemd/system 中创建 nginx.service 和 php-fpm.service
nginx.service 文件
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/software/nginx/sbin/nginx -c /software/nginx/conf/nginx.conf
ExecReload=/software/nginx/sbin/nginx -s reload
ExecStop=/software/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
php-fpm.service 文件
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
ExecStart=/software/php73/sbin/php-fpm
ExecStop=/bin/pkill -9 php-fpm
PrivateTmp=true
[Install]
WantedBy=multi-user.target
将服务加入开机自启
systemctl enable nginx.service
systemctl enable php-fpm.service
pkill php-fpm 可以直接关闭 php-fpm 进程
命令查看进程,若能够看到相关进程,则证明启动成功。查询进程时,可以看到进程是以www用户身份执行的
ps aux | grep php-fpm
配置 Nginx + PHP
本文中对Nginx进行了多域名配置,每个域名只需要在/software/nginx/conf/vhosts目录下有一个自己的配置文件即可。
server {
listen 80;
server_name localhost;
index index.php index.htm index.html;
root /software/www;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
# 配置页面静态化
include /software/nginx/conf/rewrite/default.conf;
access_log /software/nginx/access/default.log;
error_log /software/nginx/error/default.log;
}
可以看到,与之前的配置文件相比,主要是index配置项后,多了关于php的配置内容,以及location相关配置中,多了对于php的内容,保存以上配置文件,使用
systemctl reload nginx
命令,重新加载配置文件后,通过浏览器访问http://服务器的IP/info.php,即可看到上文中php代码的运行效果,具体如下图所示
PHP 配置信息
至此,即完成了Nginx和PHP的配置,这里需要说明,上述的配置只是最简单的配置,若项目不是运行在web根目录下的,那么配置文件也需要对应的进行修改,若项目是采用CodeIgniter或Laravel等其他框架技术开发的,那么也需要对配置文件进行相应修改,这部分内容大家可自行百度,有很多相关的博客。
备注
(1)Primaryscriptunknown
https://www.cnblogs.com/panblack/p/php_primary_script_unknown_solution.html
(2)通过phpInfo()查看 gd库已经开启,但是里边没有freeType 和jpeg的支持 但有png的支持 ,如果是 freetype 跟 jpeg没有安装,则安装这两软件
yum install freetype*
yum install libjpeg*
安装之后寻找安装路径find / -name freetype
结果在 /usr/include/freetype2/ 文件夹中
./configure --with-freetype-dir=/usr/include/freetype2 --with-jpeg-dir=/usr/include --with-php-config=/usr/local/php/bin/php-config
(3)开启 opcache,需要 添加 zend_extension="opcache.so"
https://www.jianshu.com/p/582b683a26a2
参考:
https://www.cnblogs.com/lichina/p/10556221.html【棒棒的】
https://blog.csdn.net/stacy06/article/details/84032985【freetype】
https://www.php.net/manual/zh/install.general.php
https://www.php.net/downloads.php
https://www.cnblogs.com/werben/p/11833903.html
https://www.cnblogs.com/alliancehacker/p/12255445.html
https://www.cnblogs.com/chxmtl/p/13847236.html
https://blog.csdn.net/qq_32828933/article/details/103756240
https://www.jianshu.com/p/582b683a26a2
https://www.pieruo.com/887.html