2013-11-24 2 views
0

Я пытаюсь запустить скрипт bash из PHP. Когда я запускаю его из командной строки - все работает, когда я передаю ту же команду exec() - происходит что-то неожиданное.Различные результаты запуска сценария из командной строки и php

Сценарий усредняет файлы изображений, переданные из третьего аргумента. Первый аргумент - это каталог, второй - файл результата.

Баш скрипт:

#!/bin/bash 

DIR=$1 
avg_file=$2 
i=0 
for file in "[email protected]"; 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 первым переданным изображением, и это он. Я попытался отладить его, и, похоже, он прошел все аргументы.

В чем может быть причина проблемы?

* Отредактировано: обновленный новообращенный е-ион, как это выглядит на самом деле

+0

вы могли бы сделать это с помощью PHP вместо Баш –

+0

печати все параметры, переданные: эхо $ @ – crafter

+0

@Dagon я мог бы, потому что я действительно думаю, что я бежал из вариантов здесь отладки этого сценария , – Varis

ответ

0

Так я добавил 2>&1 1> /dev/null в конце ко ert и снова запустить его с помощью php shell_exec. Он вывел, что функция convert не найдена, поэтому я добавил putenv("PATH=/usr/local/bin:/usr/bin:/bin"); перед вызовом shell_exec, и теперь он работает! Идеи отсюда: imagemagick convert does not work through php

0

Проверьте PHP местоположение сценария, как я вижу, с

average.png изображение/1.png изображение/2.png

вы используете относительный путь, но вы можете использовать полный путь вместо

+0

Я проверил путь, и все было в порядке. Изменен сценарий для использования относительных путей тоже, и он работал так же. Вышеприведенный скрипт использует абсолютные пути, которые он строит из первого аргумента. – Varis

Смежные вопросы