कमांड लाइन और PHP से स्क्रिप्ट चलाने से अलग-अलग परिणाम

मैं PHP से एक बैश स्क्रिप्ट चलाने की कोशिश कर रहा हूँ। जब मैं इसे कमांड प्रॉम्प्ट से चलाता हूं - सबकुछ काम करता है, जब मैं एक ही कमांड को exec() में पास करता हूं - कुछ अप्रत्याशित होता है।

स्क्रिप्ट औसत छवि फ़ाइलों को तीसरे तर्क से पारित किया गया। पहला तर्क निर्देशिका है, दूसरा परिणाम फ़ाइल है।

बैश स्क्रिप्ट:

#!/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/पथ/से/छवि औसत.png छवि/1.png छवि/2.png "

यह ठीक काम करता है और औसत औसत छवियों को औसत करता है, लेकिन PHP का उपयोग करते समय कहा जाता है:

exec ("/ path/to/script.sh/path/to/images average.png image/1.png image/2.png")

ऐसा लगता है कि पहली उत्तीर्ण छवि के साथ औसत.png को प्रतिस्थापित करना है और यह है। मैंने इसे डीबग करने की कोशिश की और ऐसा लगता है कि यह सभी तर्कों को कम करता है।

समस्या का कारण क्या हो सकता है?

* संपादित: एफ-आयन को वास्तव में दिखने के तरीके में परिवर्तित किया गया

0
जोड़ा संपादित
विचारों: 1
@ डैगन मुझे करना पड़ सकता है, क्योंकि मुझे लगता है कि मैं उस स्क्रिप्ट को डिबग करने के विकल्पों में से बाहर चला गया हूं।
जोड़ा लेखक Varis, स्रोत
@ क्राफ्टर यह सभी तर्कों को प्रिंट करता है जैसा कि उन्हें पारित किया गया है। मुझे लगता है कि कन्वर्ट फ़ंक्शन के साथ ऐसा कुछ भी हो सकता है जो किसी भी कारण से काम नहीं कर रहा है, क्योंकि परिणाम पहली फ़ाइल के साथ बदल दिया गया है, जिसका अर्थ केवल "सीपी" काम करता है।
जोड़ा लेखक Varis, स्रोत
पारित सभी पैरामीटर मुद्रित करें: echo $ @
जोड़ा लेखक crafter, स्रोत

2 उत्तर

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
जोड़ा

जैसा कि मैंने देखा है, अपने PHP स्क्रिप्ट स्थान की जांच करें

औसत.png छवि/1.png छवि/2.png

आप सापेक्ष पथ का उपयोग कर रहे हैं, लेकिन आप इसके बजाय पूर्ण पथ का उपयोग करना चाह सकते हैं

0
जोड़ा
मैंने पथ की जांच की और सब कुछ क्रम में था। रिश्तेदार पथों का उपयोग करने के लिए स्क्रिप्ट को भी बदल दिया और यह वही काम किया। उपर्युक्त स्क्रिप्ट पूर्ण पथ का उपयोग करती है जो इसे पहले तर्क से बनाता है।
जोड़ा लेखक Varis, स्रोत