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

时间:2013-11-24 18:02:43

标签: php bash shell

我正在尝试从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转换为实际外观

2 个答案:

答案 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