Ubuntu 20/PHP 8: Wie finde ich heraus, welche PHP Extensions aktiviert/geladen sind?

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Ubuntu 20/PHP 8: Wie finde ich heraus, welche PHP Extensions aktiviert/geladen sind?

    Die Frage steht im Prinzip schon im Titel: Wie kann ich unter Linux, in meinem Fall Ubuntu 20, herausfinden, welche Extensions in PHP (hier 8.0) aktiviert, d. h. geladen sind?

    Mit dem PHP-Befehl get_loaded_extensions() erhalte ich 47 Stück, mit dem Konsolenbefehl php -m 48, die aber nicht denen entsprechen, die wirklich aktiviert sind.

    Mit phpdismod * kann ich alle Extensions deaktivieren. Zumindest funktioniert eine Webanwendung nicht mehr, wenn ich den Befehl ausführe (danach starte ich immer den Apache neu). Wenn die Anwendung z. B. nur "gd" braucht, so funktioniert sie wieder nach dem Befehl phpenmod gd. Das zeigt mir, dass nur diese Extension aktiviert ist.

    Somit dürften die beiden oben genannten Befehle doch nur gd anzeigen. Aber die Liste ändert sich nie.

    Der Befehl phpquery -M soll eigentlich auch die aktivierten Extensions anzeigen, aber da kommt einfach gar nichts.

    Hintergrund der ganzen Sache: Ich habe ermittelt, welche Extensions meine Anwendung benötigt und möchte nun auch wirklich nur diese aktivieren, um die Anwendung zu testen. Vielleicht ist das auch schon der Fall, aber wie komme ich an die Liste, um das zu prüfen?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hi,

    also phpquery -v 7.4 -M zeigt die Module für eine bestimmte PHP-Version.

    Ich hab auch einen -vermeintlichen- Unterschied drin und entsprechend bei php -m einen Eintrag mehr, ich hab verglichen und gesehen, dass dieser Befehl im Gegensatz zu get_loaded_extensions() das Modul "Zend OPcache" zweimal in der Liste drin hat ... lol. Also tatsächlich sind beide Ergebnisse somit identisch :D

    Du könntest dir auch ne Liste mit den required extensions raus lassen bzw. die dann automatisch direkt aktivieren, so in der Art:

    PHP-Quellcode

    1. <?php
    2. $composer_file = __DIR__ . '/composer.json';
    3. if (file_exists($composer_file) && is_readable($composer_file)) {
    4. $data = json_decode((string)file_get_contents($composer_file));
    5. if (json_last_error() === JSON_ERROR_NONE && is_array($data)) {
    6. $required = $data['require'] ?? [];
    7. foreach ($required as $key => $value) {
    8. if (strpos($key, 'ext-') === 0 && $value == '*') {
    9. if (!extension_loaded($key)) {
    10. echo "\"{$key}\" muss noch aktiviert werden!\n";
    11. }
    12. }
    13. }
    14. }
    15. }



    Link :thumbup:
    Hello World
    Danke für die Antwort. Leider bringt mich die nicht zur Lösung.

    Wichtig ist mir, dass ich wirklich sehe (mit eigenen Augen), welche Extensions aktiv sind. Egal was ich aktiviere oder deaktiviere, get_loaded_extensions() und php -m zeigen einfach immer alle an. Aber durch meine Tests weiß ich, dass dies definitiv nicht sein kann.

    Ein phpquery -v x.y -M zeig mir zumindest in meiner Ubuntu-18-VM im Gegensatz zu phpquery -M Extensions an, aber auch immer alle.

    Wie komme ich an die definitive Liste? Das ist die große Frage.

    Ich halte es, auch aus Sicherheitsgründen, für sinnvoll, alle nicht benötigten Extensions zu deinstallieren oder (falls in allgemeinen Paketen vorhanden) zu deaktivieren. Wäre ja blöd, wenn die Sicherheit durch etwas gefährdert ist, was überhaupt nicht nötig ist.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hast du schonmal in deine PHP.ini geschaut?
    Da siehst du ja was du aktiviert hast und was nicht.
    Kommentiere dort alle Module aus und mache nur die an die du brauchst.

    Falls dein PHP mit modulen direkt compiliert wurde kannst du natürlich php auch einfach selbst nur mit den modulen compilieren die du brauchst.

    Die Befehle die du nutzt zeigen wie du schon gemerkt hast immer alle geladenen Module an. Also alle egal ob deaktiviert oder aktiviert weil diese verfügbar sind.
    Ich denke hier bleibt nur der weg die INI Datei zu bearbeiten und das zu laden was du brauchst.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Ich hab das jetzt mal bei mir mit php -m getestet und bekomme nur die Extensions aufgelistet, die ich aktiviert habe.
    Zend OPcache wird mir ebenfalls zweimal angezeigt ABER das eine als PHP Module und das andere als Zend Module.

    Hab die Liste auch nochmal mit meiner config und phpinfo() verglichen: passt

    FYI: Ich benutzt FreeBSD als OS und baue die Software "selbst" (mit poudriere aus dem Sourcecode).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „slice“ ()

    xChRoNiKx schrieb:

    Ich denke hier bleibt nur der weg die INI Datei zu bearbeiten und das zu laden was du brauchst.

    Demnach kann ich wohl nicht prüfen, was aktiv ist. Die INI brauche ich ja nicht zu bearbeiten, weil es mit phpdismod auch klappt. Mir ging's hauptsächlich um eine Listenausgabe des tatsächlichen aktuellen Zustands.

    slice schrieb:

    und bekomme nur die Extensions aufgelistet, die ich aktiviert habe

    Vielleicht weil du ein anderes OS nutzt? Anders kann ich mir das nicht erklären.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Gut möglich, deswegen hatte ich es erwähnt, oder die Art und Weise wie die Software gebaut wird.
    Ich kompiliere PHP und die Module separat.

    Edit:
    Was sagt denn php -i | grep configure?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „slice“ ()

    Selber kompilieren kommt für mich auf jeden Fall nicht in Frage.

    Ich werde am Montag, spätestens Dienstag, den zuletzt genannten Befehl testen sowie phpquery mit Angabe der Versionsnunmmer. Auch werde ich mal in die phpinfo-Ausgabe schauen. Danke soweit, ich melde mich wieder, sobald ich die Tests gemacht habe.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    @Marcus Gräfe hmm, mal schauen ob ich folgen kann, also wenn ich überlege gibt es 3 sinnvolle Abfragen bzw. Filter die man machen kann:

    1) Zeige alle installierten Extensions
    2) Zeige alle aktiven (=installiert und aktiviert) Extensions
    3) Zeige alle Extensions die insgesamt von einer Anwendung benötigt werden - das war doch das Thema in diesem Thread hier Vorgehen, um zu ermitteln, welche PHP-Extensions ich für meine Applikation benötige oder?

    Klingen tut es für mich, als würdest du Filter 3) anwenden wollen, aber da hast du ja bereits eine Liste von Extensions die du brauchst. Also theoretisch wär's doch schon die Lösung, einmal phpdismod * auszuführen und danach die Extensions aus der Liste nacheinander zu aktivieren. Oder steh ich komplett auf'm Schlauch?


    Link :thumbup:
    Hello World

    slice schrieb:

    Was sagt denn php -i | grep configure?

    Leider kommt da gar keine Ausgabe. Ohne grep natürlich schon.

    Link schrieb:

    Also theoretisch wär's doch schon die Lösung, einmal phpdismod * auszuführen und danach die Extensions aus der Liste nacheinander zu aktivieren.

    Ja, das ist völlig korrekt. Aber trotzdem muss es doch irgendwie eine Möglichkeit geben, das Ergebnis zu prüfen.

    Ich habe es nun auch mit phpquery -v 8.0 -M (statt nur phpquery -M, was nichts zurückgibt) getestet, da kommen auch wesentlich mehr als die aktivierten, auch nach phpdismod * (die Liste ändert sich ebenfalls nie).

    Hier meine Ausgaben, nachdem ich alles deaktiviert habe:

    php -m

    Quellcode

    1. [PHP Modules]
    2. calendar
    3. Core
    4. ctype
    5. curl
    6. date
    7. dom
    8. exif
    9. FFI
    10. fileinfo
    11. filter
    12. ftp
    13. gd
    14. gettext
    15. hash
    16. iconv
    17. json
    18. libxml
    19. mbstring
    20. mysqli
    21. mysqlnd
    22. openssl
    23. pcntl
    24. pcre
    25. PDO
    26. pdo_mysql
    27. Phar
    28. posix
    29. readline
    30. Reflection
    31. session
    32. shmop
    33. SimpleXML
    34. sockets
    35. sodium
    36. SPL
    37. standard
    38. sysvmsg
    39. sysvsem
    40. sysvshm
    41. tokenizer
    42. xml
    43. xmlreader
    44. xmlwriter
    45. xsl
    46. Zend OPcache
    47. zip
    48. zlib
    49. [Zend Modules]
    50. Zend OPcache

    phpquery -v 8.0 -M

    Quellcode

    1. pdo
    2. xmlwriter
    3. sysvsem
    4. sysvmsg
    5. ctype
    6. dom
    7. gd
    8. posix
    9. ffi
    10. simplexml
    11. exif
    12. curl
    13. calendar
    14. gettext
    15. xmlreader
    16. zip
    17. mysqli
    18. pdo_mysql
    19. ftp
    20. tokenizer
    21. mbstring
    22. opcache
    23. mysqlnd
    24. sockets
    25. fileinfo
    26. shmop
    27. iconv
    28. xsl
    29. readline
    30. xml
    31. sysvshm
    32. phar

    EDIT: phpinfo() gibt ebenfalls bei allen Extensions ein "enabled" aus ...

    EDIT #2:

    xChRoNiKx schrieb:

    Die Befehle die du nutzt zeigen wie du schon gemerkt hast immer alle geladenen Module an. Also alle egal ob deaktiviert oder aktiviert weil diese verfügbar sind.

    Ich denke mal, so wird es sein. Es gibt für mein Problem keine Lösung.

    EDIT #3: Ich gebe es jetzt auf. Was ich sehen möchte, gibt es nicht als Ausgabe. Zumindest nicht in meiner Installation.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ich habe die Lösung. Ich hatte zum Deaktivieren immer phpdismod * bzw. phpdismod -v 8.0 * genommen, was meiner Meinung nach auch zwischendurch funktioniert hat (neuerdings komischerweise nicht mehr) und vor allem dieselben Ausgaben erzeugt hat wie ein Ausführen der Einzelbefehle (also pro Extension).

    Ich denke, das mit dem Wildcard-Zeichen ist nicht möglich. Es geht nur einzeln oder mit folgendem Befehl automatisch anhand der Liste aller aktivierten Extensions: phpquery -v 8.0 -M | xargs -n1 -d'\n' phpdismod -v 8.0.

    php -M gibt zwar immer noch alles aus, aber phpquery -v 8.0 -M und phpinfo(); zeigen nur noch die aktiven an.

    Eine schwere Geburt ...
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum