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.ini
so 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 /etc
hier kompiliert:
/etc/php-5.2.8/
Darin befand sich eine php.ini-recommended
Datei, an der ich einige Änderungen vorgenommen und die ich umbenannt hatte, php.ini
damit PHP sie verwenden konnte. Aber als ich meinen Browser öffnete, meinen Verlauf löschte und zur http://localhost<CRM dir>/install.php
Adresse 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.php
Skripts 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 .php
weist 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_php
und 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:
Erstellen Sie PHP aus dem Quellcode.
./configure
Verwenden Sie in diesem Schritt--with-apxs2
. Dadurch wird ein gemeinsam genutztes Apache 2-Handlermodul für Sie erstellt.Stellen Sie sicher, dass
apxs
in 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
Nachdem der Buildvorgang abgeschlossen ist (also nach
make
odermake test
), führen Sie es ausmake 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-apxs2
das 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
LoadModule
Versionen 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_php
oder verwenden. Für PHP5 war es und ; für PHP7 ist es und und für PHP8 ist es und .php-fpm
php5_module
mod_php5
php7_module
mod_php7
php_module
mod_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 IfModule
Abschnitte: Einen zum Aktivieren, php-fpm
wenn Sie nicht verwenden mod_php
, und einen zum Aktivieren, mod_php
wenn 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 IfModule
Abschnitt wie diesem umgeben:
<IfModule !mod_php.c>
# Enable PHP-FPM configuration
</IfModule>
Und machen Sie dasselbe mod_php
auch 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 httpd
auf Centos7 verwendet