PHP安装fileinfo扩展

2017-02-20 · 🙈Ray · 0条 · 1733次

PHP5.3+默认是开启了fileinfo扩展的,但是我将服务器上的PHP从5.5升级到7之后,发现本网站(极客时代)的富文本编辑器无法上传图片,Post提交后返回500.无疑是升级导致的问题,而且我调试的时候发现接收文件的那行代码放在 别的方法中就OK了,调试发现有个validate()方法不能正确返回结果,执行中出现了异常,当我找到异常所在的那行,抛出异常后,发现提示:fileinfo扩展没有正确安装。这才找到了问题所在。我用phpinfo()查看了一下配置,发现了--disable-fileinfo

下面进入正题,如何安装fileinfo扩展。

如果phpinfo()输出配置后,没有--disable-fileinfo,那么可以按照如下来添加扩展:

1.进入PHP源码目录下的fileinfo文件夹。

# find / -name fileinfo (找到php源码包中的fileinfo所在目录) 
# cd /php7.*.*/ext/fileinfo (进入自己的服务器中对应的文件夹,也就是上条命令返回的目录)

2.调用phpize生成编译配置文件。

# /web/php7.*.*/bin/phpize (在php安装目录下)

3.编译扩展库

# ./configure --with-php-config=/web/php7.*.*/bin/php-config 
(--with-curl后的目录是curl的安装目录,默认安装目录是/usr/local/curl;--with-php-config后的目录是php-config所在的目录,在php的安装目录下的bin文件夹中) 
# make 
# make install (安装完成后,会显示安装在哪个目录下)

4.配置php.ini文件

PHP的配置文件php.ini在PHP安装目录下的etc目录中,通过vim修改该文件中的几行内容

# vi /web/php7.*.*/etc/php.ini

打开后找到extension_dir = "",修改为/web/php7.*.*/lib/php/extensions/no-debug-zts-****/(这个的具体内容是make install完成后显示的目录地址,也就是fileinfo.so所在的目录,如果之前安装其他扩展的时候已经配置过,就不必再配置了。如果注释掉这行,那么下面增加扩展的时候,必须使用fileinfo.so的完整目录地址)

上一步操作完成后,添加一行

extension = fileinfo.so(像上面说的,如果注释掉扩展所在目录extension_dir那行,那么这里要用curl.so所在的完整目录地址)。

5.重启服务

(1)Apache服务器

重启Apache即可。

(2)Nginx服务器

进入php-fpm所在目录,重启,具体操作命令:

# cd /web/php7.*.*/sbin # killall php-fpm 
# ./php-fpm 如果这样还不好使,尝试重新启动nginx,命令为: 
# ./nginx -s reload

如果有--disable-fileinfo,那么只能重新编译安装php了。因为我尝试了生成fileinfo.so,并且在php.ini中添加了扩展,但依然不好使。

重新编译安装PHP的操作步骤:

1.进入PHP源码目录

# cd /php7.*.* (进入自己服务器上的目录)

2.将上面phpinfo()输出的配置信息拷贝下来,将--disable-fileinfo这一项更改为--enable-fileinfo,其他保持不变,执行

# ./configure --....... --enable-fileinfo 这里省略了很多配置信息,但一定要注意最后这个不要再写错了。

3.安装

# make 
# make install

4.重启服务器

(1) Apache服务器

重启Apache即可

(2) Nginx服务器

添加Nginx对PHP的支持

进入php的安装目录下的etc目录,执行如下命令:

# cp php-fpm.conf.default ./php-fpm.conf
# cd php-fpm.d
# cp www.conf.default www.conf
确认www.conf中的user和group是否和nginx的一致,如果不一致,将www.conf中的用户和组修改为服务器(nginx)的用户和组。
# vi www.conf

进入php-fpm所在目录,重启,具体操作命令:

# cd /web/php7.*.*/sbin # killall php-fpm # ./php-fpm

重启Nginx

# ./nginx -s reloa


  1