2011-08-23 8 views
15

Ho installato Imagemagick utilizzando Homebrew su Lion, tutto è a posto tranne che non funziona affatto quando viene chiamato da php. Console:risolto: MAMP Php non può essere eseguito ('convert') dopo l'installazione di Homebrew ImageMagick

$ 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 

PHP:

echo exec ('convert -version'); 

o exec ('convertire -version', $ output); var_dump ($ output);

Non produce nulla (o una matrice vuota).

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

Ho bisogno di testarlo localmente per essere sicuro di poter rilevare le conversioni nell'ambiente di produzione. Ma non posso testarlo correttamente. Il PATH è impostato e funziona in Terminale, ma non da PHP.

risolto:

scopre, per php a lavorare convert dovrebbe essere in /usr/bin/ quindi questo risolto:

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

Aggiornamento

E 'stato a causa dello MAMP, qui è la correzione: http://firedevcom.tumblr.com/post/22791937644/fix-for-homebrew-imagemagick-and-mamp

Aperto/Applicazioni/MAMP/Library/bin/envvars

e commentare le seguenti righe:

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

Fatto.

+1

È convertito nel percorso di PHP? Potrebbe essere necessario specificare un '/ absolute/path/to/convert' nella chiamata exec(). Ricorda che l'ambiente in una chiamata exec() di PHP può essere significativamente diverso da quello che ottieni al prompt della shell. –

+0

Hmm la cosa è: tutto funziona sul server di produzione, non solo con Homebrew. Pensavo che PATH dovesse essere ereditato in sandbox exec, no? – firedev

+1

L'ambiente shell di php è completamente diverso da un ambiente shell utente. non puoi confrontarli direttamente prova a fare 'exec ('echo $ PATH');' per vedere cosa sta andando la shell. PHP erediterà l'ambiente Apache. –

risposta

6

Aggiunta la mia risposta qui in modo da poter votare:

è stato causato da MAMP, qui è la correzione: http://firedevcom.tumblr.com/post/22791937644/fix-for-homebrew-imagemagick-and-mamp

Aprire /Applications/MAMP/Library/bin/envvars

e commentare le seguenti righe:

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

Fatto.

+0

grazie, funziona !!!! – keithics

+0

Funziona anche per XAMPP, percorso:/Applicazioni/XAMPP/xamppfiles/bin/envvars –

1

Verificare che la conversione sia la variabile di ambiente PATH del server. O semplicemente specificare il percorso completo:

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

È nel PATH in console, ma non in exec di php, tuttavia sul server di produzione tutto sembra funzionare correttamente. E devo essere in grado di rilevare automaticamente imagemagick. Funziona su Linux, ma non con homebrew. – firedev

1

Il exec restituisce l'ultima linea dal risultato del comando che risulta essere una stringa vuota. Se si desidera ottenere l'output, basta fare qualcosa di simile:

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

Usa 'exec ('convert -version 2> & 1', $ output);' se vuoi anche errori in '$ output'. – arnaud576875

+0

Naturalmente ho usato anche var_dump, ma non restituisce nulla – firedev

+1

Quindi, che ne è dell'utilizzo del percorso completo di conversione? – xdazz

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

Mi hai salvato! Ora posso usare il comando exec senza includere il percorso assoluto. –

1

Basta usare exec("PATH=\$PATH:/usr/local/bin; convert file.pdf file.png"); Si aggiungerà convertito al PATH in fase di esecuzione.

+0

questo è esattamente ciò di cui ho bisogno. Ma qui ho bisogno di ottenere un trucco sul mio codice PHP perché non ho bisogno del PATH sulla mia macchina live. Conoscete un modo per impostare su mac questo percorso di esportazione globale? – workdreamer

1

anziché solo exec ("convert ...."); utilizza un percorso completo.si può ottenere digitando il terminale tipo

convertire

si dovrebbe ottenere qualcosa di simile a: convertito viene assegnata (/ opt/local/bin/convert)

così ora usare:

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

[crediti a @Nikki]

dopo quel commento fuori

DYLD_LIBRARY_PATH = "/ Applicazioni/MAMP/Library/lib: $ DYLD_LIBRARY_PATH" esportazione DYLD_LIBRARY_PATH

in/Applicazioni/MAMP/Libreria/bin/envvars

+1

Scoprirai presto che questa è una cattiva abitudine quando i tuoi progetti raggiungono la fase di produzione. – firedev

Problemi correlati