2011-10-18 8 views
7

Sto avendo un bizzarro problema con php 5.3.6 e ImageMagick (riga di comando) usando MAMP (e anche Macports .. Ho provato entrambi) su OS X.ImageMagick funziona in riga di comando ma quando exec() in php restituisce 5 con "incompatible library version"

Quando eseguo il comando di identificazione dalla CLI, funziona correttamente. Ma quando ho eseguito lo stesso comando esatto utilizzando exec(), restituisce un codice di valore 5 e nei log di errore apache ho:

dyld: Biblioteca non caricato: /opt/local/lib/libfreetype.6. dylib
di riferimento da:/opt/local/bin/identificare Motivo: Incompatibile versione della libreria: identificare richiede la versione 14.0.0 o successiva, ma libfreetype.6.dylib fornisce la versione 13.0.0

Eg Il comando cli è: /opt/local/bin/identify /Users/leonardteo/Documents/1.jpg

Questo funziona perfettamente quando eseguito dalla riga di comando. Quando viene eseguito da PHP:

exec("/opt/local/bin/identify /Users/leonardteo/Documents/1.jpg", $output, $return);

$return è 5

$output è nulla

Controllo dei log di Apache dà la questione di cui sopra con libfreetype.

Ho installato ImageMagick utilizzando Macports. Ho anche provato una build manuale dal sorgente e l'identificazione in esecuzione da /usr/local/bin/identify e ottengo lo stesso risultato. Ho anche provato a eseguire PHP da Macports invece di MAMP e ottengo lo stesso risultato.

Qualcuno potrebbe aiutarmi a far luce su questo?

+0

PHP sta eseguendo una copia diversa di quella libreria, in qualche modo. Controlla i tuoi percorsi, assicurati di non avere versioni in conflitto. – Brad

+0

Il php CLI di solito ha un file .ini separato dal php SAPI, quindi i due .ini possono potenzialmente caricare diverse versioni della libreria. –

+0

@Marc B: Questo non è un problema tra l'esecuzione di php su cli e php tramite Apache. È tra un comando cli reale sulla shell bash e l'esecuzione dello stesso comando tramite PHP. –

risposta

17

Modifica questo file:

/Applicazioni/MAMP/Library/bin/envvars

commentare le seguenti righe:

DYLD_LIBRARY_PATH = "/ Applications/MAMP/library/lib: $ DYLD_LIBRARY_PATH"

esportazione DYLD_LIBRARY_PATH

+0

Bello, l'altro modo sarebbe semplicemente passare l'istanza del server a XAMPP che funziona fuori dalla scatola http://tekkie.flashbit.net/developer-tools/workaround-for-imagemagick-convert-returning-5 –

+0

Ho non ho idea del perché questo ha funzionato ... ma è successo. Grazie! – Jonathan

+0

Grazie mille !!! Stava cercando per un paio d'ore di scoprire il motivo per cui non funzionava. Fortunatamente StackOverflow e tu, caro signore, mi hai salvato di nuovo il culo;) – maddob