Centos 7(Linux)環境下安裝PHP(編譯添加)相應動態擴展模塊so(以openssl.so為例)
https://blog.csdn.net/shinesun001/article/details/54312402
在centos 7環境下搭建好Lnmp環境之後,發現安裝的php有好多擴展都沒有安裝,自己安裝了一下遇到好多問題,在網上查找資料也沒有一個全面的解決問題的辦法,總是遇到各種錯誤。最終通過各種問題處理和各種探索,安裝成功so擴展。現就以openssl.so擴展安裝為例,來闡述一下php擴展的安裝,步驟如下:
首先在安裝擴展之前說明一點:在Linux環境下的php的擴展後綴為“.so”,在Windows環境下的php的擴展名為“.dll”。
接下來就講一下安裝擴展步驟:
1、首先確定Linux下已安裝的PHP版本,因為不同PHP版本對於追加動態模塊有兼容性問題(可能路徑,配置?其他?),往往報錯不能安裝,追加的模塊必須版本一致。
查看PHP版本有多種方法:
①運行php -v(但在我的64位Linux測試過沒作用,原因你知道的了!)
②在已安裝好的PHP路徑下找到php-config並進行查看,可以vi或cat (關鍵字:version="XXXXXXX"為PHP版本號)
vim php-config
或者
cat php-config
在centos 7環境下可以使用:php --version 命令來查看php的版本
2、到http://php.net/downloads.php (相應PHP版本下載)地址下下載php相應的安裝包,或者可以通過Linux命令下載(參考我的上一篇文章:在CentOS 7系統上搭建LNMP 環境 中php的安裝);如果之前安裝過,安裝包存在的話,則不必下載;
3、如果是本地下載則將通過ftp工具將php源碼包上傳到你的Linux環境下,上傳成功後通過命令進行解壓:
解壓命令如下:
tar -jxvf php-5.6.7.tar.bz2 (源代碼tar包)
4、接下來就到了openssl.so模塊安裝的時候了,進入剛剛解壓過的php源碼包文件夾後,執行configure進行模塊追加,一下是命令部分(我的php源碼文件包在/root/source下面,解壓過後的源碼包為php-5.6.7):
[root@localhost source]# cd ./php-5.6.7/ext/openssl #進入源碼包的OPENSSL模塊文件夾
[root@localhost openssl]# /usr/local/bin/phpize #在這裏執行/usr/local/bin/phpize,註意這是已經安裝好的php路徑(提示:如果找不到/usr/local/bin/phpize,則使用命令whereis phpize來進行查找它的位置,我的phpize路徑是/usr/local/bin/phpize)
/usr/local/bin/phpize 命令執行過後可能會報一個錯誤:Cannot find config.m4.Make sure that you run ‘/usr/local/bin/phpize‘ in the top
level source directory of the module.
解決辦法:
查看PHP源碼包openssl文件夾下是否有config0.m4,如果有,執行命令:
[root@localhost openssl]# mv config0.m4 config.m4
執行完成之後,再次執行/usr/local/bin/phpize命令,得到以下結果:
會報一個:Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script. 的錯誤;
解決辦法:
[root@localhost ~]# yum install m4
[root@localhost ~]# yum install autoconf
接下來再次執行:/usr/local/bin/phpize 出現如下結果表示執行成功:
5、接下來就到了編譯的階段了,編譯過程使用如下命令進行:
[root@localhost openssl]# ./configure --with-openssl --with-php-config=/usr/local/bin/php-config
註意:這裏的/usr/local/bin/php-config是你的php安裝路徑,不知道的話,可以通過phpinfo來查看:
不出意外的話,這條命令執行完成之後會報一個configure: error: Cannot find OpenSSL‘s <evp.h> 的錯誤,在執行完成的結尾:
解決辦法:
[root@localhost ~]# yum install openssl openssl-devel
[root@localhost ~]# ln -s /usr/lib64/libssl.so /usr/lib/
再次執行:
[root@localhost openssl]# ./configure --with-openssl --with-php-config=/usr/local/bin/php-config
成功結果如下,會在結尾生成一個config.h文件:
接下來繼續執行命令:
[root@localhost openssl]# make#執行編譯
[root@localhost openssl]# make test #測試編譯的結果
執行完make test 命令後會出現如下結果,這是問你是否想要發送一個報告,我在這裏直接選n(n就是no的意思)
再接著執行:
[root@localhost openssl]# make install #進行安裝
出現如下結果表示安裝成功:
記住這裏的這個路徑,這個路徑就是“.so”文件的存放路徑,後面要使用。
小提示:
一般規範點的話,會把追加的SO模塊放在一個指定的文件夾裏,就在PHP安裝好的目錄下的extensions文件夾內
#mv /*****/*****/openssl.so /var/www/php/lib/php/extensions
至此,so動態模塊追加編譯已全部完成了。
6、接下來就是進行配置了,讓php支持加載這些追加的動態模塊,vim編輯下php的配置文件php.ini
使用vim打開php配置文件php.ini
進入編輯器後可以看到php的所有相關配置,查找extension_dir這個配置選項;
vi後可直接‘/extension_dir '查找,找到後可能是這樣的:
extension_dir="./"
將其修改成:
extension_dir="/usr/local/lib/php/extensions/no-debug-non-zts-20131226/"
註意:這裏的/usr/local/lib/php/extensions/no-debug-non-zts-20131226/就是剛才執行make install成功時返回的路徑,
也就是so文件的所在。
添加:
extension=openssl.so(so模塊文件名)
最後執行:
":wq!"
命令保存退出
接下來重啟nginx和php服務
[root@localhost ~]# nginx -s reload
[root@localhost ~]# servive php-fpm restart
到這裏安裝openssl擴展模塊就已經完成了!如果在安裝過程中遇到什麽問題,可以及時和我交流!
到此Centos 7(Linux)環境下安裝PHP(編譯添加)相應動態擴展模塊so就完成了。
(不知道為啥,圖片上傳了兩次都不能顯示,就第三次上傳,如果還是不能顯示那也沒辦法,就只能這樣了!)
Centos 7(Linux)環境下安裝PHP(編譯添加)相應動態擴展模塊so(以openssl.so為例)