webentwicklung-frage-antwort-db.com.de

Leer werden PHP Seite über Apache

In einem neu eingerichteten digitalOcean-Cloud-Server (CentOS) habe ich PHP und Apache installiert. Der Webserver läuft gut:

[[email protected] httpd]# service httpd status
httpd (pid  11232) is running...
[[email protected] httpd]# php --version | head -1
PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57) 

Der Browser zeigt jedoch leere Seiten (weiße Seite) an, wenn ich versuche, eine PHP-Seite aufzurufen.

Folgendes habe ich bisher zur Problembehandlung getan:

  1. Eine Seite mit folgendem Inhalt erstellt: <?php phpinfo(); ?>. Bei Anzeige aus dem Browser wird eine leere Seite angezeigt.
  2. Nur um sicherzustellen, dass Apache auf das richtige Verzeichnis zeigt, eine statische .html-Seite dort platziert hat und festgestellt hat, dass es im Browser einwandfrei funktioniert, also funktioniert Apache und das Verzeichnis ist korrekt.
  3. In /etc/php.ini wurde die display_errors-Direktive in On geändert. Noch leere Seite
  4. In der Apache-Konfigurationsdatei (/etc/httpd/conf/httpd.conf) wurde diese Zeile Include conf.d/*.conf gefunden. Im conf.d-Verzeichnis befindet sich eine php.conf-Datei mit der folgenden Zeile: LoadModule php5_module modules/libphp5.so. Stellen Sie sicher, dass diese .so-Datei tatsächlich an dieser Stelle vorhanden ist.
  5. In derselben Datei habe ich auch diese beiden Zeilen: AddHandler php5-script .php und AddType text/html .php
  6. Die PHP-Seite wurde von der CLI aus ausgeführt, sie funktioniert einwandfrei - PHP arbeitet also lokal.

Warum wird dann immer eine leere/weiße Seite über dem Browser angezeigt? Was fehlt mir noch?

EDIT Basierend auf den Vorschlägen von @Nathan 

  1. Ich habe die Apache-Fehlerprotokolldatei überprüft und konnte dort keine Fehlermeldung finden.
  2. Mein /etc/php.ini sagt, php error_log befindet sich als syslog. Also habe ich /var/log/messages überprüft, konnte aber keine PHP Fehlermeldung finden
  3. Als Nächstes füge ich etwas normale HTML in die PHP-Datei ein, die den Aufruf von phpinfo() enthält. Interessanterweise fand ich heraus, dass auch die normalen HTML-Texte nicht kommen. Mit still wird eine leere Seite erzeugt.
  4. Dann habe ich Apache access log überprüft. Überraschung! Es gibt keine GET-Anforderung für eine der PHP -Dateien, die ich im Browser laden wollte. AberGETrequest für alle non-php -Dateien gibt es mit 200-Returncode. 

Apache protokolliert nicht sogar eine Zugriffsanforderung für PHP -Dateien. Irgendeine Idee, warum würde das passieren?

10
hashbrown

check dein phpinfo () Skript aus.

<?php
phpinfo();
?>

fehlt das "php" hinter dem ersten "?" wird eine leere Seite geben

15
linuxmint17

Ich denke, Ihre PHP-Installation mit Apache ist fehlerhaft. Deswegen können Sie keine PHP-Seite in Ihrem Webserver sehen. Reinigen Sie alle vorhandenen Apps, wie httpd, php, php-fpm, php-cli usw., und entfernen Sie isntall in dieser Reihenfolge

yum install httpd -y
yum install php php-common php-cli php-Gd php-curl php-fpm -y

stellen Sie dann sicher, dass Sie Ihren httpd-Server neu starten. 

service httpd restart

Installieren Sie mod_fastcgi:

yum install  mod_fastcgi

Starten Sie den Dienst:

service php-fpm start

Apache neu starten:

service httpd restart

5. Konfiguration von Apache mit PHP-FPM

Öffnen Sie die Datei fastcgi.conf:

nano /etc/httpd/conf.d/fastcgi.conf

Fügen Sie dies am Ende der Datei hinzu:

<IfModule mod_fastcgi.c>
                DirectoryIndex index.html index.shtml index.cgi index.php
                AddHandler php5-fcgi .php
                Action php5-fcgi /php5-fcgi
                Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
                FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -Host 127.0.0.1:9000 -pass-header Authorization
</IfModule>

Nach dieser Suche nach "FastCgiWrapper" und vergewissern Sie sich, dass "Aus" eingestellt ist, und speichern Sie die Datei. 

Das Verzeichnis/usr/lib/cgi-bin/muss vorhanden sein, also erstellen wir es:

mkdir /usr/lib/cgi-bin/ 

Wenn mod_php installiert und aktiviert ist, müssen Sie es deaktivieren. Öffnen Sie die Konfiguration unter /etc/httpd/conf.d/php.conf:

nano /etc/httpd/conf.d/php.conf

Kommentieren Sie die AddHandler- und AddType-Zeilen aus, sodass es hier so aussieht:

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>
#
# Cause the PHP interpreter to handle files with a .php extension.
#
#AddHandler php5-script .php
#AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps

Speichern Sie die Datei und starten Sie Apache neu:

service httpd restart
5
DeSmOnd

Ich habe das gleiche Problem ....__ Das Problem liegt in den iptables. ( Es sieht so aus )

Versuche es mit:

service iptables stop
## check if it stop...
service iptables status

Versuchen Sie dann erneut, die Seite erneut zu laden.

Wenn Sie eine andere Lösung hatten, teilen Sie diese bitte mit.

[ edit ] Der Neustart des iptables-Dienstes funktioniert für mich.

Versuchen:

service iptables restart
1
wwwanaya

Navigieren Sie direkt zur PHP-Datei? Oder gehst du einfach zum Verzeichnis root?

Wenn dies der Fall ist, erkennt Apache möglicherweise .php nicht als Verzeichnisindex.

Erstellen Sie zum Testen eine .htaccess-Datei in Ihrem Webstamm mit der folgenden Zeile:

DirectoryIndex index.php
1
Aidan

Zunächst sollten Sie die Berechtigungen Ihrer Datei überprüfen. Wenn Sie der Öffentlichkeit keine Leseberechtigung gewähren, erstellt Apache eine leere Seite ohne Fehler.

1
Saemmel

Sorry, einen alten Thread neu zu veröffentlichen ... das ist wichtig.

Ich hatte auch diese Probleme, wo keine HTML-Antwort ausgegeben wurde

Nachdem ich die php.ini oder meine Apache-Conf-Dateien noch einmal überprüft hatte und immer noch keine Ausgabe erhielt, stellte ich später fest, dass ich den Fehler eines Include/Requests einer Klasse mit @ unterdrückte, der in einer Konstruktorfunktion verschachtelt war. In der enthaltenen Datei ist ein Syntaxfehler aufgetreten, der die gesamte Ausgabe gestoppt hat, wenn Fehler ausgegeben wurden.

Überprüfen Sie also zuerst Ihre Handler. Wenn Sie Ihre gesamte Ausgabe zuerst in vars speichern und zuerst verschiedene Skripts enthalten, die fehlschlagen, müssen Sie diese Fehler sehen. Wenn Sie Dateihandlerfehler unterdrücken, wird ein leerer Bildschirm angezeigt, wenn in der Datei ein Syntaxfehler vorliegt.

Durchsuchen Sie Ihre Dateien nach allen Instanzen von @ in Ihrem PHP-Code. Dann wandeln Sie @include "/path_to/script.php"; in include "/path_to/script.php"; oder irgendetwas @$foo in $foo um. Var kann auf eine Abhängigkeit verweisen, die dazu führt, dass Ihr Skript mit dem HTTPd-Fehlerprotokoll oder der http-Antwort endet.

0
Paul Latour

Es ist schon einige Zeit her, aber ich wollte auf diese Frage zurückkommen, um zu aktualisieren, dass das Problem bei der Einrichtung der Verzeichnisberechtigung lag.

Der von mir verwendete FPM-Benutzer hatte nicht die erforderliche Berechtigung zum Ausführen des index.php-Datei im Webstamm.

Um diese Probleme in Zukunft zu vermeiden, habe ich ein automatisiertes Bash-Skript erstellt, mit dem Webserver in DigitalOcean-Boxen automatisch erstellt und konfiguriert werden. Bitte schauen Sie hier nach https://github.com/akash-mitra/fairy

Dieses Skript wird automatisch,

  • Installiert Nginx
  • Erstellen Sie einen virtuellen Serverblock für nginx
  • Installiert PHP, PHP APC, PHP Curl usw.
  • Unterstützt PHP Fast Process Manager (php-fpm)
  • Installiert Memcached
  • Installiert die Datenbank (MariaDB/MySQL)
  • Optional können Sie PHP Composer und Laravel
  • Konfiguriert und stärkt SSH
  • Aktiviert die Firewall
  • Aktiviert optional den SWAP-Speicherplatz im DO-Server und behebt ein Gebietsschema-Problem
0
hashbrown

Da alles im Standardzustand angezeigt wird, haben Sie diesen Teil nur zur Bestätigung geprüft 

cat /etc/php.ini | grep log_errors

Wenn log_errors deaktiviert ist, aktivieren Sie es und überprüfen Sie dieses Protokoll nach dem Neustart von httpd ./var/log/httpd/error_log

-- Überprüfen Sie auch diesen Teil in der PHP-Konfiguration. 
cat /etc/php.ini | grep error_reporting 

Dieser Wert sollte standardmäßig aktiviert sein, damit display_errors funktioniert. 
error_reporting = E_ALL

0
Allie