Wie aktiviere ich PHP 7.0 für Apache2 auf virtuellen Hosts unter Ubuntu 16.04?

Wie aktiviere ich PHP 7.0 für Apache2 auf virtuellen Hosts unter Ubuntu 16.04?

Zunächst einmal funktioniert mein Beispiel eines virtuellen Hosts ohne Einbettung <? php echo 'Hello World'; ?>in index.html.

Apachebefindet sich auf derselben Maschine, die ich verwende. PHPist auf dieser Maschine zweimal verfügbar.

$ which php
/usr/bin/php
$ which php7.0 
/usr/bin/php7.0

Außerdem: libapache2-mod-php7.0ist bereits installiert.

Was ich bisher gemacht habe:

$ sudo mkdir /var/www/www.virtualhost.com/
$ cd /var/www/www.virtualhost.com/
$ sudo cat > index.html
<html>
    <body>
        <h1>My virtualhost</h1>
        PHP Test:<br>
        <?php echo "PHP"; ?>
    </body>
</html>
ctrl+d
$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-availble/virtualhost.com.conf

Nach dem Bearbeiten meiner virtualhost.com.confDatei sieht sie so aus:

<VirtualHost *:80>

    ServerName www.virtualhost.com
    ServerAlias virtualhost.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/www.virtualhost.com
    DirectoryIndex index.html index.php

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined


    <Directory /var/www/www.virtualhost.com/>
            Options +Indexes -FollowSymlinks
            AllowOverride None
    </Directory>

    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Anschließend habe ich meine Site aktiviert, einen Eintrag in meiner /etc/hostsDatei vorgenommen und apache2mit folgenden Befehlen neu gestartet:

$ sudo a2ensite virtualhost.com.conf
$ sudo apache2ctl restart

Die neuen Einträge in meinem /etc/hostssind:

127.0.0.1       www.testhost.com    
127.0.0.1       www.virtualhost.com

Folgende Module sind aktiviert:

$ a2query -m
authz_host (enabled by maintainer script)
proxy_fcgi (enabled by site administrator)
socache_shmcb (enabled by site administrator)
negotiation (enabled by maintainer script)
filter (enabled by maintainer script)
access_compat (enabled by maintainer script)
authz_core (enabled by maintainer script)
deflate (enabled by maintainer script)
authn_file (enabled by maintainer script)
php7.0 (enabled by maintainer script)
authz_user (enabled by maintainer script)
authnz_fcgi (enabled by site administrator)
mime (enabled by maintainer script)
proxy (enabled by site administrator)
mpm_prefork (enabled by site administrator)
dir (enabled by maintainer script)
alias (enabled by maintainer script)
auth_basic (enabled by maintainer script)
setenvif (enabled by maintainer script)
cgi (enabled by site administrator)
env (enabled by maintainer script)
autoindex (enabled by maintainer script)
authn_core (enabled by maintainer script)
status (enabled by maintainer script)
ssl (enabled by site administrator)

Ohne diese Zeile funktioniert die Site. Wenn ich diese Zeile jedoch einbette, wird das Echo von PHP nicht ausgegeben <?php echo "PHP"; ?>.index.html

Brauche ich sowas wie

LoadModule php7_module modules/libphp7.so

in meinem /etc/apache2/apache2.conf?

Jeder Hinweis zur Lösung dieses Problems ist willkommen.

Antwort1

Damit der eingebettete PHP-Code in einer Datei ausgeführt werden kann, muss die Datei tatsächlich durch den PHP-Interpreter laufen. Standardmäßig .phpwerden nur Dateien mit der Endung (und einigen anderen Dateierweiterungen) durch den PHP-Interpreter gesendet, da das standardmäßige Senden aller Dateien durch den PHP-Interpreter die Leistung verringert und unter Umständen Sicherheits- oder Funktionsprobleme verursachen kann.

Um Ihrem Webserver mitzuteilen, dass alle Dateien mit der Endung .php .htmlüber den PHP-Interpreter gesendet werden sollen, sollten Sie Ihrer Vhost-Konfiguration die folgende Zeile hinzufügen:

AddHandler application/x-httpd-php70 .html

verwandte Informationen