PHP 源码安装记录

480 阅读2分钟

下载 PHP 源码包

#在官网 https://www.php.net/downloads 找到自己要下载的版本地址:
wget https://www.php.net/distributions/php-7.4.30.tar.gz

#使用 tar 命令解压 PHP
tar -zxvf php-7.4.30.tar.gz
#进入目录
cd php-7.4.30

编译安装

  1. 配置
#说明:
--prefix 指定PHP安装目录
--with- 开头的配置项是没有安装的配置,该参数表示安装此配置
--without- 开头的配置项是已经安装的配置,该参数表示卸载此配置
--enable- 该参数表示启用此配置
--disable- 该参数表示禁用此配置

2.编译

./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --with-config-file-scan-dir=/usr/local/php7/conf.d --with-curl --with-mysqli --with-openssl --with-pdo-mysql --enable-fpm --enable-bcmath --enable-xml --enable-mbstring --enable-sockets

错误处理

# 错误1:
configure: error: Package requirements (libxml-2.0 >= 2.7.6) were not met:
No package 'libxml-2.0' found

# 配置遇到的No package ‘libxml-2.0‘ found,缺失libxml2.0 库,解决方法:
yum -y install libxml2
yum -y install libxml2-devel

# 错误 2:
configure: error: Package requirements (sqlite3 > 3.7.4) were not met:
No package 'sqlite3' found

# ./configure 配置遇到的No package ‘sqlite3‘ found,解决方法:
yum install sqlite-devel

# 错误 3:
configure: error: Package requirements (oniguruma) were not met:
No package 'oniguruma' found

# 原因:oniguruma 是一个处理正则表达式的库,在编译安装 php 时,如果使用 –enable-mbstring 参数, 开启 mbstring 扩展,则会出现这个错误。mbstring 的正则功能需要 oniguruma 的支持,系统中却没有 oniguruma 库

# 解决方法1:
在 ’–enable-mbstring’ 参数后添加 ’–disable-mbregex’ 参数,意为不使用 mbstring 的正则功能,不再需要 oniguruma 库
    
# 解决方法2: 源码安装 oniguruma 库
wget https://github.com/kkos/oniguruma/releases/download/v6.9.5_rev1/onig-6.9.5-rev1.tar.gz -O onig-6.9.5.tar.gz
tar -
cd onig-6.9.5
./configure --prefix=/usr --libdir=/lib64
make && make install
# 错误 4:
No package 'libpng' found 
# 解决方法:
yum install libpng-devel

# 错误 5:
configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met
# 解决方法:
(1)查看是否有安装过libzip
    rpm -q libzip 
    rpm -q libzip-devel 
    如果有,卸载它
    yum remove libzip-devel libzip
(2)然后从官网下载并编译安装
   wget https://libzip.org/download/libzip-1.3.2.tar.gz
   tar zxf libzip-1.3.2.tar.gz
   cd libzip-1.3.2
   ./configure
   make && make install
   export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:$PKG_CONFIG_PATH
# 错误 6:
No package 'libcurl' found
# 解决方法:
sudo yum install libcurl-devel

安装

make && make install
# 错误
编译器内部错误:已杀死(程序 cc1)
# 解决方法:
1. sudo dd if=/dev/zero of=/home/swap bs=64M count=16 # of=/home/swap,放置swap的空间; count的大小就是增加的swap空间的大小,64M就是块大小,这里是64MB,所以总共空间就是bs*count=1024MB.
2. sudo mkswap /home/swap # 把刚才空间格式化成swap各式
3. sudo swapon /home/swap # 使刚才创建的swap空间
关闭:
1. sudo swapoff /home/swap
2. sudo rm /home/swap

配置文件

# 修改配置文件 
cd /usr/local/php7/etc 
cp php-fpm.conf.default php-fpm.conf 
cp php-fpm.d/www.conf.default php-fpm.d/www.conf  

# 修改pid文件位置
vim php-fpm.conf
# 添加这行
pid = /run/php-fpm.pid

# 创建php-fpm软链接  
ln -s /usr/local/php7/sbin/php-fpm /usr/sbin/php-fpm
ln -s /usr/local/php7/bin/php /usr/local/bin/php

# 启动 
/usr/sbin/php-fpm 
# 关闭 
kill -INT `cat /run/php-fpm.pid` 
# 重启 
kill -USR2 `cat /run/php-fpm.pid`

# 复制配置文件 
# 去自己刚开始解压文件夹sapi/fpm中复制init.d.php-fpm 放到/etc/init.d下面并命名为php-fpm
cp /home/Jane/php4.30/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# 按解压文件夹复制 php.ini 文件
sudo cp php.ini-production /usr/local/php7/etc/php.ini
cp /usr/local/php/etc/php-fpm.d/www.conf.default  /usr/local/php/etc/php-fpm.d/www.conf


# 赋予脚本可执行命令,添加开机自启动
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on

#命令
service php-fpm start 
service php-fpm stop 
service php-fpm restart 
service php-fpm status
 

配置 Nginx 启动 PHP

server {
        listen       8082;

        location / {
            #root 路径配置必须要有,而且必须要写对
            root           /home/Jane/www/test2;
            index  index.html index.htm index.php;
        }
        proxy_buffer_size 64k;
        proxy_buffers 32 32k;
        proxy_busy_buffers_size 128k;

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            #SCRIPT_FILENAME用$document_root,而不是具体路径
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
}

问题:File not found.

# 权限问题nginx.conf 里的 user 配置要跟 php-fpm.d/www.conf 一致
nginx.conf 文件:
user phpuser;

php-fpm.d/www.conf 文件:
user = phpuser
group = phpuser

安装 gd 库

# 安装 zlib
wget http://www.zlib.net/zlib-1.2.12.tar.gz
tar zxvf zlib-1.2.12.tar.gz
cd zlib-1.2.12
./configure --prefix=/usr/local/zlib
sudo make && sudo make install

# 安装 libpng
wget http://prdownloads.sourceforge.net/libpng/libpng-1.6.37.tar.gz
tar zxvf libpng-1.6.37.tar.gz
cd libpng-1.6.37
./configure --prefix=/usr/local/libpng
sudo make && sudo make install

# 安装 jpegsrc
wget http://www.ijg.org/files/jpegsrc.v9d.tar.gz
tar zxvf jpegsrc.v9d.tar.gz
cd jpeg-9d/
./configure --prefix=/usr/local/libjpeg --enable-shared
sudo make && sudo make install

# 安装 freetype
wget https://download.savannah.gnu.org/releases/freetype/freetype-2.10.1.tar.gz
tar -xzvf freetype-2.10.1.tar.gz
cd freetype-2.10.1
./configure --prefix=/usr/local/freetype --enable-shared
sudo make && sudo make install

# 进入 php 安装包
cd /usr/local/php7/ext/gd
# 生成 configure 文件
make clean
/usr/local/php7/bin/phpize

# 编译安装
./configure --with-php-config=/usr/local/php7/bin/php-config --with-libdir=/usr/local/lib --with-freetype=/usr/local/freetype --with-jpeg=/usr/local/libjpeg
make && make install

# 遇到错误1:
No package 'libjpeg' found
# 解决:
yum install libjpeg-devel

# 遇到错误2:
No package 'freetype2' found
# 解决:
yum install freetype-devel

# make install 过后,系统会自动生成一个GD.SO文件在下面的目录。
Installing shared extensions: /usr/local/[php](https://uzbox.com/tag/php "Posts tagged with php")/lib/php/extensions/no-debug-non-zts-20190902/
# 修改 php.ini文件,重启PHP服务就可以了
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd.so

image.png

安装完毕!

搭建thinkphp5.1 环境

1.搭建环境

# 使用 composer 安装或者更新 thinkphp,
# 1. Composer 安装
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
# 2. 设置 Composer 使用使用国内镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com
# 3. 第一次安装 thinkphp 的话
composer create-project topthink/think=5.1.* tp5
# 4. 已安装过 thinkphp 的话,更新即可
composer update topthink/framework

执行了 thinkphp 更新命令报错 问题1

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires topthink/framework 5.1.*, found topthink/framework[v5.1.41] in the lock file but not in remote repositories, make sure you avoid updating this package to keep the one from the lock file.
  Problem 2
    - phpoffice/phpspreadsheet is locked to version 1.16.0 and an update of this package was not requested.
    - phpoffice/phpspreadsheet 1.16.0 requires ext-zip * -> it is missing from your system. Install or enable PHP's zip extension.

To enable extensions, verify that they are enabled in your .ini files:
    - /usr/local/php7/etc/php.ini
You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode.
Alternatively, you can run Composer with `--ignore-platform-req=ext-zip` to temporarily ignore these required extensions.

解决1

# Problem 1,由于镜像源的问题,更改镜像就好了
composer config -g repo.packagist composer https://packagist.org
# Problem 2,安装 php 的 zip 插件即可
wget http://pecl.php.net/get/zip
tar -xzvf zip
cd zip-1.21.0/
sudo /usr/local/php7/bin/phpize
./configure --with-php-config=/usr/local/php7/bin/php-config --enable-zip
# 编译时报错误 1:configure: error: Please reinstall the libzip distribution 
# 解决方法 1:
wget https://nih.at/libzip/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make -j4 && make install
# 编译时报错误 2:fatal error: zipconf.h: No such file or directory
# 解决方法 2:
sudo ln -s /usr/local/lib/libzip/include/zipconf.h /usr/local/include
# 安装
sudo make && sudo make install
# 生成了 zip.so
/usr/local/php7/lib/php/extensions/no-debug-non-zts-20190902/zip.so
# 修改 php.ini
sudo vi /usr/local/php7/etc/php.ini
# 增加下面这行
extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-20190902/zip.so
# 重启 php
sudo service php-fpm stop
sudo service php-fpm start

问题2

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - phpoffice/phpspreadsheet is locked to version 1.16.0 and an update of this package was not requested.
    - phpoffice/phpspreadsheet 1.16.0 requires ext-zlib * -> it is missing from your system. Install or enable PHP's zlib extension.

To enable extensions, verify that they are enabled in your .ini files:
    - /usr/local/php7/etc/php.ini
You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode.

解决2

# 安装 zlib 插件
cd /home/Jane/software/php-7.4.30/ext/zlib/
mv config0.m4 config.m4
/usr/local/php7/bin/phpize
sudo ./configure --with-php-config=/usr/local/php7/bin/php-config
sudo make && sudo make install
# 生成了 zlib.so
/usr/local/php7/lib/php/extensions/no-debug-non-zts-20190902/zlib.so
# 修改 php.ini
sudo vi /usr/local/php7/etc/php.ini
# 增加下面这行
extension=/usr/local/php7/lib/php/extensions/no-debug-non-zts-20190902/zlib.so
# 重启 php
sudo service php-fpm stop
sudo service php-fpm start

2. 配置文件

在服务器上安装更新好 thinkphp 后,访问地址会报 404 错误

# 修改配置文件
server {
        listen       8083;

        location / {
            root   /**/***/php/aos_server/public;
            index  index.html index.htm index.php;
	    try_files $uri $uri/ /index.php?s=$uri&$args; # 增加这行
        }
        proxy_buffer_size 64k;
        proxy_buffers 32 32k;
        proxy_busy_buffers_size 128k;

        location ~ \.php$ {
            root           /**/***/php/aos_server/public;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
	    fastcgi_split_path_info  ^(.+\.php)(/.*)$; # 配置fastcgi_split_path_info, 让nginx 识别出 thinkPHP 的 pathinfo 模式
	    fastcgi_param  PATH_INFO $fastcgi_path_info;
            include        fastcgi.conf;
        }
}

参考网址:www.aplus.pub/archives/47…