看了網(wǎng)上的各種教程,編譯安裝還是Perl安裝,不管哪種辦法,都是各種報錯。。。
我的環(huán)境是homestead,各種琢磨,總結一下,mmp
我的homestead下有n多個php版本
vagrant@homestead:/etc/alternatives$ ls /usr/bin/php
php php7.0 php7.2 php-config5.6 php-config7.1 phpize phpize7.0 phpize7.2
php5.6 php7.1 php-config php-config7.0 php-config7.2 phpize5.6 phpize7.1
是的,有這么多,我自己都怕
看一下當前版本,php -v
PHP 7.1.10-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Sep 29 2017 17:04:25) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.1.10-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2017, by Zend Technologies
with blackfire v1.18.0~linux-x64-non_zts71, https://blackfire.io, by SensioLabs
當前是7.1的,開始安裝swoole,直接用Perl 安裝,去他媽的編譯安裝
$ sudo pecl channel-update pecl.php.net
$ sudo pecl install swoole
安裝的時候會問你yes/no之類的選項,我全部enter下去,經(jīng)過漫長的等待。。。
Build process completed successfully
Installing '/usr/include/php/20170718/ext/swoole/config.h'
Installing '/usr/lib/php/20170718/swoole.so'
install ok: channel://pecl.php.net/swoole-4.2.1
configuration option "php_ini" is not set to php.ini location
You should add "extension=swoole.so" to php.ini
看到有success我就放心了,上面提示了,你應該添加 extension=swoole.so
到php.ini文件,php.ini文件在哪呢,用這條命令就可以了php -i|grep php.ini
vagrant@homestead:~$ php -i|grep php.ini
Configuration File (php.ini) Path => /etc/php/7.1/cli
Loaded Configuration File => /etc/php/7.1/cli/php.ini
vim編輯一下 /etc/php/7.1/cli/php.ini
,差不多在這個位置
;extension=xsl
extension=swoole.so // 加到這里哦親
;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;
然后,重啟一下php,fpm有php7.1-fpm php7.2-fpm還有其他等等,要哪個呢,php -v看下版本,就用對應的版本就可以了,我當前是7.1,就用php7.1-fpm,好了,跑起來
sudo service php7.1-fpm reload
然后,看一下效果,php -m看看有沒有
php -m |grep swoole
沒有就算了,還多了個報錯。。。
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/swoole.so' - /usr/lib/php/20160303/swoole.so: cannot open shared object file: No such file or directory in Unknown on line 0
實在是很氣,提示找不到文件,看一下這個擴展extension的路徑好像有點不對,回到剛才swoole安裝完打印的消息
Installing '/usr/include/php/20170718/ext/swoole/config.h'
Installing '/usr/lib/php/20170718/swoole.so'
20160303跟20170718,這特么明顯對不上啊,swoole怎么會安裝到哪里去了咧,看一下php extension目錄,執(zhí)行php-config或者直接php-config --extension-dir
vagrant@homestead:~$ php-config --extension-dir
/usr/lib/php/20170718
那20160303是怎么來的呢,奇了個怪,再看php -i|grep extension
vagrant@homestead:~$ php -i| grep extension
extension_dir => /usr/lib/php/20160303 => /usr/lib/php/20160303
mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.
extension Version => 2.0.2
sqlite3.extension_dir => no value => no value
原來如此,怎么這兩個extension目錄不一樣呢,看一下/usr/lib/php/目錄有哪些
vagrant@homestead:~$ ls /usr/lib/php/
20131226 20160303 5.6 7.1 php5.6-fpm-reopenlogs php7.1-fpm-reopenlogs php-helper sessionclean
20151012 20170718 7.0 7.2 php7.0-fpm-reopenlogs php7.2-fpm-reopenlogs php-maintscript-helper
我猜7.1是對應20160303,7.2是對應20170718的,那想辦法把7.1換成7.2試一下,切換php版本,參考了這位網(wǎng)友的回答
請教一下 vagrant laravel Homestead 怎么切換 PHP 版本呀?
cd /etc/alternatives
sudo mv php php.bak
sudo ln -s /usr/bin/php7.2 php
然后再看一眼版本,php -v
vagrant@homestead:~$ php -v
PHP 7.2.0RC3 (cli) (built: Sep 28 2017 16:28:14) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0-dev, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.2.0RC3, Copyright (c) 1999-2017, by Zend Technologies
with blackfire v1.18.0~linux-x64-non_zts72, https://blackfire.io, by SensioLabs
順利改過來了,并不簡單,再執(zhí)行
// 重啟一下
sudo service php7.2-fpm reload
php -m |grep swoole
還是上面的報錯。。。。這里還少了一步,再看一眼php -i|grep php.ini
vagrant@homestead:~$ php -i |grep php.ini
Configuration File (php.ini) Path => /etc/php/7.2/cli
Loaded Configuration File => /etc/php/7.2/cli/php.ini
此時的ini已經(jīng)不是彼時的ini,剛才是7.1目錄下的,現(xiàn)在切換版本變成了7.2目錄下的,vim編輯 /etc/php/7.2/cli/php.ini
把剛才的extension=swoole.so再加上去,加完了別忘了重啟
sudo service php7.2-fpm reload
重啟完了,再 php -m |grep swoole
這下子終于出來了
vagrant@homestead:~$ php -m |grep swoole
swoole
一把辛酸淚,折騰了大半天終于整出來了