2011-08-23 18 views
15

मैं शेर पर Homebrew का उपयोग कर ImageMagick स्थापित है, सब कुछ ठीक है, सिवाय इसके कि यह बिल्कुल जब php से बुलाया जा रहा है काम नहीं करता। कंसोल:हल: MAMP Php Homebrew ImageMagick के बाद exec नहीं कर सकते हैं ('कन्वर्ट') स्थापित

$ convert -version 
Version: ImageMagick 6.7.1-1 2011-07-29 Q16 http://www.imagemagick.org 
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC 
Features: OpenMP 

$ which convert 
/usr/local/bin/convert 

पीएचपी:

echo exec ('convert -version'); 

या कार्यकारी ('-संस्करण कन्वर्ट', $ उत्पादन); var_dump ($ आउटपुट);

कुछ भी नहीं (या एक खाली सरणी) उत्पन्न करता है।

exec ('/usr/local/bin/convert') // works, but 
exec ('which convert') // doesn't 

मुझे यह सुनिश्चित करने के लिए स्थानीय रूप से परीक्षण करने की आवश्यकता है कि मैं उत्पादन वातावरण में रूपांतरित कर सकूं। लेकिन मैं इसका सही परीक्षण नहीं कर सकता। पाथ सेट है और यह टर्मिनल में काम करता है, लेकिन PHP से नहीं।

हल:

बाहर कर देता है, php के लिए convert काम करने के लिए /usr/bin/ में होना चाहिए तो यह इसे हल:

ln -s /usr/local/bin/convert /usr/bin/convert 

अद्यतन

यह MAMP की वजह से किया गया था, यहाँ http://firedevcom.tumblr.com/post/22791937644/fix-for-homebrew-imagemagick-and-mamp

: ठीक है

खुला/अनुप्रयोग/MAMP/पुस्तकालय/bin/envvars

और बाहर टिप्पणी निम्नलिखित लाइनों:

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 
export DYLD_LIBRARY_PATH 

हो गया।

+1

PHP के पथ में कनवर्ट किया गया है? आपको exec() कॉल में '/ absolute/path/to/convert' निर्दिष्ट करना पड़ सकता है। याद रखें कि PHP exec() कॉल में वातावरण शेल प्रॉम्प्ट पर आपको जो मिलता है उससे काफी भिन्न हो सकता है। –

+0

हम्म यह बात है - सबकुछ उत्पादन सर्वर पर काम करता है, सिर्फ होमब्रू के साथ नहीं। मैंने सोचा कि पथ को निष्पादित सैंडबॉक्स में विरासत में मिलाया जाना चाहिए, नहीं? – firedev

+1

php का खोल वातावरण उपयोगकर्ता खोल वातावरण से बिल्कुल अलग है। आप सीधे उनकी तुलना नहीं कर सकते हैं। 'exec (' echo $ pATH ') करने का प्रयास करें;' यह देखने के लिए कि खोल क्या चल रहा है। PHP अपाचे पर्यावरण का उत्तराधिकारी होगा। –

उत्तर

6

यहाँ अपने खुद के जवाब जोड़ना ताकि आप मतदान कर सकते हैं: http://firedevcom.tumblr.com/post/22791937644/fix-for-homebrew-imagemagick-and-mamp

ओपन /Applications/MAMP/Library/bin/envvars

और बाहर टिप्पणी निम्नलिखित लाइनों:

यह MAMP की वजह से किया गया था, यहाँ ठीक है

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 
export DYLD_LIBRARY_PATH 

हो गया।

+0

धन्यवाद, यह काम करता है !!!! – keithics

+0

XAMPP, पथ:/अनुप्रयोग/एक्सएएमपीपी/xamppfiles/bin/envvars –

1

सत्यापित करें कि में परिवर्तित सर्वर का पथ वातावरण चर रहा है। या सिर्फ पूर्ण पथ निर्दिष्ट करें:

exec('/usr/local/bin/convert -version'); 
+0

यह कंसोल में पैथ में है, लेकिन php के exec में नहीं, हालांकि उत्पादन सर्वर पर सब ठीक काम करने लगते हैं। और मुझे स्वचालित रूप से imagemagick का पता लगाने में सक्षम होना चाहिए। यह लिनक्स पर काम करता है, लेकिन होमब्रू के साथ नहीं। – firedev

1

exec आदेश जो खाली स्ट्रिंग के लिए होता का परिणाम से अंतिम पंक्ति देता है। आप उत्पादन प्राप्त करना चाहते हैं, बस कुछ इस तरह करते हैं:

exec('convert -version', $output); 
var_dump($output); // it is an array which filled with every line of output from the command 
+1

'exec ('convert -version 2> & 1', $ आउटपुट) का उपयोग करें; 'यदि आप' आउटपुट' में त्रुटियां भी चाहते हैं। – arnaud576875

+0

बेशक मैंने var_dump का भी उपयोग किया, यह कुछ भी वापस नहीं लौटाता – firedev

+1

तो कनवर्ट करने के पूर्ण पथ का उपयोग करने के बारे में क्या? – xdazz

2
sudo ln -s /usr/local/bin/convert /usr/bin/convert 
+0

आपने मुझे बचाया! अब मैं पूर्ण पथ सहित बिना निष्पादन कमांड का उपयोग कर सकता हूं। –

1

सीधे शब्दों में exec("PATH=\$PATH:/usr/local/bin; convert file.pdf file.png"); का उपयोग परिवर्तित क्रम पर पथ को जोड़ना होगा।

+0

यह वही है जो मुझे चाहिए। लेकिन यहां मुझे अपने PHP कोड पर एक चाल प्राप्त करने की आवश्यकता है क्योंकि मुझे अपनी लाइव मशीन पर पैथ की आवश्यकता नहीं है। क्या आप इस निर्यात पथ को मैक पर सेट करने का एक तरीका जानते हैं? – workdreamer

1
सिर्फ कार्यकारी के बजाय

("कन्वर्ट ...."); एक पूर्ण पथ का उपयोग करें।आप टर्मिनल

प्रकार टाइप करके प्राप्त कर सकते हैं परिवर्तित

आप की तरह कुछ मिलना चाहिए: परिवर्तित मिश्रित होता है (/ opt/स्थानीय/bin/परिवर्तित)

तो अब का उपयोग करें:

exec ("/ opt/local/bin/convert ....");

[@Nikki के लिए क्रेडिट]

कि टिप्पणी बाहर

DYLD_LIBRARY_PATH के बाद = "/ अनुप्रयोग/MAMP/Library/lib: $ DYLD_LIBRARY_PATH" निर्यात DYLD_LIBRARY_PATH

में/एप्लीकेशन/एमएएमपी/लाइब्रेरी/बिन/एनवार्स

+1

के लिए भी काम करता है आप जल्दी ही सीखेंगे कि आपकी परियोजनाएं उत्पादन चरण तक पहुंचने के बाद यह एक बुरी आदत है। – firedev