Différents résultats de l'exécution d'un script à partir de la ligne de commande et php

J'essaie d'exécuter un script bash depuis PHP. Quand je l'exécute à partir d'une invite de commande - tout fonctionne, quand je passe la même commande à exec() - quelque chose d'inattendu se produit.

Le script fait la moyenne des fichiers d'image transmis à partir du troisième argument. Le premier argument est directory, le second est le fichier résultat.

Le script bash:

#!/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

Lors de l'appel du script en utilisant la ligne de commande avec:

/chemin/vers/script.sh/chemin/vers/ images moyenne.png image/1.png image/2.png "

cela fonctionne bien et fait la moyenne des images à average.png, mais quand on l'appelle en utilisant PHP:

exec ("/ chemin/vers/script.sh/chemin/vers/images moyenne.png image/1.png image/2.png")

il semble remplacer average.png avec la première image passée et c'est tout. J'ai essayé de le déboguer et il semble aller à travers tous les arguments.

Quelle pourrait être la cause du problème?

* Édité: mis à jour convertir f-ion à quoi il ressemble réellement

0
@Dagon je devrais le faire, parce que je pense vraiment que je n'ai plus d'options ici pour déboguer ce script.
ajouté l'auteur Varis, source
@crafter imprime tous les arguments tels qu'ils ont été passés. Je pense que cela pourrait être quelque chose avec la fonction de conversion ne fonctionne pas pour une raison quelconque, parce que le résultat est remplacé par le premier fichier, ce qui signifie que "cp" fonctionne.
ajouté l'auteur Varis, source
Imprime tous les paramètres passés: echo $ @
ajouté l'auteur crafter, source

2 Réponses

So I've added 2>&1 1> /dev/null at the end of the convert call and ran it again with PHP shell_exec. It outputted that the convert function could not be found, so I've added putenv("PATH=/usr/local/bin:/usr/bin:/bin"); before the shell_exec call and now it works! Ideas from here: imagemagick convert does not work through php

0
ajouté

average.png image/1.png image/2.png

Vous utilisez un chemin relatif, mais vous pouvez utiliser le chemin d'accès complet à la place

0
ajouté
J'ai vérifié le chemin et tout était en ordre. Changé le script pour utiliser des chemins relatifs aussi et cela a fonctionné de la même manière. Le script ci-dessus utilise des chemins absolus qu'il construit à partir du premier argument.
ajouté l'auteur Varis, source