Know-How
ImageMagick mit PHP und Microsoft IIS
Grundlegendes
Image Magick ist eine Bibliothek um diverse Bildformate (z.Z. werden 234 unterstützt) umzuwandeln. Imagick ist die Erweiterung um die Verbindung zwischen PHP und Image Magick herzustellen.
Installation
- Von PECL müssen nun die passenden DLL Dateien runtergeladen werden die für die Verbindung Image Magick und PHP sorgen. https://pecl.php.net/package/imagick
Hier die aktuellste Stable Version auswählen und auf das Windows DLL Icon klicken. Auf der nächsten Seite muss nun der korrekte Download Link aufgrund PHP Version, NTS / TS und 32 / 64 Bit ausgewählt werden.
Nach dem Download die Zip Datei öffnen. In der Zip Datei befindet sich eine php_imagick.dll, diese muss in das ext Verzeichnis von PHP kopiert werden. - In der php.ini muss die eben kopierte DLL eingetragen werden (am besten im Abschnitt Dynamic Extensions) mit extension=php_imagick.dll.
- Nun müssen wir ermitteln welche ImageMagick Version zu der installierten imagick passt - diese ist jeweils auf eine bestimmte Version kompliliert und funktioniert nur damit. Damit das klappt, müssen die restlichen Dateien von Schritt 2 in einen temporären Ordner wie z.B. c:\imagick kopieren.
Dann in den Environment Variables von Windows muss in der PATH Variable der Pfad zum temporären Ordner eingetragen werden. Anschliessend den Server neustarten. - Nach dem Neustart öffnen wir eine CMD und rufen die php.exe manuell mit dem Parameter -i auf. Eine längere Liste wird ausgespuckt (ggf muss der Ausgabe Buffer der CMD angepasst werden). Wir suchen nach dem Abschnitt für imagick. Ist der Abschnitt gefunden ist die Zeile Imagick compiled with ImageMagick version relevant, denn da steht welche ImageMagick Version wir benötigen; in meinem Fall wird ImageMagick 6.9.3-7 Q16 x64 angezeigt.
- Es muss nun die korrekte ImageMagick Version von http://windows.php.net/downloads/pecl/deps/ runtergeladen werden.
Die Datei entpacken und der Inhalt vom Unterordner /bin in ein beliebiges Verzeichnis extrahieren (z.B. C:\Program Files\ImageMagick). - In den Environment Variables von Windows in der PATH Variable der Pfad zum temporären Ordner anpassen auf den ImageMagick Speicherort (im Beispiel also C:\Program Files\ImageMagick). Anschliessend den Server neustarten.
- Nach dem Neustart kann per phpinfo() geprüft werden ob Image Magick geladen wurden, dazu nach dem Abschnitt "imagick" suchen. Ausserdem müssten bei ImageMagick supported formats diverse Dateiendungen ausgeführt werden.
- Der temporäre Ordner von Schritt 3 (c:\imagick) kann nun gelöscht werden.
Was nicht nötig ist
Auf einigen Webseiten zur Installation von Image Magick mit PHP und IIS werden Vorschläge zur Problembehebung gegeben die nicht nötig sind bzw nichts nützen:
- Image Magick muss zwingend auf C:\ installiert werden --> funktioniert bei mir mit C:\Program Files\ImageMagick einwandfrei.
- Es müssen diverse Berechtigungen für den IUSR Benutzer auf den ImageMagick Ordner erteilt werden --> funktioniert bei mir auch ohne.
Mögliche Fehlerquellen
- Werden die PHP Extensions überhaupt geladen? Bei einer frischen PHP Installation ist dies nicht zwangsläufig der Fall - auch nicht wenn man im php.ini im Abschnitt "Dynamic Extensions" die gewünschten Erweiterungen aktiviert hat. Ebenfalls wichtig ist im Abschnitt "Paths and Directories" der Pfad zu den Extensions anzugeben (Variable extension_dir muss den Wert "ext" erhalten) - dieser ist standardmässig auskommentiert.
- Es muss drauf geachtet werden bei Windows konsequent die NTS (Non-Thread-Safe) oder TS (Thread-Safe) Varianten zu verwenden - sowohl für PHP selbst als auch für Image Magick. Auch ist sicherzustellen dass stets überall 32 Bit oder 64 Bit verwendet wird. Diese dürfen nicht gemischt werden. Ich verwende seit PHP 7.0 nur noch x64 und bei Windows konsequent die NTS Varianten.
- Falls im phpinfo() bei imagick keine Dateiendungen bei ImageMagick supported formats aufgeführt werden, wird eine nicht zu imagick korrespondierende ImageMagick Version verwendet.
Weitere Infos
Tags