1,今天在开发项目的时候使用了一个php函数(mb_strcut),运行代码时候提示报错"call to undefind function mb_strcut",首先检查下函数名没有写错,难道是php.ini中没有开启扩展,后来去phpinfo看了确实没有加载mb_strcut,后台得知这个扩展在官方由mbstring构建
2,去php官方pecl首页搜索竟然搜索不到,由于php安装包中带有所有的扩展,所以楼主用wget下载一个php5.6.24的源码包了,php官方下载地址http://php.net/downloads.php 进入列表选择一个你需要的php源码包,由于楼主服务器用的版本是5.6.24所以果断下载5.6.24,如果用wget下载的话,默认下载目录就会当前目录,weget命令格式狠简单:wget [url] (比如下载一个php 5.6.25的包直接这样 wget http://hk1.php.net/get/php-5.6.25.tar.bz2/from/this/mirror) 下载完毕以后会得到一个mirror文件,然后用tar -zxvf mirror 解压得到一个文件夹,进入文件夹内,找到ext,这个文件夹里面包含的是php扩展的源文件,找到你需要的扩展,楼主需要的mbstring,找到后,我们就可以使用phpize来安装了。phpize是官方提供的一个动态添加扩展的工具,详细了解可以度娘 phpize
3,首先我要确定当前系统存在phpize,并且可以使用,我们whereis phpize,可以看到搜索结果,比如楼主的是 /usr/bin/phpize,恭喜你,你可以直接使用了,每个人的目录可能所有不同,一般phpize是包含在/usr/bin下面的,确定了phpize命令执行路径后 ,我们进入需要编译安装的扩展目录,楼主就是进入mbstring ,进入目录后在当前位置输入命令 /usr/bin/phpize 命令执行完毕后,目录里面会多几个文件,有configure.. ,然后输入 ./configure --with-php-config=/usr/local/php/bin/php-config命令,注意前面是有一个点号额,如果提示错误,就说明你的php-config路径和我的不一致,可以whereis php-config,找到这个文件,然后换成正确的路径,在没有报错的情况下,我们依次执行,make 和make install 命令执行完毕后,它会提示你一个路径,这个路径里面就是我们编译的好的扩展,比如楼主的生成的扩展在 /usr/lib64/php/modules,我们进入这个目录,就可以看到刚才生成的扩展,在Linux下面扩展的后缀为 .so ,楼主的微mbstring.so ,这一步就做好了
4,这一步我们需要修改php.ini配置文件,同样用whereis php.ini 找到Php.ini文件所在的目录,一般在/etc目录下面,找到配置文件后,用vi /etc/php.ini命令或者vim /etc/php.ini命令打开这个文件,默认是普通模式,我们使用vim快捷键G快速定位到字符最底部 添加一行 extension=mbstring.so 这一行就是开启你刚才生成扩展,还有一个问题如果没有你使用的是默认位置存放扩展,请把刚才生成.so文件复制到默认文件夹中,如果你在当前配置文件中声明了 extension_dir ,就把扩展文件放到声明的文件夹中,这样才能扩展文件才能被加载到。添加完 extension = mbstring后这一步就做完了
5,最后一步需要重启服务器,重启包括2部分,因为楼主使用的是LNMP,所以需要重启的是nginx 和php-fpm,如果你使用的Lamp 那么需要重启的是apche和php-fpm,如果没有开启php-fpm就不需要重启php-fpm,开启nginx可以使用nginx自带的管理命令,同样使用whereis nginx ,找到nginx命令执行目录,楼主的是/usr/sbin/nginx,输入 /usr/sbin/nginx -s reload 后重启nginx服务,前面的路径一定要是正确的,可能你的和楼主的不一样,接下来重启php-fpm,重启php-fpm,我们先用命令 ps -aux |grep php-fpm 获取当前系统的包含php-fpm进程列表,我们需要的是加载了php-fpm.conf文件那一个进程的进程号,第二列的数字就是进程号,找到进程号后,使用kill [这里填写刚才的进程号] ,比如楼主的是31411 ,就是kill 31411 ,这样做是将php-fpm的进程停掉,然后我们whereis php-fpm 查看php-fpm执行的命令的路径,楼主的是/usr/sbin/php-fpm,执行/usr/sbin/php-fpm后就可以重新启动php-fpm,启动后去phpinfo(),可以看到我们添加的扩展已经在列表中了。至此我们给php添加扩展就已经完成了。如果安装完以后依然没有出现的话,就需要仔细排查哪一步做错了。