PHP 8.4.0 RC3 available for testing

Apache 2.x auf Unixsystemen

Dieser Abschnitt enthält Hinweise und Tipps, die sich auf die Installation von PHP speziell für Apache 2.x auf Unixsystemen beziehen.

Warnung

Wir empfehlen, in einer Produktionsumgebung kein Threaded MPM mit Apache2 zu verwenden. Verwenden Sie stattdessen das Prefork MPM, welches der Standard-MPM für Apace 2.0 und 2.2 ist. Für weitere Informationen und die Gründe lesen Sie bitte den entsprechenden FAQ-Eintrag über die Verwendung von Apache2 mit Threaded MPM.

Die » Apache Dokumentation ist die maßgebliche Informationsquelle für den Apache 2.x Server. Dort können weitere Informationen über Installationsoptionen für Apache gefunden werden.

Die aktuellste Version des Apache HTTP Servers kann von der » Apache Download Site bezogen werden, und eine passende PHP-Version von den oben angegebenen Quellen. Dieser Schnelleinstieg behandelt nur die Grundlagen, um mit Apache 2.x und PHP einzusteigen. Für mehr Informationen lesen Sie bitte die » Apache-Dokumentation. Versionsnummern wurden hier ausgelassen, um sicherzustellen, dass die Anweisungen nicht inkorrekt sind. In den folgenden Beispielen sollte 'NN' durch die spezifische Version des verwendeten Apache ersetzt werden.

Es gibt aktuell zwei Versionen von Apache 2.x: 2.4 und 2.2. Obwohl es verschiedene Gründe gibt, sich für eine zu entscheiden, ist 2.4 die aktuellste Version, und diejenige, die empfohlen wird, wenn sie diese Möglichkeit haben. Allerdings funktionieren die folgenden Anweisungen sowohl für 2.4 als auch 2.2. Es ist zu beachten, dass Apache httpd 2.2 offiziell das Lebensende erreicht hat, so dass keine Weiterentwicklungen oder Fehlerkorrekturen mehr erfolgen werden.

  1. Beziehen Sie den Apache HTTP Server vom oben genannten Ort, und entpacken Sie ihn:

    tar -xzf httpd-2.x.NN.tar.gz
    
  2. Beziehen und entpacken Sie die PHP-Quellen gleichermaßen:

    tar -xzf php-NN.tar.gz
    
  3. Kompilieren und installieren Sie Apache. Entnehmen Sie der Apache-Installationsdokumentation weitere Details zur Kompilierung.

    cd httpd-2_x_NN
    ./configure --enable-so
    make
    make install
    
  4. Nun steht Ihnen Apache 2.x.NN unter /usr/local/apache2 zur Verfügung, konfiguriert mit Unterstützung für nachladbare Module und dem Standard MPM Prefork. Um diese Installation zu testen, verwenden Sie die übliche Prozedur, den Apacheserver zu starten, also z. B.:

    /usr/local/apache2/bin/apachectl start
    
    Stoppen Sie nun den Server, um mit der Konfiguration von PHP fortzufahren:
    /usr/local/apache2/bin/apachectl stop
    

  5. Konfigurieren und kompilieren Sie nun Ihr PHP. Dies ist die Stelle, an der Sie Ihr PHP mit verschiedenen Optionen, wie etwa installierten Erweiterungen, anpassen können. Rufen Sie ./configure --help auf, um eine Liste der verfügbaren Optionen zu erhalten. In unserem Beispiel werden wir eine einfache Konfiguration mit Unterstützung für Apache 2 und MySQL erzeugen.

    Wenn Sie Apache aus den Quelltexten kompiliert haben, wie oben beschrieben wurde, dann stimmt im folgenden Beispiel der Pfad von apxs, aber wenn Sie Apache auf andere Weise installiert haben, müssen Sie den Pfad von apxs entsprechend anpassen. Es ist zu beachten, dass einige Distros möglicherweise apxs zu apxs2 umbenennen.

    cd ../php-NN
    ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
    make
    make install
    

    Wenn Sie sich entscheiden, Ihre Konfigurationsoptionen nach der Installation zu ändern, müssen Sie die Schritte configure, make, und make install erneut ausführen. Um das neue Modul nutzen zu können, muss Apache nur neu gestartet werden. Eine erneute Kompilierung des Apache ist nicht nötig.

    Beachten Sie, dass, wenn nicht anders erwähnt, make install ebenso PEAR und verschiedene PHP-Werkzeuge wie phpize, PHP CLI und anderes installieren wird.

  6. Ihre php.ini einrichten

    cp php.ini-development /usr/local/lib/php.ini
    

    Sie können Ihre .ini-Datei ändern, um verschiedene PHP-Optionen zu setzen. Wenn Sie die php.ini-Datei an einer anderen Stelle bevorzugen, verwenden Sie --with-config-file-path=/some/path in Schritt 5.

    Wenn Sie sich stattdessen für php.ini-production entscheiden, stellen Sie sicher, dass Sie die darin enthaltene Liste von Änderungen lesen, da diese das Verhalten von PHP beeinflussen.

  7. Bearbeiten Sie Ihre httpd.conf, um das PHP Modul zu laden. Der Pfad auf der rechten Seite der Anweisung LoadModule muss auf den Ort des PHP-Moduls auf Ihrem System zeigen. Das obige make install könnte dies bereits für Sie hinzugefügt haben, aber Stellen Sie sicher, dass dies der Fall ist.

    Für PHP 8:

    LoadModule php_module modules/libphp.so

    Für PHP 7:

    LoadModule php7_module modules/libphp7.so
  8. Weisen Sie Apache an, bestimmte Dateiendungen als PHP Skripte zu behandeln. Zum Beispiel werden wir den Apache Dateien mit der Endung .php als PHP ausführen lassen. Anstatt nur die Apache-Direktive AddType zu verwenden, wollen wir zusätzlich verhindern, dass potentiell gefährliche hochgeladene und erzeugte Dateien wie exploit.php.jpg als PHP-Dateien ausgeführt werden. Wenn Sie dieses Beispiel verwenden, können Sie jede Dateiendung als PHP interpretieren lassen, wenn Sie sie einfach hinzufügen. Wir demonstrieren dies, indem wir .php einfügen.

    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>

    Oder wenn wir erlauben wollen, dass nur Dateien mit den Endungen .php, .php2, .php3, .php4, .php5, .php6 und .phtml als PHP interpretiert werden können, verwenden wir ein Statement wie dieses:

    <FilesMatch "\.ph(p[2-6]?|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>

    Und um zu erlauben, dass .phps-Dateien vom PHP Source-Filter verarbeitet und als Quellcode mit Syntax-Highlighting angezeigt werden, verwenden Sie:

    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>

    mod_rewrite kann verwendet werden, um zu erlauben, dass jede beliebige .php-Datei als Quellcode mit Syntax-Highlighting angezeigt wird, ohne dass Sie die Datei zu .phps umbenennen oder kopieren müssen:

    RewriteEngine On
    RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]

    Der PHP-Source-Filter sollte auf Produktionssystemen nicht aktiviert werden, da er vertrauliche oder anderweitig sensible Informationen, die im Quellcode enthalten sind, preisgeben könnte.

  9. Verwenden Sie die übliche Prozedur, um den Apache-Server zu starten, z. B.:

    /usr/local/apache2/bin/apachectl start
    

    ODER

    service httpd restart
    

Wenn Sie den obigen Anweisungen folgen, werden Sie einen laufenden Apache2 mit Unterstützung für PHP als SAPI-Modul erhalten. Natürlich existieren für Apache und PHP viele weitere Konfigurationseinstellungen. Verwenden Sie ./configure --help im jeweiligen Quellcodeverzeichnis, um weitere Informationen zu erhalten.

Apache2 kann multithreaded kompiliert werden, indem das worker-MPM anstatt des standardmäßigen prefork-MPM für den Build gewählt wird. Dies erfolgt, indem die folgende Option zu dem Argument, das weiter oben in Schritt 3 an ./configure übergeben wird, hinzugefügt wird:

--with-mpm=worker

Dies sollte nicht durchgeführt werden, ohne sich der Konsequenzen dieser Entscheidung bewusst zu sein, und zumindest eine angemesse Kenntnis der Implikationen zu haben. Die Apache-Dokumentation bezüglich der » MPM-Module erörtert MPMs sehr ausführlich.

Hinweis:

Das Apache MultiViews FAQ erörtert die Verwendung von Multiviews mit PHP.

Hinweis:

Um eine Multithreaded-Version von Apache zu erzeugen, muss das Zielsystem Threads unterstützen. In diesem Fall sollte auch PHP mit der Zend Thread Safety (ZTS) kompiliert werden. Unter dieser Konfiguration sind nicht alle Erweiterungen verfügbar. Die empfohlene Einstellung ist es, Apache mit dem standardmäßigen prefork-MPM-Modul zu bauen.

add a note

User Contributed Notes 2 notes

up
16
nmmm at nmmm dot nu
15 years ago
When I upgrade to apache 2.2, this:

AddType application/x-httpd-php .php5
AddType application/x-httpd-php .php42
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtm
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .asp

...does not worked for me, so I did this:

<FilesMatch "\.(php*|phtm|phtml|asp|aspx)$">
SetHandler application/x-httpd-php
</FilesMatch>

Another interesting point with Apache 2.2 is following.
Let suppose we installed PHP as module. But for some directory, we need to use PHP as CGI (probably because of custom configuration). This can be done using:

<FilesMatch "\.(php*|phtm|phtml|asp|aspx)$">
SetHandler none
</FilesMatch>

AddType application/x-httpd-php-custom .php
Action application/x-httpd-php-custom /cgi-bin/php-huge

Note type must be different than "application/x-httpd-php" and also you need to deactivate the handler on sertain extention. You can do mixed configuration:

<FilesMatch "\.(php)$">
SetHandler none
</FilesMatch>

AddType application/x-httpd-php-custom .php
Action application/x-httpd-php-custom /cgi-bin/php-huge

in such case files like *.php5 and so on will be parsed via module, but *.php will go to php-huge executable.
up
8
Morning Star
1 year ago
I had just installed php8.1.12 on a machine used for writing C code.

Below are some libraries that I needed to download on a debian-based OS.

apt-get install libpcre3 libpcre3-dev
apt-get install apache2-dev
apt-get install libxml2-dev
apt-get install libsqlite3-dev

These were the missing packages that I required.
If you get an error regarding a missing package or library, for example when I needed sqlite3, run the command:

apt search sqlite3

And you'll be able to see if there's any dev or lib packages.

The apache2 instructions worked flawlessly at the time of php8.1.12; and in order to get certain requirements for an application, I had to run the php configure file like so:

./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql --with-mysqli --with-zip --enable-gd

The extra flags allowed me to use both types of mysql, allowed me to utilize PHP zip archiving, and allowed me to use Gnatt stuff.
To Top