源码安装php和扩展

参考:

https://www.php.cn/faq/456396.html(Linux中如何安装 PHP 扩展)

经验

优先使用源码安装,因为yum安装时,yum版本和系统版本和redhat版本各种不一致

 yum install 找不到源时吗,就搜索提供服务包的原地址,比如

yum -y install http://down.24kplus.com/linux/oniguruma/oniguruma-devel-6.7.0-1.el7.x86_64.rpm

安装

1、到官网获取下载地址 https://www.php.net/downloads

2、下载并解压

cd /home/install/php74
wget https://www.php.net/distributions/php-7.4.25.tar.gz
tar -zxvf php-7.4.25.tar.gz

3、进入解压目录编译配置

cd php-7.4.25

sudo ./configure --prefix=/usr/local/php74 \
 --with-config-file-path=/etc --enable-fpm  --enable-inline-optimization \
 --disable-debug --enable-mysqlnd --enable-static --disable-rpath --enable-shared --enable-soap  --with-xmlrpc \
 --with-openssl --with-mhash  --with-zlib \
 --enable-bcmath --with-iconv --with-bz2 --enable-calendar --with-curl \
 --with-cdb --enable-dom --enable-exif --enable-fileinfo --enable-filter --with-pear \
 --enable-opcache --enable-ftp --with-gdbm --with-openssl-dir --with-jpeg --with-zlib-dir \
 --with-freetype --enable-gd --enable-gd-jis-conv --with-gettext --with-gmp --with-mhash --enable-json --with-sqlite3\
 --enable-mbstring --enable-mbregex --enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
 --with-pdo-sqlite --with-readline --enable-session --enable-shmop --enable-simplexml --enable-sockets --enable-sysvmsg \
 --enable-sysvsem --enable-sysvshm --with-xsl --with-zip --enable-mysqlnd-compression-support --enable-intl \
 --with-config-file-path=/usr/local/php74/etc \
 PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/  (这句如果 libzip 没有报错不用复制)

注意 --with-config-file-path 指定 php.ini

或者

./configure 
--prefix=/usr/local/php74 
--disable-fileinfo 
--enable-fpm 
--with-config-file-path=/usr/local/php74/etc 
--with-config-file-scan-dir=/usr/local/php74/etc/php.d 
--with-openssl 
--with-zlib 
--with-curl 
--enable-ftp 
--with-gd 
--with-xmlrpc 
--with-jpeg-dir 
--with-png-dir 
--with-freetype-dir 
--enable-gd-native-ttf 
--enable-mbstring 
--enable-zip 
--enable-mysqlnd 
--with-mysqli=mysqlnd 
--with-pdo-mysql=mysqlnd 
--without-pear  
--enable-bcmath 
--enable-tokenizer 
--enable-libxml 
--enable-ctype 
--enable-pcntl 
--enable-cli

编译时可能会出现一些错误 configure error

1. configure: error: Package requirements (sqlite3 > 3.7.4) were not met:
处理:yum install sqlite-devel -y

2. configure: error: Please reinstall the BZip2 distribution
处理:yum install bzip2 bzip2-devel -y

3. configure: error: Package requirements (libcurl >= 7.15.5) were not met:No package 'libcurl' found
处理:yum install libcurl libcurl-devel -y

4. configure: error: GNU MP Library version 4.2 or greater required.
处理:yum install gmp-devel -y

5. configure: error: Package requirements (icu-uc >= 50.1 icu-io icu-i18n) were not met:
    No package 'icu-uc' found
    No package 'icu-io' found
    No package 'icu-i18n' found
处理:yum install libicu-devel -y

6. configure: error: Package requirements (oniguruma) were not met: No package 'oniguruma' found
处理:yum install oniguruma-devel -y

7. configure: error: Please reinstall readline - I cannot find readline.h
处理:yum install readline-devel -y

8. configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:No package 'libzip' found
处理:yum remove libzip libzip-devel
     cd /home/install/libzip1.2
     wget https://hqidi.com/big/libzip-1.2.0.tar.gz
     tar -zxvf libzip-1.2.0.tar.gz
     cd libzip-1.2.0
     ./configure
     make && make install

     #####完成后#####
     make[2]: Nothing to be done for `install-exec-am'.
     /usr/bin/mkdir -p '/usr/local/lib/pkgconfig'
     /usr/bin/install -c -m 644 libzip.pc '/usr/local/lib/pkgconfig'
     make[2]: Leaving directory `/home/install/libzip1.2/libzip-1.2.0'
     make[1]: Leaving directory `/home/install/libzip1.2/libzip-1.2.0'
     #####完成后#####

     export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
     echo $PKG_CONFIG_PATH

     #####显示#####
     /usr/local/lib/pkgconfig
     #####显示#####

4、安装

make && make install

 

配置

1、切换到 源代码目录

cd /home/install/php74/php-7.4.25

2、拷贝 php.ini文件

cp php.ini-production /usr/local/php74/etc/php.ini

3、服务管理

# 通过 service 管理
cd /home/install/php74/php-7.4.25/sapi/fpm
cp init.d.php-fpm /etc/init.d/php74-fpm
chmod 755 /etc/init.d/php74-fpm
# 配置完成之后
service php74-fpm start
# 自动开机启动
vi /etc/rc.d/rc.local
# 添加 下面一行并保存
/etc/init.d/php74-fpm start
# 然后执行加载配置
ldconfig

########################### 分割

# 通过 systemd 管理
cd /home/install/php74/php-7.4.25/sapi/fpm
cp php-fpm.service /lib/systemd/system/php74-fpm.service
vi /usr/lib/systemd/system/php74-fpm.service
# ProtectSystem=full 改成下面这个配置并保存
ProtectSystem=false
# 重载一下命令
systemctl daemon-reload
# 加入开机启动
systemctl enable php74-fpm.service
# 启动服务
systemctl start php74-fpm.service

4、配置php-fpm

cd /usr/local/php74/etc
cp php-fpm.conf.default php-fpm.conf
cd /usr/local/php74/etc/php-fpm.d
cp www.conf.default www.conf

# 如果需要修改 监听端口
vi /usr/local/php74/etc/php-fpm.d/www.conf
# listen = 1270.0.0.1:9000 改成 你想要监听的端口

5、修改php.ini时区

vi /usr/local/php74/etc/php.ini
# 修改并保存
date.timezone = "Asia/Shanghai"

 

安装其他拓展

redis 拓展

1、去官方拓展获取redis拓展地址 https://pecl.php.net/get/redis-5.3.4.tgz

2、下载解压

cd /home/install/php-redis

wget https://pecl.php.net/get/redis-5.3.4.tgz

tar zxvf redis-5.3.4.tgz

3、指定版本安装

cd /home/install/php-redis/redis-5.3.4
/usr/local/php74/bin/phpize
./configure --with-php-config=/usr/local/php74/bin/php-config
make && make install

4、修改php.ini文件

vi /usr/local/php74/etc/php.ini
# 末尾添加 redis.so 并保存
[redis]
extension=redis.so

5、重启 php

systemctl restart php74-fpm.service

gd扩展:GD扩展踩坑指南

这个坑踩到后就不建议使用源码,记得忙到最后也不知道是否弄好没,yum源不香吗!

安装依赖 libpng、libzip、zlib、freetype、libgd、libjpeg
libpng

wget http://jaist.dl.sourceforge.net/project/libpng/libpng16/1.6.31/libpng-1.6.31.tar.gz
tar -xzvf libpng-1.6.31.tar.gz
cd libpng-1.6.31
./configure --prefix=/usr/local/libpng --enable-shared
make
make install

libzip

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
make install

zlib

wget http://www.zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=/usr/local/zlib --enable-shared
make
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
make
make install

libgd

wget https://github.com/libgd/libgd/releases/download/gd-2.2.3/libgd-2.2.3.tar.gz
tar -xzvf libgd-2.2.3.tar.gz
cd libgd-2.2.3
./configure --enable-shared
make
make install
make clean
make distclean

libjpeg

wget http://www.ijg.org/files/jpegsrc.v9d.tar.gz
tar -xzvf jpegsrc.v9d.tar.gz
cd jpeg-9d
./configure --prefix=/usr/local/libjpeg --enable-shared
make
make install
进入PHP目录安装扩展
cd ~/php-7.4.x/ #源码目录
cd ext/gd/

/usr/local/php74/bin/phpize #可能会报错

./configure --enable-gd 
--with-php-config=/usr/local/php74/bin/php-config
--with-jpeg=/usr/local/libjpeg
--with-png=/usr/local/libpng #可能无效,尝试加
--with-zlib=/usr/local/zlib #同上
--with-freetype=/usr/include/freetype2/freetype #使用ldconfig -p |grep freetype或者yum list install|grep freetype,实在不行使用 find / -name freetype
--enable-gd-native-ttf #和freetype配套
make make install

 

查看某个lib库是否安装
ldconfig -p | grep pcap
/usr/local/php74/bin/phpize #可能会报错
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

#解决
yum install autoconf
查看gd库具体支持哪些图片格式和图片操作
php-info()
GD扩展最后的效果:freetype,gif,jpeg,pngwbmp等等

安装 fileinfo 扩展

1. 确认 php 版本

1

2

php -v

# PHP 7.4.4 (cli)

2. 找到 php 可执行文件的位置

1

2

whereis php

# php: /usr/local/php /usr/local/php/bin/php

可以看出 php 执行文件在 /usr/local/php/bin 目录里面

那么尝试执行 phpize,保证这个文件存在,phpize 命令在添加扩展的时候需要用到

1

2

3

4

5

/usr/local/php/bin/phpize -v

# Configuring for:

# PHP Api Version:         20190902

# Zend Module Api No:      20190902

# Zend Extension Api No:   320190902

3.进入php源码目录

我的习惯是网络下载的软件会放在 /usr/local/src 下面,

1

2

3

cd /usr/local/src/php-7.4.4

cd /etc

cd fileinfo

扩展都在源码目录的 etc 下面,里面有 curl,gd,ftp 等等扩展目录,我要安装 fileinfo,所以到 fileinfo 目录里面

4.开始安装

确定目录下面有 config.m4 文件,如果没有,应该会有 config0.m4 文件,把 config0.m4 复制一份为 config.m4,如果没有这个文件,会报错:can not found config.m4

1

2

3

/usr/local/php/bin/phpize

./configure

make && make install

如果这几行命令运行下来都没有报错,那么说明扩展文件已经生成,并且已经自动移入相应位置。接下来就是修改 php.ini,追加 extension=fileinfo.so 到 php.ini 中。

5.修改php.ini,加载扩展文件

查看 php.ini 的位置

1

2

3

php -i | grep php.ini

#Configuration File (php.ini) Path => /usr/local/php/etc

#Loaded Configuration File => /usr/local/php/etc/php.ini

可以看到 php.ini 的位置: /usr/local/php/etc/php.ini

1

2

3

4

vim /usr/local/php/etc/php.ini

#添加extension=fileinfo.so,保存

php -m | grep fileinfo

#fileinfo

看到输出 fileinfo,至此,fileinfo 扩展安装完毕!另外可以使用 pecl 命令安装,更方便快捷!

扩展安装的一般步骤

参考:https://www.php.cn/faq/456396.html 

window下

是通过php运行环境选择下载对应版本的扩展文件(.dll),下载后将dll文件放在php的ext目录下

1. 打开phpinfo 查看 nts(非线程) 还是 ts (线程),然后查看操作位数

注: 86 等于 32 位 ,和你的windows系统64 or 32位无关。比如我的:

2. 下载对应的版本的php_mongodb.dll 文件

下载链接:https://pecl.php.net/package/mongodb/1.2.9/windows

 3. 把文件解压出来 php_mongodb.dll 文件复制到php安装目录下的 ext 目录下(我的是: F:\phpStudy\php\php-7.0.12-nts\ext)

4. 打开php.ini 配置文件增加行 : extension=php_mongodb.dll

 5. 重启,再打开phpinfo() 查看是否有mongodb扩展,出现下图则安装成功

linux下安装扩展

一般会选用源码安装 php,安装 php 的过程指定要安装的扩展,但是避免不了缺少某个扩展未安装导致程序运行报错的问题。以 fileinfo 为例,介绍一下怎么添加 php 扩展。

准备

通常遇到报错:xxx function undefined,而这个函数是系统函数的话,那一定是你缺少某个扩展。添加扩展也非常简单。首选要确认当前的 php 是哪个版本,不同版本的 php 扩展会有些许出入。然后找到 Php 源码目录,也就是从网上下载下来并且解压的 php 文件包。添加扩展的时候需要在源码包里面去执行命令。

总结:

1,区分是window上的php还是linux上的php,但下载地址都是:https://pecl.php.net/package/

2,查看php的版本,不同版本可能功能有差别;

3,通过phpinfo()查看需要安装的环境:

  1. 线程安全还是非线程安全:Thread Safety的值
  2. 编译器:Compiler的值
  3. 软件位数:Architecture的值 (x86,x64)
  4. Server API的值:运行模式

4,linux下,先通过https://pecl.php.net/package/查看对应的软件版本,假设为ext-1.6.8:

1,下载
wget http://pecl.php.net/get/ext-1.6.8.tgz(使用用审查元素可以查看到扩展压缩文件的地址) 2,解压
tar -xzvf ext-1.6.8.tgz 3,进入扩展目录
cd ext-1.6.8 4,
/usr/local/php/bin/phpize 或者 phpize 5,配置
./configure --with-php-config=/usr/local/php/bin/php-config
或者
./configure --with-php-config=/usr/bin/php-config 6,编译
make && make install

5,修改php.ini配置;

  (1)windows下是extension=php_redis.dll

  (2)linux下是extension=redis.so  

6,重启服务器(php-fpm或者httpd);

 

posted @ 2022-09-29 20:04  小匡程序员  阅读(885)  评论(0编辑  收藏  举报