繁体   English   中英

从命令行和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 image / 1.png image / 2.png

您正在使用相对路径,但您可能想使用完整路径

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM