dedlfix: php.ini, was ist wichtig?

Beitrag lesen

echo $begrüßung;

um PHP Version 5 nutzen zu können, muss ich auf meinem Webserver die php.ini konfigurieren,

Das ist nicht richtig. Der Webserver muss konfiguriert werden: https://forum.selfhtml.org/?t=175183&m=1151541 Die php.ini kann wegbleiben, wenn du mit den Vorgaben des Providers zufrieden bist. Man ist das vor allem dann nicht, wenn man restriktivere Vorgaben liebt.

um keine Fehler zu machen, habe ich eine Leere php.ini ins Root-Verzeichnis hochgeladen, und danach die Einstellungen verglichen.
Mit einer neuen selbst angelegten php.ini verändere ich einige voreinstellungen, die vom Webhoster vorgegeben waren.

Kleiner Irrtum. Wenn du eine php.ini in das Verzeichnis des aufgerufenen Scripts legst, dann gilt allein diese. Sie gilt für alle in diesem Verzeichnis gestarteten Scripte, aber nicht für in Unterverzeichnissen gestartete Scripte. (Beachte die Formulierung "gestartet". php.ini-Dateien aus Verzeichnissen inkludierter Dateien sind nicht von Belang.)

Die Voreinstellungen des Providers - mitunter auch sinnvolle - sind komplett verschwunden und nur noch die PHP-Default-Werte aktiv (wobei die der Provider auch beim Kompilieren von PHP beeinflussen kann). Dieses Verhalten gilt, wenn PHP als CGI eingebunden ist, so wie das bei 1&1 der Fall ist. (Wenn PHP als Apache-Modul eingebunden ist, dann wirken Einstellungen in der .htaccess ergänzend zu den Default-Einstellungen und den Provider-Vorgaben.)

Es ist sinnvoll, dass du eine phpinfo()-Datei in einem Verzeichnis ohne eigene php.ini stehen hast. Dann siehst du die Providervorgaben.

In jeder phpinfo()-Ausgabe steht in der ersten Tabelle, welche php.ini-Datei(en) für dieses Script aktiv waren. Hab immer ein Auge auf diese Zeile(n), damit du nicht in falschen php.inis arbeitest.

Jetzt würde ich gern wissen, was davon Sinnvoll ist und was ich gegebenenfalls dann selbst in meine neue php.ini schreiben sollte.

Vergleiche am besten die Providervorgaben mit einer phpinfo()-Ausgabe aus einem Verzeichnis mit zunächst leerer php.ini. Erstelle mindestens für die abweichenden Sachen eigene Einträge. Beachte dabei die Einstellungen aus dem Abschnitt "PHP Core" und von den Extensions, die du zu verwenden gedenkst.

Die folgenden Punkte waren vorher gar nicht da:
HTTP_CACHE_CONTROL              max-age=0     nur jetzt
_SERVER["HTTP_CACHE_CONTROL"]   max-age=0     nur jetzt
_ENV["HTTP_CACHE_CONTROL"]      max-age=0     nur jetzt

Die Werte aus den Abschnitten Environment und PHP Variablen sind unwichtig, bzw. nicht über die php.ini änderbar. Im Prinzip musst du nur die Tabellen ansehen, die die Spalten Local Value und Master Value haben, und davon auch nur den Local Value.

Einige grundlegend einschränkende Einstellungen werden bei 1&1 außerhalb PHPs geregelt. Beispielsweise ist das die Script-Laufzeit. Sie orientiert sich nicht an max_execution_time. Ein Scriptverarbeitungsprozess, der länger als die per Vertrag zugestandene Prozessorzeit benötigt, wird "von außen" abgeschossen. Die Prozessorzeit ist dabei die tatsächlich in Anspruch genommene Belastung des Prozessors, nicht die Zeit gemäß einer Uhr. Wenn ein Script darauf wartet, dass das DBMS sich auströdelt, dann wird kaum Prozessorzeit verbraucht.

Hier mal noch ein paar persönliche Empfehlungen meinerseits:

allow_url_fopen - nur dann anschalten, wenn du es brauchst, also mit Dateizugriffsfunktionen Webrequests machen möchtest
allow_url_include = off, Dateien von anderen Servern will man nicht inkludieren und ausführen.
display_errors = off, zumindest im Produktivbetrieb. Außenstehende benötigen die Details der Fehlermeldungen nicht. Wie man dem Administrator die Fehlermeldungen des laufenden Betriebs zukommen lässt, ist ein anderes Thema.
magic_quotes_gpc = off, schon oft genug kommentiert.
magic_quotes_runtime = off
register_globals = off, will man nicht mehr haben
register_long_arrays = off, HTTP_*_VARS sind auch veraltet
safe_mode = off, braucht man bei CGI nicht wirklich.
short_open_tag = off, ist jedoch Geschmackssache.
session.save_path = eigenes Verzeichnis unterhalb des Kunden-Verzeichnisses, jedoch unbedingt außerhalb aller DocumentRoots. Bei 1&1 kann man ja jede Domain, auch die inklusive sblafasel.online.de, auf Unterverzeichnisse des "KundenRoots" zeigen lassen. Das sollte man auch nutzen, denn dann kann man weitere Verzeichnisse anlegen, auf die keine Domain zeigt und damit aus dem Web nicht erreichbar sind.

echo "$verabschiedung $name";