Debian11 安装笔记2:编译安装PHP

### apt 安装 php 

参考:http://www.tomato.cm/1195.html

### 环境准备

apt update
apt install build-essential

apt-get install \
libxml2-dev \
libssl-dev \
libbz2-dev \
libjpeg-dev \
libpng-dev \
libxpm-dev \
libgmp-dev \
libgmp3-dev \
libmcrypt-dev \
libpspell-dev \
librecode-dev \
libcurl4-gnutls-dev \
libgmp-dev \
libgmp3-dev \
librecode-dev \
libpspell-dev \
libmcrypt-dev \
libreadline-dev \
libtidy-dev \
libxslt1-dev \
libfreetype6-dev \
-y


### 创建相关用户

命令列出所有用户

cat /etc/passwd |cut -f 1 -d:

创建用户组和用户

groupadd www
useradd -g www www

安装编译工具

apt install gcc make
apt install libxml2 libxml2-dev libjpeg-dev libpng-dev libbz2-dev

### 下载 PHP 源码

wget https://www.php.net/distributions/php-7.3.33.tar.gz
tar -xzf php-7.3.33.tar.gz
cd php-7.3.33


### 编译

./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-soap \
--with-libxml-dir \
--with-xmlrpc \
--with-openssl \
--with-mhash \
--with-pcre-regex \
--with-sqlite3 \
--with-zlib \
--enable-bcmath \
--with-iconv \
--with-bz2 \
--enable-calendar \
--with-curl \
--with-cdb \
--enable-dom \
--enable-pcntl \
--enable-exif \
--enable-fileinfo \
--enable-filter \
--with-pcre-dir \
--enable-ftp \
--with-gd \
--with-openssl-dir \
--with-png-dir \
--with-zlib-dir \
--with-freetype-dir=/usr/include/ \
--with-jpeg-dir=/usr/include/ \
--enable-gd-jis-conv \
--with-gettext \
--with-gmp \
--with-mhash \
--enable-json \
--enable-mbstring \
--enable-mbregex \
--enable-mbregex-backtrack \
--with-onig \
--enable-pdo \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-zlib-dir \
--with-pdo-sqlite \
--with-readline \
--enable-session \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-libxml-dir \
--with-xsl \
--enable-zip \
--enable-mysqlnd-compression-support \
--enable-opcache

make && make install

### 复制配置文件:

cp /usr/local/src/php-7.3.33/php.ini-production /usr/local/php/etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

### 创建服务文件

php-fpm.service 文件,在 /usr/lib/systemd/system

[Unit]
Description=php-fpm
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
ExecStop=/bin/pkill -9 php-fpm
PrivateTmp=true

[Install]
WantedBy=multi-user.target

### 设置开机启动:

systemctl enable php-fpm

### 添加 PHP 到全局

ln -s /usr/local/php/bin/php /usr/local/bin


### Nginx 虚拟主机支持 PHP

可以把 $realpath_root 换成固定路径

server{
  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "open_basedir=/var/www/html/:/tmp/:/proc/";
    include fastcgi_params;
  }
  ...
}

### Opcache 开启

需要在 php.ini 下,添加 zend_extension="opcache.so"

### 错误解决

错误提示1:configure: error: freetype-config not found.

由于 php-fpm 镜像使用的 libfreetype6 版本为 2.9.1-3 ,版本过新会导致 freetype-config 无法正常使用。

可以选择自行编译低版本的 freetype 2.8.1:

wget http://download.savannah.gnu.org/releases/freetype/freetype-2.8.1.tar.gz 
tar zxvf freetype-2.8.1.tar.gz
cd freetype-2.8.1
./configure --prefix=/usr/include
make && make install


apt install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev

然后再次执行 php 源码的 ./configure,正常通过。

错误提示2: configure: error: Please reinstall the libzip distribution

wget https://libzip.org/download/libzip-1.3.2.tar.gz
tar xvf libzip-1.3.2.tar.gz
cd libzip-1.3.2
./configure
make && make install


错误提示3: make 的时候报错 error while loading shared libraries: libzip.so.5: cannot open shared object file: No such file or directory

参考:https://blog.csdn.net/wanxuexiang/article/details/84574660

在上一个错误提示中,文件安装到了 /usr/local/lib

1. 将该目录加入到共享库的配置文件中

echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig

临时解决方案

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH


错误提示4:

Generating phar.phar

chmod: cannot access 'ext/phar/phar.phar': No such file or directory

make: [Makefile:468: ext/phar/phar.phar] Error 1 (ignored)

解决方法,在PHP源码目录执行:

cd ext/phar/
cp ./phar.php ./phar.phar


错误提示5:configure: error: Cannot find OpenSSL's libraries

参考:https://blog.csdn.net/u010415258/article/details/78656441

$ find / -name libssl.so
/usr/lib/x86_64-linux-gnu/libssl.so
$ ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib


错误提示6: error: Please reinstall the libcurl distribution

$ apt-get install curl
$ apt-get install libcurl4-gnutls-dev
$ find / -name libcurl.so
/usr/lib/x86_64-linux-gnu/libcurl.so
$ cd /usr/include
$ sudo ln -s x86_64-linux-gnu/curl


### 备注

mcrypt 在 PHP7.3 中被废弃,pear 在7.4 被默认废弃。都可以不用安装。


修改时间 2023-07-01

声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
真诚赞赏,手留余香
赞赏
随机推荐
Wordpress 主样式表(style.css)
ReferenceError: __dirname is not defined in ES module scope
Nginx 的 location 设置
WordPress 添加 Favicon 图标的方法
WordPress 常用函数 / sanitize_user
Flame 插件
MySQL DATETIME 时间查询和转换
Node.js 18.x 开始支持内置单元测试