Linux安装PHP

标签: 无 分类: 未分类 创建时间:2021-11-21 00:51:30 更新时间:2025-01-17 10:39:22

1.前言

~我这里在 CentOS8.0 上编译安装 PHP 8.0.13,安装路径为 /usr/local/php~ ,刚开始我确实是在CentOS8中安装等PHP8,但是后来发现,原先他们写的程序运行不了,只能降级了,降级到了PHP7.3.33,降级到7.3.33 也还是不行,只能降级到7.2.9,历史版本

我在RocyLinux9上安装,开始安装了php8,结果因为sqlserver驱动的问题,降到了 7.2.9,结果还是不行,后来我把 openssl 从 3.0降到了 1.1.1k,结果 php 无论如何都编译不通过了,只能另寻他法了,我尝试再次降级php,直接降级到了 5.6.40。

  • PHP 7.2.9
  • OpenSSL 1.1.1k
  • pdo_sqlsrv 5.8.1

2.安装依赖

1
2
3
4
5
6
7
yum install -y libxml2-devel openssl-devel libcurl-devel gd gd-devel libmcrypt libmcrypt-devel libtool sqlite-devel libicu-devel gcc-c++ glibc-headers libxslt-devel libjpeg-devel libzip-devel bzip2-devel

# Rocky Linux 9 这样安装
dnf config-manager --enable crb
dnf --enablerepo=crb install oniguruma-devel
# 早期版本
dnf --enablerepo=powertools install oniguruma-devel

缺什么依赖,就安装什么依赖

参考文章:
【1】.php 7.4 error installed
【2】.How to get epel-release / epel-release-next / powertools in CentOS Stream 9
【3】.How do I install PowerTools on Rocky Linux 9 Powertools is known as crb under RL9. dnf config-manager –enable crb

3.下载

下载文件

4.配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
## PHP 8.0配置
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc \
--with-curl --with-freetype --enable-gd --with-jpeg --with-gettext --with-kerberos --with-libdir=lib64 --with-libxml \
--with-mysqli --with-openssl --with-pdo-mysql --with-pdo-sqlite --with-pear --enable-sockets --with-mhash --with-ldap-sasl \
--with-xsl --with-zlib --with-zip -with-bz2 --with-iconv --enable-fpm --enable-pdo --enable-bcmath --enable-mbregex \
--enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem \
--enable-xml --enable-sysvsem --enable-cli --enable-opcache --enable-intl --enable-calendar --enable-static --enable-mysqlnd

## 自定义openssl
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc \
--with-curl --with-freetype --enable-gd --with-jpeg --with-gettext --with-kerberos --with-libdir=lib64 --with-libxml \
--with-mysqli --with-openssl --with-openssl-dir=/usr/local/ssl --with-pdo-mysql --with-pdo-sqlite --with-pear --enable-sockets --with-mhash --with-ldap-sasl \
--with-xsl --with-zlib --with-zip -with-bz2 --with-iconv --enable-fpm --enable-pdo --enable-bcmath --enable-mbregex \
--enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem \
--enable-xml --enable-sysvsem --enable-cli --enable-opcache --enable-intl --enable-calendar --enable-static --enable-mysqlnd

## PHP 7.2配置
./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --mandir=/usr/local/php/php/man --with-config-file-path=/usr/local/php/etc -with-libxml-dir=/usr --with-iconv-dir --with-mhash --with-openssl --with-mysqli --with-pdo-mysql --with-gd --with-iconv --with-zlib --enable-zip --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-mbregex --enable-mbstring --enable-ftp --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache --enable-fpm --without-gdbm --disable-fileinfo --with-xsl


./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --mandir=/usr/local/php/php/man --with-config-file-path=/usr/local/php/etc -with-libxml-dir=/usr --with-iconv-dir --with-mhash --with-openssl --with-openssl-dir=/usr/local/openssl --with-gd --with-iconv --with-zlib --enable-zip --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-mbregex --enable-mbstring --enable-ftp --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache --enable-fpm --without-gdbm --disable-fileinfo --with-xsl

5.安装

1
make && make install

6.生成配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
## 生成php配置文件
cp php.ini-production /usr/local/php/etc/php.ini
## 生成www配置文件
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf
## 生成php-fpm配置文件
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
## 生成php-fpm服务启动文件,从源码路径拷贝
mkdir /usr/local/php/daemon
## 根据安装的版本
cp /home/soft/php-8.0.13/sapi/fpm/init.d.php-fpm /usr/local/php/daemon/php-fpm

chmod 740 /usr/local/php/daemon/php-fpm

7.启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/usr/local/php/daemon/php-fpm start

## 查看启动
ps auxfww | grep php | grep -v grep

## 查看端口
ss -lntp | grep php

## 停止
/usr/local/php/daemon/php-fpm stop

## 配置开机自启,我暂时没有试
vi /lib/systemd/system/php.service

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/daemon/php-fpm start
ExecReload=/usr/local/php/daemon/php-fpm restart
ExecStop=/usr/local/php/daemon/php-fpm stop

[Install]
WantedBy=multi-user.target

# 开机启动
systemctl start php
systemctl stop php
systemctl enable php

8.nginx配置

1
2
3
4
5
6
7
8
9
10
11
server {
listen 8003;
root /data/web/phpweb/html;

location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

9.SQLServer驱动

因为我才用的是编译安装PHP的方法,所以pecl可能使不上力,只能靠蛮力了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
## 加入微软源
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlrelease.repo
## 卸载原有版本
yum remove unixODBC
## 安装驱动
yum install msodbcsql mssql-tools unixODBC-devel

## 下载pdo_sqlser扩展包,安装
#下载扩展包
wget http://pecl.php.net/get/pdo_sqlsrv-5.12.0.tgz
#解压扩展包
tar -zxvf pdo_sqlsrv-5.12.0.tgz
#进入解压目录
cd pdo_sqlsrv-5.12.0
#执行PHP的一个扩展命令
/usr/local/php/bin/phpize
#编译
./configure --with-php-config=/usr/local/php/bin/php-config
#安装
make && make install


## 添加pdo_sqlsrv扩展
# 修改 php.ini 文件
vi /usr/local/php/etc/php.ini
# 添加
extension=pdo_sqlsrv.so

## 下载sqlser扩展包,安装
#下载扩展包
wget http://pecl.php.net/get/sqlsrv-5.12.0.tgz
#解压扩展包
tar -zxvf sqlsrv-5.12.0.tgz
#进入解压目录
cd sqlsrv-5.12.0
#执行PHP的一个扩展命令
/usr/local/php/bin/phpize
#编译
./configure --with-php-config=/usr/local/php/bin/php-config
#安装
make && make install

## 添加sqlsrv扩展
# 修改php.ini
vim /usr/local/php/etc/php.ini
# 添加
extension=sqlsrv.so

## 重启php

一系列鬼操作,sqlserver的驱动终于是安装上了。

参考文章:
1.PHP7 安装sqlsrv、pdo_sqlsrv扩展 centos 这篇文章绝了

10.MySQL驱动

直接看下面的解决方案吧,因为mysql路径的问题,我没有重新编译成功mysql的驱动

可能我在编译的时候,没有把mysql的编译选项弄好,所以最后导致了没有mysql驱动,这是使用和安装sql server的方式类似的方法进行的,在安装编译完成了php之后,重新进行了mysql驱动配置。但是我在重新配置的时候,还是遇到了问题,就是这个 –with-pdo-mysql 参数的问题,我其实没有安装mysql的,这个时候该怎么指定mysql的路径呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
## 安装mysql驱动
yum install mysql-devel
yum install php-mysqlnd

## 下载
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
## 解压
tar zxvf PDO_MYSQL-1.0.2.tgz
## 进入目录
cd PDO_MYSQL-1.0.2
## 初始化配置
/usr/local/php/bin/phpize
## 重新编译
./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=mysqlnd

./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr

make
make install
## 编辑配置文件
vi /usr/local/php/etc/php.ini

# 找到 extentions 这一个配置段, 接着增加 pdo_mysql.so 就行了
extension = pdo_mysql.so
参考文章:
【1】.为PHP增加PDO-Mysql驱动 要mysql路径的
【2】.编译安装php时提示Cannot find MySQL header files的解决方法
【3】.php链接mysql的驱动包_php中的连接mysql驱动类
【4】.php 安装 pdo_mysql 安装pdo_mysql, –with-pdo-mysql=/usr/local/mysql, –with-mysql=/usr 这个参数
使用find命令寻找mysql客户端安装目录,这里只需要写–with-mysql=/usr
1
2
# find / -name mysql.h
/usr/include/mysql/mysql.h

【5】.CentOS安装pdo_mysql 这是找不到mysql的头文件了,需要建一个软连接,ln -s /usr/include/mysql/* /usr/local/include/
【6】.php的 mysqlnd驱动 php5.3之后支持一个叫mysqlnd的东西,是php 自带的连接mysql 的方式,更快的执行速度,更少的内存消耗。
【7】.搭建Rocky Linux8+Nginx+Php+Mysql+Redis 服务器 这里通过 dnf 的方式安装了 php。
【8】.php 之 源码包编译安装
【9】.MySQL Functions (PDO_MYSQL) ¶

【解决方案】
我虽然没有重新安装成功mysql的驱动,但是我重新编辑了php.ini文件,把其中的 mysql 相关的扩展打开了,重新启动了php,最后可以了。

1
2
extension=mysqli
extension=pdo_mysql

(1) error: can not find mysql under the “/usr/bin/mysql” that you specified
我是先安装的php,可能在编译的时候,没有找到配置文件,不知道为什么不行

11.问题

1.二级目录引发的404问题

在一个目录下放置了html文件之后,可以进行访问,但是同目录下的php无法访问。

【尝试方法】
以为是因为php使用的不是root用户,但是nginx启动的时候使用的是root用户,所以无法访问,但是我修改了php的www.conf配置,发现无法使用root启动php。

【解决方法】
这个问题,主要就是因为在Nginx中配置了二级目录,不要二级目录可以暂时解决问题,但是我因为应用程序很多的地方都使用了这个二级目录,所以暂时改不了。

参考文章:
1.nginx访问php文件404
2.Nginx+PHP php文件404错误的一个可能原因 修改50x错误页面的正确root地址,修改nginx的运行用户为www,重启nginx
3.centos 7: 使用systemctl,Root 身份运行php-fpm
4.centos nginx+php 目录下的项目访问显示404 这里使用了nginx也是不行的

2.thinkphp引发的404

我解决了二级目录引发的404问题之后,出现了简单的php没有问题,但是thinkphp文件返回404的问题。

1
<?php echo 'hello world'?>

【尝试方法】
(1) nginx设置伪静态

1
2
3
4
5
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}

(2) runtime目录设置读写权限

1
chmod 777 -R runtime

不起作用

(3) 开启调试模式
在 application/config.php中的app_debug配置参数,改为ture,就能在页面中看到剧透的错误了,而不是直接404错误。

1
2
// 关闭调试模式
'app_debug' => false,
参考文章:
1.Thinkphp nginx 下 404 问题排查及解决 这里是说没有权限
2.thinkphp部署服务器后出现404错误 这提到了一个伪静态的问题,还有一个就是写权限的问题
3.7)调试模式

3.模块不存在

但我开启了 debug 模式之后,看到的错误消息,就是模版不存在

【尝试方法】
(1) 修改 application/config.php 文件

1
2
## 指向自己的模块名
'default_module' => 'Services'

(2) 修改了模块名的大小写
本来我 application 文件夹下有一个Services文件(这在windows上是可行的),我把它改了小写。

虽然模块不存在的问题,没有了,但是又出现了新的问题,也就是说这个问题还是没有解决

参考文章:
1.TP5自动生成目录报错-模块不存在:index 一直照着这个做,但是还是不行,说是没有自动生成的模版
2.服务器tp框架报错index.php 模块不存在问题
3.thinkphp5.1提示模块不存在:index 这里说是把目录名改成小写,
4.TP5 控制器命名大小写问题

4.ReflectionParameter::getClass() is deprecated

这个问题是PHP 8.0导致的,我才想起来,原先人家写的php是在7.x下运行的,没办法,我只能回去了。

5.致命错误: Class ‘app\Common\Controller\BaseController’ not found

这个错误,在windows上是没有问题的,但是到了CentOS8上,就是一个大问题,我看了看,其实是有 /cloud/master/PhServer/DingDing/application/Common/controller/BaseController,只不过其中的controller变成了小写罢了,这个问题真是难透了。

【解决方法】
临时解决方法,就是把相关的大些路径改为小写路径,这就是编码不规范导致的问题啊。真是接手别人的程序就是不行啊。

6.php 7.4 Array and string offset access syntax with curly braces is deprecated

还是版本的问题,原先的版本是 PHP 7.2.9,现在我安装的是PHP 7.4.3,看来还是要降啊。

找不到7.2.9,先是找了一个7.3.33版本,尝试一下吧。这要注意到是配置的编写: configure: WARNING: unrecognized options: –with-freetype, –enable-gd, –with-jpeg, –with-libxml, –with-zip,也就是说PHP8.0的.\configuration配置,不适合7.3.33了。

7.PDOException “could not find driver”

我要连接sql server数据库

(1) 安装pecl

1
yum install php-pear    

(2) 使用pecl安装
因为我的版本是7.3.33,不能用sqlsrv-5.9.0,只能降级

1
2
3
4
5
6
7
pecl install sqlsrv-5.8.0

pecl config-set php_ini /usr/local/php/etc/php.ini
pecl config-set ext_dir /usr/local/php
pecl config-set php_dir /usr/local/php
pecl config-set php_bin /usr/local/php/bin

不起作用


【尝试操作】
下载包特别特别的慢,不知道为什么
(1) 手动下载 sqlserver的两个包,并进行解压

(2) 执行phpize

1
/usr/local/php/bin/phpize

结果

1
2
3
PHP Api Version:         20180731
Zend Module Api No: 20180731
Zend Extension Api No: 320180731

(3) 重新配置

1
./configure --with-php-config=/usr/local/php/bin/php-config

(4) 安装

1
make && make install
参考文章:
1.Linux下手动编译安装PHP扩展的例子分享 这里就是手动下载安装PDO_MYSQL的例子
2.当使用phpize的时候出现Can’t find PHP headers in /usr/include/php The php-devel package is required for use o 关于安装 PHP 扩展,以前总以为要重新编译 PHP,今天查阅大量资料发现原来可以像apache模块一样动态扩展。今天就以 oci8 举例。

【尝试方法】

1
2
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlrelease.repo

9.SQLSTATE[08001]

当我解决了上面的问题之后,进行程序运行,出现了这个问题:[Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol]

注意
因为我不断的重新安装openssl,不断的重复,修改连接,导致了我的 openssl 损坏了,系统多个库无法使用,我只能是重新安装了系统。所以轻易不要尝试修改系统依赖软件 openssl,否则后果很严重。

【尝试方案】
(1) 我尝试了密钥使用 SHA1 进行签名,结果无效

1
2
3
4
update-crypto-policies --set LEGACY

## 后来远程登录不上了我只能重新设置了
update-crypto-policies --set default

(2) 尝试查看 openssl 版本

1
2
3
4
# 查看 openssl 版本,结果报错了,我就把 /etc/pki/tls/openssl.cnf 删除了
openssl version
# 删除错误的配置,然后再次运行 openssl ,就会生成一个新的。
rm -rf /etc/pki/tls/openssl.cnf

(3) 替换文件

1
cp /etc/ssl/openssl.cnf /etc/ssl/openssl-bak.cnf

(4)编辑 openssl.conf
编写 /etc/ssl/openssl.conf 文件,增加如下内容,不知道为什么,我新装的CentOS8.0没有这个文件,但是我没有这个文件,只有 /etc/pki/tls 里面有一个 openssl.cnf文件,于是我修改了这个温文件,注释掉了这个,openssl_conf = default_modules,然后添加了新的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vi /etc/pki/tls/openssl.cnf
## openssl_conf = default_modules

## 新添加的内容
openssl_conf = default_conf

# 文件底部
[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1
CipherString = DEFAULT@SECLEVEL=1

[openssl_init]
providers = provider_sect

不知道为什么,以前我可以用这个解决,但是现在好像不行了,用了RockyLinux安装的。

(5)安装openssl1.0.2u
因为卸载是卸载不了的,只能是 高版本和低版本共存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# #查找当前安装的OpenSSL版本
# rpm -qa|grep ssl
# #指定对应版本进行卸载
# yum -y remove openssl-3.0.7-28.el9_4.x86_64


#可以去该地址下载自己想要的版本的OpenSSl
https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz

#解压
tar -zxvf openssl-1.0.2u.tar.gz
#进入目录
cd openssl-1.0.2u/
#编译安装
./config --prefix=/usr/local/ssl
make && make install

# 备份
mv /usr/bin/openssl /usr/bin/openssl-bak
mv /usr/include/openssl /usr/include/openss-bak

#修改软连接
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
#查看版本
openssl version -a

(6) 安装openssl-1.1.1k

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 安装依赖
dnf install perl
# 0.下载,解压
https://www.openssl.org/source/openssl-1.1.1k.tar.gz
tar -zxvf openssl-1.1.1k.tar.gz

# 1.备份
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak

# 2.编译,安装
cd openssl-1.1.1k
./config --prefix=/usr/local/openssl
make && make install

# 3.链接
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -sf /usr/local/openssl/include/openssl /usr/include/openssl


echo “/usr/local/openssl/lib” >> /etc/ld.so.conf
ldconfig -v

ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

# 4.检查
openssl version

(6) 安装openssl openssl-3.0.7
安装版本 openssl-3.0.7 (RockyLinux默认是3.0.7) 和安装前面的基本一样,不同的就是增加了 下面的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
tar -zxvf openssl-3.0.7.tar.gz
# 版本3
echo “/usr/local/openssl/lib64” >> /etc/ld.so.conf
# 原先指向的是 ls -L
ln -s /usr/local/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3
# 原先指向的是 libcrypto.so.3.0.7
ln -sf /usr/local/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3

# 替换之后,我的 ssh 立马就端开了,但是还是没有解决问题, /lib64/libcrypto.so.3: version `OPENSSL_3.0.1' not found (required by /lib64/libssl.so.3)
cp /cloud/soft/openssl-3.0.0/libcrypto.so.3 /usr/lib/libcrypto.so.3
# 还是有问题
openssl version
# 解决方案
export LD_LIBRARY_PATH=/usr/local/openssl/lib64
# 取消设置
unset LD_LIBRARY_PATH

# 或者
echo "export LD_LIBRARY_PATH=/usr/local/openssl/lib64" >> ~/.bashrc
source ~/.bashrc

(7) 重新安装之后,结果还是报错了, undefined symbol: EVP_md2, version OPENSSL_3.0.0
这个问题我已经决定要放弃了,真是太浪费时间了,算了,也没有钱,反正系统也能正常的运行,就先这个样子吧。

参考文章:
【1】.SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol]
【2】. SSL routines:ssl_choose_client_version:unsupported protocol#1023
【3】.linux 下连接 sql server 数据库遇到了错误:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol 这里也是编辑了openssl.cnf文件
【4】.linux 使用openssl报找不到/usr/lib/ssl/openssl.cnf的解决办法
【5】.SQLSTATE[08001]: [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:0A000102:SSL routines::unsupported protocol] 这里也是在 Linux 上openssl.cnf通常是,/etc/ssl,在顶部openssl.cnf添加,底部添加
【6】.Rocky Linux 9 laravel 10(PHP8.3)连接SQL Server 数据库解决openssl 3.0.11 问题无法连接 执行下面命令,密钥使用 SHA1 进行签名
update-crypto-policies –set LEGACY
【7】.6.2. 更改系统范围的加密策略 update-crypto-policies –show
【8】.Getting docker-compose TypeError: kwargs_from_env() got an unexpected keyword argument ‘ssl_version’ in GitLab
【9】.PHP连接SQLSERVER出现SSL certificate报错 这里从代码的层面修改了问题。区别就是,18的encrypt默认配置改为1了,而17默认配置为0,所以在连接的时候,需要手动设置连接参数,这样就不会出现:SSL routines:tls_process_server_certificate:certificate verify failed:self signed certificate。这样的报错了。
【10】.Error: TCP Provider: Error code 0x2746. During the Sql setup in linux through terminal 1.查看 openssl version。2.配置openssl。3.降级 openssl。4.downgrade Microsoft ODBC Driver 18 to 17。
【11】.Openssl install broken after dist upgrade
【12】.卸载安装替换为指定版本OpenSSL 这里卸载了 openssl-1.1.1g,安装了 1.0.2 版本
【13】.在CentOS7.9上 编译安装openssl-3.3.1+编译安装Nginx1.26.2 我们应该遵循的第一个原则就是:让新的openssl版本和老的openssl版本共存。我们应该采取以下策略来实现:1.使用独立的安装目录。2.修改应用程序的路径。3.使用符号链接。4.编译时指定 OpenSSL 路径。
【14】.openssl版本升级与降级 1.1.1升级3.1.1;3.1.1降级 1.1.1。
【15】.centos7 yum 安装 openssl 1.1.1k 最后一步 ln 建立符号链接 是为了让 python3.10 在 configure 时能找到 openssl 1.1.1
【16】.CentOS7.9下升级OpenSSL到OpenSSL 1.1.1k
【17】.Rocky Linux 安装 OpenSSL 1.1.1 ,Rocky Linux 9.1自带的Open SSL是3.0.7版本(如下图),但是有些程序依然依赖Open SSL 1.1.x版本,这就要求我们需要掌握在同一个主机下同时安装两个不同版本的OpenSSL方法。
【18】.OpenSSL 1.1.i and “Can’t locate FindBin.pm in @INC” 这里有讨论的出现问题:Can’t locate FindBin.pm,就是安装 perl。dnf install perl
【19】.[执行“openssl version“报openssl: /usr/lib/libcrypto.so.3: version `OPENSSL_3.1.0‘ not found (required by](https://blog.csdn.net/qq_41765969/article/details/127565952) 执行“sudo cp /home/zyf/sourceOpen/openssl/libcrypto.so.3 /usr/lib/libcrypto.so.3”之后,
【20】./lib64/libldap.so.2: undefined symbol: EVP_md2, version OPENSSL_3.0.0 after upgrading from F35 to F37 export LD_LIBRARY_PATH=/opt/openssl-1.1.1d/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
【21】.Compiling Openssl 3.0.8 on Rocky Linux 9 这里给我说的问题一样,“我需要运行一个需要这个新版本的应用程序”:在这种情况下,我建议编译新版本,但不要安装它(并破坏系统)。相反,将新的库文件收集到某处的本地文件夹中,并使用导出 LD_LIBRARY_PATH 环境变量使您的应用程序使用该文件夹作为库。或者,研究 docker/podman 并可能在隔离的容器中运行您的应用程序。
【22】.Rocky Linux 9 & RedHat 系 OpenSSH CVE-2024-6387 漏洞快速修复

10.windows和linux下的大小写问题,导致无法运行的问题

因为我拿到的是别人写的php程序,在windows上运行的好好的,我要移植到linux上,我遇到了这样的问题

定义了名字空间,对应于磁盘上的 application\Common\controller 文件夹

1
2
3
4
5
6
<?php
// 定义
namespace app\Common\Controller;

// 使用
use app\Common\Controller\BaseController;

这样写,在windows上运行没有问题,但是到了linux上,就会出现严重错误,导致程序找不到模块,无法运行,必须改为和磁盘上的大小写一致,改成 Common\controller 才可以。这个我真的非常的蛋疼,要改很多的东西,最后至于原因是什么,我暂时还没有深究,是在是忙不过来了。我已经通宵改了这些代码了。

11.count(): Parameter must be an array or an object that implements Countable

这个也是版本的问题吗?我真是醉了,我降级到了原先代码所在的php版本,还是不行,7.2.9。

【解决方法】
直接修改代码好了

1
2
3
4
// 源代码
count($variable)
// 改为
count(array($variable));

12.undefined symbol: zval_ptr_dtor

这是在PHP7.2.29编译的时候使用的sqlsrv5.8.1时出现的问题,我已经重新编译安装了多次了,还是无法启动这个扩展,我以为是编译参数的问题, 我专门找了一个 PHP 7.2 的编译参数,也还是不行。

【解决方法】
最后是将sqlsrv 和 pdo_sqlsrv 也降级到了 5.8.0

13.configure: error: Cannot find ldap.h

如何配置的时候增加了:–with-ldap=shared –with-ldap-sasl 参数,则可能需要安装ldap这个插件。

1
2
## 安装openldap
yum install openldap openldap-devel -y
参考文章:
1.configure: error: Cannot find ldap.h 两个问题,一并解决了

14.Package ‘krb5-gssapi’, required by ‘virtual:world’, not found

编译安装的时候,出现了这个问题:Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix.

【尝试解决】
(1) 安装 cmake3,没有效果。

1
yum install cmake3; 

(2) 安装 gssapi,没有这个 libkrb5-dev 模块,gassapi 也安装失败。

1
2
3
yum install libkrb5-dev

pip3 install gassapi

【解决方案】
安装 krb5 模块

1
yum install krb5-workstation krb5-devel krb5-libs mod_auth_gssapi
参考文章:
【1】.PHP 7.4 installation error
【2】.How to install GSSAPI Python module? pip install gssapi
【3】.CentOS 7 GSSAPI module 安装了 krb5 模块

15.Package ‘libzip’, required by ‘virtual:world’, not found

编译 php8.3 的时候,出现了这个问题。

【解决方案】

1
yum install libzip libzip-devel

16.undefined reference to `EVP_PKEY_size’

Rocky Linux 9.0 编译 8.3.13 的时候,出现了问题,[Makefile:308: sapi/cli/php] Error 1,上面的一条错误是:undefined reference to `EVP_PKEY_size’

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/cloud/soft/php-8.3.13/ext/openssl/xp_ssl.c:460: undefined reference to `sk_num'
/usr/bin/ld: /cloud/soft/php-8.3.13/ext/openssl/xp_ssl.c:476: undefined reference to `sk_value'
/usr/bin/ld: /cloud/soft/php-8.3.13/ext/openssl/xp_ssl.c:518: undefined reference to `sk_pop_free'
/usr/bin/ld: /cloud/soft/php-8.3.13/ext/openssl/xp_ssl.c:527: undefined reference to `sk_pop_free'
/usr/bin/ld: /cloud/soft/php-8.3.13/ext/openssl/xp_ssl.c:494: undefined reference to `sk_pop_free'
/usr/bin/ld: ext/phar/util.o: in function `phar_verify_signature':
/cloud/soft/php-8.3.13/ext/phar/util.c:1587: undefined reference to `EVP_MD_CTX_create'
/usr/bin/ld: /cloud/soft/php-8.3.13/ext/phar/util.c:1622: undefined reference to `EVP_MD_CTX_destroy'
/usr/bin/ld: /cloud/soft/php-8.3.13/ext/phar/util.c:1632: undefined reference to `EVP_MD_CTX_destroy'
/usr/bin/ld: /cloud/soft/php-8.3.13/ext/phar/util.c:1590: undefined reference to `EVP_MD_CTX_destroy'
/usr/bin/ld: ext/phar/util.o: in function `phar_create_signature':
/cloud/soft/php-8.3.13/ext/phar/util.c:1892: undefined reference to `EVP_MD_CTX_create'
/usr/bin/ld: /cloud/soft/php-8.3.13/ext/phar/util.c:1901: undefined reference to `EVP_PKEY_size'
/usr/bin/ld: /cloud/soft/php-8.3.13/ext/phar/util.c:1935: undefined reference to `EVP_MD_CTX_destroy'
/usr/bin/ld: ext/mysqlnd/mysqlnd_auth.o: in function `mysqlnd_caching_sha2_public_encrypt':
/cloud/soft/php-8.3.13/ext/mysqlnd/mysqlnd_auth.c:1012: undefined reference to `EVP_PKEY_size'
/usr/bin/ld: ext/mysqlnd/mysqlnd_auth.o: in function `mysqlnd_sha256_public_encrypt':
/cloud/soft/php-8.3.13/ext/mysqlnd/mysqlnd_auth.c:705: undefined reference to `EVP_PKEY_size'
collect2: error: ld returned 1 exit status
make: *** [Makefile:308: sapi/cli/php] Error 1

【问题说明】
这个问题主要是因为我重新从 openssl 3.0.8 降级到了 openssl 1.0.2,重新编译了 php 8.3.13,出现了这个问题,我准备把 php 降低到 7.2.x 版本。

【解决方案】
最后我也没有解决这个问题,因为我不断的重新安装openssl,不断的重复,修改连接,导致了我的 openssl 损坏了,系统多个库无法使用,我只能是重新安装了系统。

参考文章:
【1】.Make编译安装php出现collect2: ld returned 1 exit status make: *** [sapi/cli/php] Error 1的解决方法 「undefined reference to libiconv_open’」之类的错误信息
【2】.安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法 编辑Makefile 大约77 行左右的地方: EXTRA_LIBS = ….. -lcrypt 在最后加上 -liconv,例如: EXTRA_LIBS = ….. -lcrypt -liconv 然后重新再次 make 即可。
【3】.undefined symbol: EVP_PKEY_sign
【4】.强烈建议使用维护的 OpenSSL 版本,否则 web 服务器很容易受到攻击。
【5】.Build failed on RHEL9 with OpenSSL 3
【6】.使用 phpipze 编译扩展报错的解决方法 这里遇到的问题和我的一模一样,我尝试了先去掉 –with-openssl,安装完成。安装完成后,我再通过 phpize 编译时,一切正常,当在 php.ini 文件中加上 openssl.so 时,就会报错,这个问题未能解决,如果你知道的话,不妨请赐教,谢谢!
【7】. 编译安装 PHP 7.0.3 亲测全攻略 & 以及如何单独的安装某个模块 需要进行操作make clean清除之前编译安装的中间文件
【8】.自己从源码编译一个新的openssl 编译php_openssl,链接新的openssl
【9】.[openssl编程编译错误undefined reference to `SSL_get1_peer_certificate‘解决方法](https://blog.csdn.net/sinat_41928334/article/details/124796389)
【10】.[SOLVED] Slackware 14.1 - OpenSSL-1.1.1 我找到了解决方案。旧的 evp.h 不包含这些函数,但新的包含。使用新版本的 openssl(截至目前为 3.3,是来自 git 的最新版本)构建二进制文件的临时解决方案是将整个 /include/openssl/* 复制到 /usr/include/openssl 但不是在创建之前复制整个原始目录的备份,以防其他内容损坏。或者在构建您想要的任何内容后,只需将原始文件夹复制回来即可。这样你就可以使用最新的 openssl 来构建你拥有的任何软件,但实际上不会破坏任何东西

17.ImportError: /lib64/libldap.so.2: undefined symbol: EVP_md2, version OPENSSL_3.0.0

一直弄 openssl ,结果导致系统的 openssl 不能用了。

【尝试方案】
(1)我从 3.0.0 安装到 3.0.14,后来又降到 3.0.7,结果还是一样的错误。
(2)重启系统,结果也还是有问题。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。