Ankündigung

Einklappen
Keine Ankündigung bisher.

Windows + Apache + PHP + Imagick

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Windows + Apache + PHP + Imagick

    Hallo,

    neben der bekannten GD-Library gibt es mit Image Magick noch eine weitere Grafikbibliothek, die es nicht nur als Konsolen-Variante, sondern auch als PHP-Extension gibt:
    PHP: ImageMagick - Manual

    Unter Windows ist die Installation etwas kompliziert, denn Apache und PHP müssen mit VC9 kompiliert worden sein.

    (Das Testsystem ist Windows 7, 64 Bit, allerdings werden zum Testen die x86-Versionen verwenden).

    Zunächst muss eine ganze Reihe an Software installiert werden, los geht's:


    Image Magick:
    ImageMagick: Install from Binary Distribution
    Name: Win32 dynamic at 16 bits-per-pixel
    Datei: ImageMagick-6.5.8-4-Q16-windows-dll.exe [~12.5 MB]
    Nach der Installation Windows durchstarten.


    Microsoft Redistributable Package:
    Download details: Visual C++ 2008 Redistributable Package (x86)
    (sollte sich die URL ändern, einfach googlen)
    Name: Microsoft Visual C++ 2008 Redistributable Package (x86)
    Datei: vcredist_x86.exe [~ 1.7 MB]
    Brav die folgenden Windows-Updates ziehen (nicht zwingend)


    XAMPP können wir nicht verwenden, das wird soweit es zu erfahren war mit VC6 kompiliert (also inkompatibel zu Mikko Koppanen's Imagick-Extension für Win/PHP, die VC9 benötigt), wir müssen also auf die von der Apache Lounge bereitgestellte Apache Version zurückgreifen:
    Apache:
    Apache on Windows binaries and modules download
    Name: Apache 2.2.14 apr-1.3.9 apr-util-1.3.9 apr-iconv-1.2.1 openssl-0.9.8k+asm zlib-1.2.3+asm
    Datei: httpd-2.2.14-win32-x86-ssl.zip [~ 4.9 MB]
    Apache ins empfohlene Verzeichnis C:/Apache2 entpacken. Für den Anfang besser so machen, wäre ärgerlich wenn eine übersehene Konfig-Einstellung das ganze Projekt zum Scheitern bringt. Nach dem alles läuft, kann man immer noch die Komponenten dorthin verlegen, wo man sie haben möchte.


    PHP:
    PHP For Windows: Binaries and sources Snapshots
    Zur Info:
    Which version do I choose?

    If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP

    If you are using PHP with IIS you should use the VC9 versions of PHP

    VC6 Versions are compiled with the legacy Visual Studio 6 compiler

    VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability. The VC9 versions require you to have the Microsoft 2008 C++ Runtime (x86) or the Microsoft 2008 C++ Runtime (x64) installed

    Do NOT use VC9 version with apache.org binaries

    These binaries are NOT intended for production use; please use the binaries at PHP Windows downloads.
    Name: PHP 5.3 (5.3.2-dev) / VC9 x86 Thread Safe
    Datei: php-5.3-win32-VC9-x86-latest.msi [~ 19.37MB]
    So jetzt PHP installieren, Modul Apache 2.2 wählen, der Speicherort der jetzt abgefragten Apache-Konf ist C:/Apache2/conf
    Diese Änderung sollte nach der Installation in der C:/Apache2/conf/httpd.conf zu finden sein:
    Code:
    #BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
    PHPIniDir "C:/Program Files (x86)/PHP/"
    LoadModule php5_module "C:/Program Files (x86)/PHP/php5apache2_2.dll"
    #END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL

    Imagick-Extension:
    x86 Windows builds
    Name: imagick - vc9 - ts; 2009-11-18 23:39 - php_imagick_ts.dll (3.0.0-dev)
    Datei: php_imagick_ts.dll [~ 261 KB]

    Die kommt in unser PHP-Extension-Verzeichnis:
    C:\Program Files (x86)\PHP\ext
    also
    C:\Program Files (x86)\PHP\ext\php_imagick_ts.dll
    In der php.ini fehlt jetzt noch der folgende Eintrag:
    Code:
    [PHP_IMAGICK]
    extension=php_imagick_ts.dll
    (ganz ans Ende zum Beispiel)

    So, jetzt müssen wir den Apache nochmal als Service installieren, also in die Windows/DOS-Konsole:
    Code:
    cd C:/Apache2/bin
    httpd.exe -k install
    httpd.exe -k restart
    So und jetzt können wir gleich testen:

    http://localhost/test.php
    aka
    C:/Apache2/htdocs/test.php:
    PHP-Code:
    <?php
    error_reporting
    (E_ALL);
    ini_set("display_errors"1);

    $im = new Imagick();
    $im->newImage(100100"green""png");

    $draw = new ImagickDraw();
    $draw->setFillColor("white");
    $draw->setStrokeWidth(1);
    $draw->setStrokeColor("black");
    $draw->circle(50505090);
    $im->drawImage($draw);

    $itWorks "It works!";
    $draw = new ImagickDraw();
    $draw->setStrokeColor("black");
    $draw->setTextAlignment(Imagick::ALIGN_CENTER);
    $metrics $im->queryFontMetrics($draw$itWorks);
    $adjustY = ($metrics["textHeight"] + $metrics["descender"]) / 2// ~ vertical align: middle
    $draw->annotation(5050 $adjustY"It works!");
    $im->drawImage($draw);

    header("Content-Type: image/" $im->getImageFormat());
    echo 
    $im->getImageBlob();
    ?>
    und jetzt sollte dort das erste Gemälde erscheinen, weißer Kreis mit schwarzem Rand auf grüner Leinwand ... "It works!"
    Angehängte Dateien
    "Mein Name ist Lohse, ich kaufe hier ein."


  • #2
    Als ich Imagick installiert habe funktionierte es auch noch unter XAMPP, kann aber auch an der neueren Version liegen.

    lg
    draco
    [URL="http://www.inspiration-gaming.de"][/URL]

    Kommentar


    • #3
      War das auch ein Windows-System? Das Problem ist eben der Rattenschwanz. Imagick selbst ist mit VC9 kompiliert und es gibt keine aktuelle VC6-Variante, weshalb du auch ein PHP mit VC9 brauchst und damit soweit ich das verstanden habe (bin ja kein C++-Programmierer bzw. System-Admin) brauchst du auch einen Apache, der so kompiliert wurde.

      Sonst gibt's nämlich diese Meldung:
      PHP Startup : imagick: Unable to initialize module
      Module compiled with build ID=API 20090626, TS, VC9
      PHP compiled with build ID=API, TS, VC6
      These options need to match.
      Mikkos Antwort dazu:
      Mikko Koppanen on November 2, 2009 - 1:42 pm
      I don’t have VC6 compiler [..]
      "Mein Name ist Lohse, ich kaufe hier ein."

      Kommentar


      • #4
        Ich hab es letztes(oder war es schon vorletztes?) Jahr gemacht, da war Imagick wahrscheinlich noch mit VC6 Compiliert. Und ja es war unter Win XP. Aber bevor ich mir die Installation antuhe bleib ich lieber bei der älteren Version, solange Sie ohne Probleme läuft. Wie heißt es so schön: Don't touch a running system

        lg
        draco
        [URL="http://www.inspiration-gaming.de"][/URL]

        Kommentar


        • #5
          Hey, danke für dein Tutorial, ohne dich hätt ich wohl noch ewigkeiten gebraucht, bis ich imagick zum laufen gebracht hätte.
          Aber nun hab ich ein Problem, was eig nichts mit dem Thema zu tun hat, aber ich habe jetzt leider nach bisschen suchen keine Lösung gefunden.

          Der Server (Apache 2.2.14), PHP 5.3 / VC9 und imagick funktionieren einwandfrei, aber nun habe ich ein Problem mit MySQL (bei XAMPP hat das vorher reibungslos funktioniert, aber XAMPP habe ich jetzt komplett deinstalliert). Ich habe mir den MySQL Community Server 5.1.41 runtergeladen und installiert, was soweit noch einwandfrei funktioniert (kann darauf zugreifen, auch über ein interface u. dbs erstellen, etc). Aber nun kann ich über PHP nicht mehr darauf zugreifen, wenn ich auf eine DB zugreifen will scheint es ein timeout zu geben (es ladet die seite ur lang und dann wird eine leere angezeigt). Ich hab schon geschaut, im php.ini file sind die mysql.dlls eingetragen und werden auch bei phpinfo(); angezeigt.
          Das einzige was bisschen komisch is, es zeigt an Client version: mysqlnd 5.0.7-dev, da habe ich mir gedacht, vllt. liegt das an der Version und auf Apache :: Available php_mysql(i).dll for PHP 5.2.9+ and MySQL 5.1.30+ auch eine neuere dll gefunden, aber wenn ich die dann in den ext ordner gebe und dann den Server restarte kommt ein error...
          Hoffe irgendjemand kann mir helfen, hab echt keine Ahnung mehr, was ich noch machen könnte und brauche mysql.

          Kommentar


          • #6
            Auch wenn das php 5.2.9+ ist, denke ich die sind wohl kaum für php 5.3 geeignet, da 5.3 ein komplett neuer zweig ist.

            zeig doch mal was genau in deiner phpinfo alles zu mysql zu finden ist ? ich kann mir irgendwie nicht vorstellen dass ein php 5.3 mit ner mysql-extension daherkommt die mit aktuellen mysql-versionen nicht klarkommt, vor allem wenn mysqlnd als backend eingesetzt wird, das ja von mysql selbst für php entwickelt wurde und default für php 5.3 ist anstatt libmysql.

            wie schaut es denn bei der konfiguration von mysql aus ? mit was kommst du drauf ? lauscht mysql überhaupt auf einer ip+port ? oder nur via socket ? vielleicht nur auf localhost ? oder nur einer festen ip ? ....

            kommst du mit irgendwas anderem drauf ?

            das 5.0.7 müsste imho die version von mysqlnd sein und nicht direkt in einem verhältnis zur mysql-version stehen mit der sie zusammenarbeitet.
            robo47.net - Blog, Codeschnipsel und mehr
            | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

            Kommentar


            • #7
              Also es ist zurzeit alles nur auf meinem rechner, also localhost.
              ServerName in der Apache conf ist auf localhost:80

              Auf meine MySQL-dbs kann ich mittels MYSQL Workbench (5.2.10 Beta) (Hostname: 127.0.0.1, Port: 3306, username: root) und CMD zugreifen.

              Bezüglich den MySQL einstellungen, ich weiß nicht so genau, hab eig die Standardeinstellungen gelassen (also "Enable TCP/IP Networking Port: 3306", "Enable Strict Mode")

              Und hier meine phpinfo()
              Code:
              mysql
              MySQL Support	enabled
              Active Persistent Links 	0
              Active Links 	0
              Client API version 	mysqlnd 5.0.7-dev - 091210 - $Revision: 291947 $
              
              Directive	Local Value	Master Value
              mysql.allow_local_infile	On	On
              mysql.allow_persistent	On	On
              mysql.connect_timeout	60	60
              mysql.default_host	no value	no value
              mysql.default_password	no value	no value
              mysql.default_port	no value	no value
              mysql.default_socket	no value	no value
              mysql.default_user	no value	no value
              mysql.max_links	Unlimited	Unlimited
              mysql.max_persistent	Unlimited	Unlimited
              mysql.trace_mode	Off	Off
              
              mysqli
              MysqlI Support	enabled
              Client API library version 	mysqlnd 5.0.7-dev - 091210 - $Revision: 291947 $
              Active Persistent Links 	0
              Inactive Persistent Links 	0
              Active Links 	0
              
              Directive	Local Value	Master Value
              mysqli.allow_local_infile	On	On
              mysqli.allow_persistent	On	On
              mysqli.default_host	no value	no value
              mysqli.default_port	3306	3306
              mysqli.default_pw	no value	no value
              mysqli.default_socket	no value	no value
              mysqli.default_user	no value	no value
              mysqli.max_links	Unlimited	Unlimited
              mysqli.max_persistent	Unlimited	Unlimited
              mysqli.reconnect	Off	Off
              
              mysqlnd
              mysqlnd	enabled
              Version 	mysqlnd 5.0.7-dev - 091210 - $Revision: 291947 $
              Compression 	supported
              Command buffer size 	4096
              Read buffer size 	32768
              Read timeout 	31536000
              Collecting statistics 	Yes
              Collecting memory statistics 	No

              Kommentar


              • #8
                Ok, Problem ist gelöst, hat nur daran gelegen, dass ich localhost statt 127.0.0.1 geschrieben habe in PHP -.-

                Kommentar


                • #9
                  Vielen Dank für all die Mühe Dir schon bisher gemacht hast.

                  Ich hab Deinen Thread nach einigem testen und suchen gefunden.
                  Prinzipiell wäre es aber schon möglich einer bestehenden Xampp Umgebung all benötigten Elemente auszutauschen, oder?
                  Ich scheu noch davor zurück Deinen Weg zu probieren, eigentlich wollte ich ja nur
                  Create a video preview as animated GIF with FFmpeg and PHP SPL testen.

                  Kommentar


                  • #10
                    Mit Bestimmtheit kann ich es dir nicht sagen, ich hatte nur diese Seite als Referenz verwendet:
                    http://valokuva.org/?page_id=50
                    Und da werden nur VC9 Builds angeboten. Üblicherweise verwendet man ja Windows nur für die Entwicklungsumgebung, das Live-System ist ja dann doch meistens Linux. Insofern kannst du dieses kleine Skript ja einfach mal direkt in deiner Live-Umgebung testen.
                    "Mein Name ist Lohse, ich kaufe hier ein."

                    Kommentar


                    • #11
                      Von dem selben Sourcecode wie die ImageMagick Library ist auch die MagickWand Library compiliert. Da es nicht so einfach ist, diese auf Windows ans laufen zu kriegen habe ich ein detailliertes Tutorial geschrieben, in dem sich auch alle nötigen Dateien zum Download befinden. Es beinhaltet die DLL, die sowohl auf Apache VC6 (Xampp) als auch auf IIS läuft. Der PHP Sourcecode entält eine open source Klasse zur Grafikbearbeitung wie u.a. Thumbnail Generierung, rotieren, ausschneiden und Text einblenden in Grafiken sowie Captcha Generierung. Die Demo zeigt auch wie man mit Ajax den eingegebenen Captcha Code prüfen kann.

                      Alles weitere bitte in meinem ausführlichen Artikel lesen:
                      CodeProject: Useful PHP Extensions. Free source code and programming help

                      Elmü

                      Kommentar


                      • #12
                        Zitat von Elmue Beitrag anzeigen
                        Alles weitere bitte in meinem ausführlichen Artikel lesen:
                        CodeProject: Useful PHP Extensions. Free source code and programming help
                        Schöne Sache, danke für die Verlinkung. Vielleicht schaffen wirs ja, dass die GD bald abgelöst wird
                        "Mein Name ist Lohse, ich kaufe hier ein."

                        Kommentar


                        • #13
                          Hier gibt's jetzt VC6 DLLs für Windows:
                          VC6 Windows binaries for imagick 2.3.0 | sk89q

                          Danke für die Info an funcoder @ phpforum.de
                          "Mein Name ist Lohse, ich kaufe hier ein."

                          Kommentar


                          • #14
                            Habe exakt nach der Anleitung http://www.php.de/474883-post1.html
                            gearbeitet, ausser das es nun aktuellere Versionen sind!

                            Aber darauf geachtet das es immer Thread Safe und VC9 Downloads waren.

                            Dennoch will bei mir "Image Magick" nicht laufen.
                            Im error.log vom Apache steht immer

                            PHP Warning: PHP Startup: Unable to load dynamic library 'D:\\Entwicklung\\Server\\php\\ext\\php_imagick_ts .dll' - Die angegebene Prozedur wurde nicht gefunden.\r\n in Unknown on line 0
                            hat jemand eine idee was da schief läuft?

                            Ich nutze PHP Version 5.3.2 und Apache/2.2.15 (Win32) PHP/5.3.2

                            Kommentar


                            • #15
                              Zitat von MrDevil Beitrag anzeigen
                              hat jemand eine idee was da schief läuft?
                              Die Fehlermeldung spricht immer noch oft dafür, dass zwei Komponenten von der Version her nicht zueinander kompatibel sind.
                              [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                              Kommentar

                              Lädt...
                              X