Wie ändere ich die von Apache2 verwendete PHP-Version?

Wie ändere ich die von Apache2 verwendete PHP-Version?

Ubuntu 10.04, MySQL 5.1, Apache 2.2 und PHP 5.2/5.3:

Ich habe gerade festgestellt, dass ich für eine CRM-Anwendung die falsche PHP-Version verwende. Nachdem ich herausgefunden hatte, wie ich ein einfaches phpinfo()Skript erstellen kann, das mir mitteilt, was Apache2 verwendet, habe ich versucht, es php.iniso zu ändern, dass mein Webserver das gewünschte PHP verwendet. Nun, das ist mein Problem. Ich bin mir nicht sicher, wie ich das machen soll.

Ich habe die gewünschte PHP-Version /etchier kompiliert:

/etc/php-5.2.8/

Darin befand sich eine php.ini-recommendedDatei, an der ich einige Änderungen vorgenommen und die ich umbenannt hatte, php.inidamit PHP sie verwenden konnte. Aber als ich meinen Browser öffnete, meinen Verlauf löschte und zur http://localhost<CRM dir>/install.phpAdresse ging, sagte der Assistent immer noch, dass ich nicht die richtige Version von PHP verwende.

Bezogen auf dieser Beitragwas muss ich tun, um die PHP-Version zu ändern, die nach dem Ausführen meines test.phpSkripts angezeigt wird? Mit anderen Worten: phpinfo()Angenommen, ich verwende PHP 5.3.2, möchte es aber auf meine kompilierte Version 5.2.8 ändern, die sich in befindet /etc.

Antwort1

Abhängig von Ihrem Server sollten Sie sich Apache ansehen, nicht PHP.

(Für RHEL/CentOS) siehe/etc/httpd/conf.d/php.ini

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated web pages.
#
LoadModule php5_module modules/libphp5.so
#
# Causes the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

Sie werden sehen, dass Ihr PHP-Modul ist modules/libphp5.so.

AddHandler php5-script .phpweist Apache an, PHP für alle Dateien mit der Erweiterung auszuführen .php.

Wenn Sie ein RPM-basiertes Betriebssystem verwenden, ist es wahrscheinlich einfacher, die aktuelle PHP-Version zu deinstallieren (vorausgesetzt, Sie können das) und die gesuchte Version neu zu installieren.

rpm -qa | grep php

zeigt Ihnen, welche PHP-Version aktuell installiert ist.

Antwort2

Wenn Sie bereits eine andere PHP-Version installiert haben, müssen Sie nur das von Apache verwendete PHP*-Modul ändern.

Ich habe beispielsweise PHP5 und PHP7.0. Wenn ich möchte, dass Apache PHP7.0 verwendet, muss ich nur sein Modul aktivieren und das PHP5-Modul deaktivieren.

sudo a2dismod php5
sudo a2enmod php7.0

Antwort3

Es gibt zwei Hauptmethoden, um eine neue PHP-Version zu installieren und Apache anzuweisen, sie zu verwenden: mod_phpund php-fpm.

Notiz:Die bevorzugte Methode ist php-fpm, und viele neue Distributionen (einschließlich Fedora) verwenden sie standardmäßig.

Installieren Sie PHP als Apache SAPI-Modul

Hierist die Anleitung hierzu für Unix-Systeme aus der offiziellen Dokumentation. Es fehlen einige Punkte (zumindest für mein Setup), also gehe ich die Schritte durch:

  1. Erstellen Sie PHP aus dem Quellcode. ./configureVerwenden Sie in diesem Schritt --with-apxs2. Dadurch wird ein gemeinsam genutztes Apache 2-Handlermodul für Sie erstellt.

    Stellen Sie sicher, dass apxsin Ihrem Pfad ein Befehl definiert ist, oder geben Sie dessen Pfad als Wert der Option an (z. B. --with-apxs2=/path/to/apxs).

    Wenn Sie Apache beispielsweise systemweit installiert haben und diesen Befehl auch installieren möchten (z. B. in einer lokalen Umgebung), können Sie ihn unter Fedora und seinen Derivaten wie folgt installieren:

    sudo dnf install httpd-devel
    
  2. Nachdem der Buildvorgang abgeschlossen ist (also nach makeoder make test), führen Sie es aus make install(möglicherweise als Root). Dadurch wird PHP natürlich in dem von Ihnen angegebenen Pfad installiert (also mit --prefix).

    Aufgrund der Option wird unmittelbar vor der Installation von PHP --with-apxs2das PHP-Modul apache2handler SAPI installiert. Es bereitet das Shared Object vor (z. B. in /usr/lib64/httpd/modules/libphp.so) und aktiviert das Modul (z. B. in /etc/httpd/conf/httpd.conf), indem je nach installierter PHP-Version eine der folgenden Zeilen zur Apache-Konfigurationsdatei hinzugefügt wird (die Zeile wird unter dem Abschnitt „Dynamic Shared Object (DSO) Support)“ eingefügt):

    # In the case of PHP8
    LoadModule php_module           /usr/lib64/httpd/modules/libphp.so
    
    # In the case of PHP7
    LoadModule php7_module          /usr/lib64/httpd/modules/libphp.so
    

    Notiz:Achten Sie beim Einschalten der PHP-Versionen, insbesondere der Hauptversionen, darauf, dass nur eine dieser LoadModuleVersionen für PHP verfügbar ist, da sich der Apache-Server sonst weigert zu starten.

Installieren Sie PHP als PHP-FPM (FastCGI Process Manager)

Wird noch bekannt gegeben. :)

Letzte Schritte

PHP 8.0 und höher, zusätzlicher Schritt

Falls Ihre Distribution PHP8 noch nicht unterstützt (z. B. Fedora 34) und Sie Apache2 vom Paketmanager installiert haben, sollten Sie noch einen weiteren Schritt ausführen.

Das Problem ist, dass Apache2 ab PHP 8.0 andere Bezeichner für SAPI-Module verwendet als zuvor. Diese Bezeichner werden verwendet, um festzustellen, ob Sie in den Konfigurationsdateien mod_phpoder verwenden. Für PHP5 war es und ; für PHP7 ist es und und für PHP8 ist es und .php-fpmphp5_modulemod_php5php7_modulemod_php7php_modulemod_php

Navigieren Sie in diesem Fall zum Konfigurationsverzeichnis von Apache2 (z. B. /etc/httpd) und beginnen Sie mit der Bearbeitung der Datei conf.d/php.conf. Dort gibt es zwei IfModuleAbschnitte: Einen zum Aktivieren, php-fpmwenn Sie nicht verwenden mod_php, und einen zum Aktivieren, mod_phpwenn Sie es verwenden (d. h. irgendwo in den Konfigurationen verwenden LoadModule). Sie sollten diese Bedingungen aktualisieren, um auch PHP8 abzudecken.

Betrachten Sie beispielsweise Folgendes:

<IfModule !mod_php5.c>
  <IfModule !mod_php7.c>
    # Enable PHP-FPM configuration
  </IfModule>
</IfModule>

Sie sollten die Kernkonfiguration mit einem weiteren IfModuleAbschnitt wie diesem umgeben:

    <IfModule !mod_php.c>
      # Enable PHP-FPM configuration
    </IfModule>

Und machen Sie dasselbe mod_phpauch für den Enabler-Konfigurationsabschnitt.

Letzter Schritt

Starten Sie den Apache-Dienst neu:

service httpd restart

Jetzt phpinfo()sollte Ihnen die neue PHP-Version angezeigt werden, die Sie gerade installiert haben. Sie sollten jetzt zufrieden sein. :)

Antwort4

Ich hatte das gleiche Problem, dass phpinfo() Version 7.0 anzeigte, obwohl ich auf Version 7.3 aktualisiert hatte. Und es stellte sich heraus, dass ich nurApache neu starten.

Ich habe es sudo systemctl restart httpdauf Centos7 verwendet

verwandte Informationen