PHP Extensions mit PECL installieren

  • Möchte man PHP Extensions installieren, kann dies mittels der pecl Binary durchgeführt werden. Diese wird in der Serverumgebung mitgeliefert. Da je PHP einmal die Extension installiert werden muss, hilft hier folgendes Skript:



    Verwendet werden kann das Skript im Grunde wie die pecl Binary selbst. In den Beispielen wurde das Skript als pecl.sh abgespeichert.


    Installieren von Extension

    Code
    ./pecl.sh install <extensionName>


    Deinstallieren von Extension

    Code
    ./pecl.sh uninstall <extensionName>


    Upgrade von Extension

    Code
    # Zeigt verfügbare Upgrades an
    ./pecl.sh list-upgrades
    
    
    # Aktualisiert ein bestimmtes Paket/Extension
    ./pecl.sh upgrade <extensionName>


    Original Code aus Thread: REDIS Cache nutzen


    Danke Twilo für die Verbesserungen

  • Habe es heute bei mir auf einen Debian installiert.


    Ihr solltet in den SKript vielleicht noch ein chmod mit einbringen.


    Bei mir sah es nach redis so aus:

    Code
    -rwxr-xr-x 1 root root   25112 Aug 29 02:53 pdo_odbc.so
    -rw-r--r-- 1 root root 2478792 Sep 18 15:36 redis.so
    -rwxr-xr-x 1 root root 2625696 Aug 29 00:39 soap.a
  • Wozu?


    Die Extensions sind keine Executables. Wozu also Ausführrechte?


    Die Standardberechtigung für Dateien ist 644. Somit ist mit der Datei alles gut. Nur weil alle anderen Dateien Ausführrechte haben, muss dies ja nicht richtig sein ?


    Ich hab jedenfalls keine Probleme mit 644er Berechtigungen bei Extensions.

  • Nach dem Dist-Upgrade von debian9 zu debian10 und Update der SE-Reihe6-370 und PD-Admin v4.72_64 verhält sich pecl.sh nun so.

    Bei PHP8 denke ich liegt es einfach daran das es noch zu früh ist und deshalb nicht geht. Woher der Speicherzugriffsfehler kommt weiß ich nicht.


  • Ich greife dieses Thema hier noch einmal auf:


    Bei Ausführung des Skriptes kam es bei mir immer zu einem Segmentation Fault. Ich habe mir den cordump dazu angeschaut und offenbar verursacht dies PHP 5.2. Da diese Version EOL ist, habe ich diese einfach im Skript ausgenommen.


    Des Weiteren tritt der Fehler

    Code
    Fatal error: Uncaught Error: Undefined constant "STDIN" in /usr/local/pd-admin2/php-8.0.16/lib/php/PEAR/Frontend/CLI.php:303

    bei allen PHP 8.x Versionen auf. Offenbar hat sich hier etwas gegenüber PHP < 8.x geändert. Was genau ist mir bisher nicht klar... Als workaround kann man

    Code
    define('STDIN',fopen("php://stdin","r"));

    in der CLI.php eintragen. Dann klappt eine Installation. Nur wird dieser workaround mit jedem PHP Update auch wieder verschwunden sein.

  • Es gibt ja immer noch kleine Verbesserungen:


    In der PECL.sh sollte noch der Package Configuration Pfad mitgegeben werden.

    Einfach folgende Zeile noch in das Shell-Script am Anfang einfügen:

    export PKG_CONFIG_PATH=/usr/local/pd-admin2/lib/pkgconfig/


    Hintergrund:

    Damit werden dann beim Kompilieren auch notwendige Abhängigkeiten (wie zum Bespiel libxml-2.0) gefunden. Das wird beispielsweise von xmlrpc benötigt.


    Und xmlrpc ist bei PHP 8.2/PHP 8.3 noch nicht standardmäßig dabei, da der normale Kanal das noch nicht bereitstellt. Da hilft dann der Aufruf:

    ./pecl.sh install xmlrpc channel://pecl.php.net/xmlrpc-1.0.0RC3


    Wobei ich mir das Shell-Script noch so angepasst habe, das es nicht immer alle PHP-Umgebungen aktualisiert, sondern nur punktuell diejenigen, welche ich aktuell einsetze.