php-fpm 无法执行exec中的命令问题

193 阅读1分钟

因为有些浏览器不支持webp图片格式,需要将webp格式的图片转换为png。为此需要安装dwebp图片转换工具。
最开始采用源码编译安装,源码下载地址点击此处。 可能需要先安装一些依赖库:

yum install libjpeg-dev libpng-dev libtiff-dev libgif-dev
tar zxvf libwebp-1.2.0.tar.gz 
cd libwebp-1.2.0 
./configure 
make 
make install 

在命令行下可以正确执行

dwebp xxx.webp -o xxx.png 

在php cli命令行模式下也可以正确执行:

<?php
$shell = "dwebp xxx.webp -o xxx.png";
$output = array();
$return = '';
exec($shell, $output, $return);

返回的$return为0,表示没有错误,命令正常执行。

但是在php-fpm模式下,始终无法得到转换的png图片,而且$return为127,127表示无法找到命令。改成绝对路径也同样返回127

$shell = "/usr/bin/dwebp xxx.webp -o xxx.png";

而且php.ini中的safe_modes=off, disable_functions中也没有exec调用。 查阅资料提示可能需要yum安装dwebp,但是我的系统版本centos 6.5,国外yum源很多无法访问,最后将CentOS-Base.repo改为如下:

[base]
name=CentOS-6
failovermethod=priority
baseurl=https://vault.centos.org/6.5/os/x86_64/
gpgcheck=0
yum install libwebp-devel
yum install libwebp-tools

然后php-fpm中可以正常执行exec("dwebp ..."),将webp图片转为png格式。