从命令行和php运行脚本会产生不同的结果


Different results from running a script from command line and php

我正在尝试从PHP运行bash脚本。当我在命令提示符下运行它时,一切都正常,当我将相同的命令传递给exec()时,会发生一些意想不到的事情。

脚本对从第三个参数传递的图像文件进行平均。第一个参数是目录,第二个参数是结果文件。

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转换为的实际外观

检查你的PHP脚本位置,就像我在中看到的那样

average.png图像/1.png图像/2.png

您使用的是相对路径,但可能希望使用完整路径,而不是

因此,我在convert调用的末尾添加了2>&1 1> /dev/null,并使用php-shell_exec再次运行它。结果是找不到convert函数,所以我在shell_exec调用之前添加了putenv("PATH=/usr/local/bin:/usr/bin:/bin");,现在它可以工作了!这里的想法:imagemagik转换不能通过php工作