我正在尝试从PHP运行bash脚本。当我从命令提示符运行它时 - 一切正常,当我将相同的命令传递给exec()时 - 出现意外情况。
脚本平均从第三个参数传递的图像文件。第一个参数是directory,第二个是结果文件。
bash脚本:
#!/bin/bash
DIR=$1
avg_file=$2
i=0
for file in "$@"; do
if [ $i -eq 0 ]; then
:
elif [ $i -eq 1 ]; then
:
elif [ $i -eq 2 ]; then
# If first file - just copy to result
cp ${DIR}${file} ${DIR}${avg_file}
else
# Merge current file with result
convert ${DIR}${file} ${DIR}${avg_file} -fx "(u+($i-2)*v)/$[$i-1]" ${DIR}${avg_file}
fi
i=$[$i+1]
done
使用以下命令行调用脚本时:
/path/to/script.sh /path/to/images average.png image/1.png image/2.png"
它工作正常并将图像平均为average.png,但在使用PHP调用时:
exec("/path/to/script.sh /path/to/images average.png image/1.png image/2.png")
它似乎将average.png替换为第一个传递的图像,就是这样。我试过调试它,它似乎已经通过了所有的论点。
问题可能是什么原因?
*已编辑:已更新将f-ion转换为实际外观
答案 0 :(得分:0)
检查您的PHP脚本位置,如我所见
average.png image / 1.png image / 2.png
您正在使用相对路径,但您可能希望使用完整路径
答案 1 :(得分:0)
所以我在转换调用结束时添加了2>&1 1> /dev/null
并使用php shell_exec再次运行它。它输出无法找到convert
函数,所以我在shell_exec调用之前添加了putenv("PATH=/usr/local/bin:/usr/bin:/bin");
,现在它可以工作了!来自这里的想法:imagemagick convert does not work through php