PHP funktioniert nicht in der Apache VirtualHosting-Umgebung

PHP funktioniert nicht in der Apache VirtualHosting-Umgebung

Versuch, eine Apache VirtualHosting-Umgebung mit PHP in einem neu erstellten CentOS-Knoten unter einem DigitalOcean-Cloud-Server einzurichten.

Das Problem ist, obwohlVirtuelles Hosting funktioniert an sich, PHP nicht.

Server-Setup:

  • Webserver: CentOS 6.5 mit Apache/2.2.15
  • PHP-Version: 5.3.3 (Zur Verwendung als Apache-Modul)

Schritte gemacht:

Anmelden alsWurzelBenutzer,

  • Installieren von Apache und PHP:yum -y install httpd php
  • Erstellen Sie eine neue Konfigurationsdatei für den virtuellen Host wie unten:

Datei:/etc/httpd/conf.d/vhosts.conf

NameVirtualHost *:80
<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName example.org
     ServerAlias www.example.org
     DocumentRoot /srv/www/example.org/public_html/
     ErrorLog /srv/www/example.org/logs/error.log
     CustomLog /srv/www/example.org/logs/access.log combined
</VirtualHost>
  • Erstellen neuer Verzeichnisse für die virtuelle Hostsite

Wie unten,

mkdir -p /srv/www/example.org/public_html
mkdir -p /srv/www/example.org/logs
  • Platzieren Sie eine .phpund .htmltesten Sie Dateien wie unten:

Dateien unter /srv/www/example.org/public_html/(DocumentRoot)

echo "<HTML>It work's</HTML>"      > /srv/www/example.org/public_html/index.html
echo "<?php echo ("It works"); ?>" > /srv/www/example.org/public_html/index.php

Wenn ich dann meinen Browser auf richte index.html, funktioniert es. Aber wenn ichWenn ich meinen Browser darauf weise, index.phpwird eine leere Seite angezeigt.

Fehlerbehebung

(Dinge, die ich bereits ohne Erfolg getan/überprüft habe)

  • Sichergestellt, dass Apache ausgeführt wird und DocumentRootzugänglich ist
  • Alle Verzeichnisse 755und Dateien644
  • Apache-Zugriffsprotokoll geprüft. Die HTML-Seitenanforderungen sind mit dem Statuscode 200 vorhanden, aber .phpim Zugriffsprotokoll ist keine Seitenanforderung vorhanden.
  • Kein Fehler im Apache- oder PHP-Fehlerprotokoll, kein Fehler in/var/log/messages
  • Habe versucht, php_admin_flag engine ondie vhost-Konfigurationsdatei hinzuzufügen

Siehe auch unten den Inhalt von/etc/httpd/conf.d/php.conf

<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>
AddHandler php5-script .php
AddType text/html .php
DirectoryIndex index.php

Antwort1

Meiner Erfahrung nach rendert PHP eine leere Seite, wenn es auf einen schwerwiegenden zugrunde liegenden Fehler stößt. Normalerweise lässt sich dieser leicht beheben, aber leider wird in den Apache-Protokollen, PHP-Protokollen oder im Syslog normalerweise nichts protokolliert, was die Fehlerbehebung erschwert.

Suchen Sie Ihre php.ini-Konfigurationsdatei mit:

php -i | grep "php.ini"

Das Ergebnis sollte ungefähr wie folgt aussehen:

Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

Bearbeiten Sie diese Konfigurationsdatei (in diesem Fall /etc/php.ini) mit Ihrem bevorzugten Texteditor und stellen Sie sicher, dass die Anzeige von Fehlern und Startfehlern aktiviert ist. Die Einträge sollten folgendermaßen aussehen:

display_errors = On
display_startup_errors = On

Starten Sie Apache abschließend neu, damit es die neue PHP-Konfiguration liest und über Curl oder einen Browser auf Ihre Seite zugreift. Dies sollte eine Fehlermeldung erzeugen, die bei der Fehlerbehebung hilft.

Antwort2

Als Erstes sollten Sie die Apache-Fehlerprotokolle überprüfen, die Sie in Ihrer Apache-Konfiguration festgelegt haben; unten kopiert:

NameVirtualHost *:80
<VirtualHost *:80>
     ServerAdmin [email protected]
     ServerName example.org
     ServerAlias www.example.org
     DocumentRoot /srv/www/example.org/public_html/
     ErrorLog /srv/www/example.org/logs/error.log
     CustomLog /srv/www/example.org/logs/access.log combined
</VirtualHost>

PHP läuft unter Apache, daher werden alle auftretenden Fehler in den Serverprotokollen angezeigt. Ich empfehle, sich beim Server anzumelden und tailFolgendes zu verwenden:

tail -f -n 200 /srv/www/example.org/logs/error.log

Aber ist das für Sie das allgemeine Apache-Protokoll? Oder ist das die Konfiguration von DigitalOcean? Denn dieser Pfad /srv/www/example.org/logs/scheint ziemlich seltsam. Unter Standard-Linux wäre es an einem Ort wie diesem:

tail -f -n 200 /var/log/apache2/error.log

Unabhängig davon, wohin die Protokolle tatsächlich gesendet werden, ist dies der Schlüssel zu dem, was mit PHP und Apache auf Ihrem Server passiert – oder nicht passiert.

verwandte Informationen