Ich   Entwicklung   Lösungen Apache PHP mySQL  
 

Data Handling

track_vars

; Note - track_vars is ALWAYS enabled as of PHP 4.0.3

track_vars sorgt dafür, dass GET-, POST- und Cookie-Werte in den Umgebungsvariablen-Arrays $HTTP_GET_VARS, $HTTP_POST_VARS und $HTTP_COOKIE_VARS abgelegt werden. Wie Sie sehen, kann dies seit PHP 4.0.3 nicht mehr beeinflusst werden.

In neueren PHP4-Versionen gibt es zusätzlich zu den $HTTP_-Variablen die superglobalen Variablen $_SESSION, $_GET, $_REQUEST, $_POST, $_SERVER und $_COOKIE, die Sie stattdessen benutzen sollten. In PHP5 sind die neuen superglobalen Variablen Pflicht! Siehe register_long_arrays weiter unten.

Im weiteren Verlauf der Einführung werde ich noch auf die superglobalen Variablen eingehen.

arg_separator.output

Anfänger

; The separator used in PHP generated URLs to separate arguments.
; Default is "&".
;arg_separator.output = "&"

PHP generiert unter Umständen selbst URLs (beispielsweise bei der Nutzung von Sessions und Aktivierung von session.use_trans_sid). Wenn mehrere Variablen per GET übergeben werden, so müssen diese mit einem Trennzeichen von einander unterschieden werden können (Beispiel: http://www.intermitto.net/?thema=php&seite=konfig.data). Das standardmäßig eingestellte & ist aber kein valides HTML! Entfernen Sie das Semikolon, um valides HTML zu erzeugen, indem & als Trennzeichen benutzt wird, was der Browser wiederrum in & umwandelt.

arg_separator.input

; List of separator(s) used by PHP to parse input URLs into variables.
; Default is "&".
; NOTE: Every character in this directive is considered as separator!
;arg_separator.input = ";&"

Falls Sie bei arg_separator.output ein anderes Trennzeichen als & oder & angegeben haben, sollten Sie dies hier angeben, da PHP sonst Ihre Variablen nicht erkennt, wenn Sie aus der GET-Zeile eingelesen werden.

variables_order

; This directive describes the order in which PHP registers GET, POST, Cookie,
; Environment and Built-in variables (G, P, C, E & S respectively, often
; referred to as EGPCS or GPC).  Registration is done from left to right, newer
; values override older values.
variables_order = "GPCS"

Ich empfehle Ihnen register_globals zu deaktivieren (siehe nächster Punkt), dann müssen Sie sich um die Reihenfolge keine Gedanken machen.

register_globals

Anfänger

; Whether or not to register the EGPCS variables as global variables.  You may
; want to turn this off if you don't want to clutter your scripts' global scope
; with user data.  This makes most sense when coupled with track_vars - in which
; case you can access all of the GPC variables through the $HTTP_*_VARS[],
; variables.
;
; You should do your best to write your scripts so that they do not require
; register_globals to be on;  Using form variables as globals can easily lead
; to possible security problems, if the code is not very well thought of.
register_globals = Off

Belassen Sie diese Einstellung auf Off, wenn Sie sauber und sicher programmieren wollen. On hat zur Folge, dass beispielsweise eine über den URL übergebene Variable test im aufgerufenen Skript als $test zur Verfügung steht. Dadurch können nicht nur Fehler passieren, Ihr Skript wird auch angreifbar, da jeder den URL ändern kann. Stattdessen sollten Sie die neuen superglobalen Variablen $_SESSION, $_GET, $_REQUEST, $_POST etc nutzen, auf die ich in Erste Schritte noch einmal eingehen werde.

Zusatzinfo

Provider haben register_globals aktiviert, um Kompabilität mit älteren Skripten zu gewährleisten (die neuen, superglobalen Variablen gibt es erst in neueren Versionen). Haben Sie dies immer im Hinterkopf; sauber geschriebene Programme laufen unabhängig von dieser Option!

register_long_arrays

Anfänger

; Whether or not to register the old-style input arrays, HTTP_GET_VARS
; and friends. If you're not using them, it's recommended to turn them off,
; for performance reasons.
register_long_arrays = Off

Wenn auf On, stehen die (oben schon einmal erwähnten) Variablen $HTTP_GET_VARS, $HTTP_POST_VARS und $HTTP_COOKIE_VARS zur Verfügung. Stattdessen sollten die superglobalen Variablen $_SESSION, $_GET, $_REQUEST, $_POST, $_SERVER und $_COOKIE benutzt werden, diese Option kann dann auf dem Standardwert Off bleiben.

register_argc_argv

Anfänger

; This directive tells PHP whether to declare the argv&argc variables (that
; would contain the GET information).  If you don't use these variables, you
; should turn it off for increased performance.
register_argc_argv = Off

Wenn auf On, werden GET-Variablen im Array $argv gespeichert, wie in normalen Programmiersprachen üblich. Dies sollten Sie aber deaktiviert lassen, da Sie in PHP diese Variablen nicht benötigen.

post_max_size

Anfänger

; Maximum size of POST data that PHP will accept.
post_max_size = 8M

Die maximale Größe an POST-Daten (z.B. Formular-Daten oder hochgeladene Dateien), die PHP akzeptiert. Wenn Sie öfters mal über ein selbst geschriebenes Formular Mails verschicken möchten, die Anhänge mit mehr als 8 Megabyte enthalten sollen, müssen Sie diese Einstellung ändern. 8 Megabyte sollten aber im Normalfall ausreichend sein.

gpc_order

; This directive is deprecated.  Use variables_order instead.
gpc_order = "GPC"

Diese Einstellung war schon zu PHP4-Zeiten veraltet, ignorieren Sie sie. Selbst variables_order können Sie ignorieren, wenn Sie die superglobalen Variablen nutzen.

magic quotes

Anfänger

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

Die PHP-Entwickler haben sich vor einiger Zeit die magic quotes erdacht, die dafür sorgen, dass zurückgelieferte Daten aus Datenbanken (magic_quotes_runtime) und/oder Client-Requests und Cookies (magic_quotes_gpc) automatisch escaped werden; d.h., dass automatisch vor Zeichen wie ', " und \ ein Backslash (\) eingefügt wird, damit die Daten als String weiter behandelt werden können.

Dies hatte aber leider auch unerwünschte Nebeneffekte (manchmal möchte man eben keine automatisch generierten Escapezeichen haben), weshalb diese Einstellungen mittlerweile standardmäßig ausgeschaltet sind (auch, wenn im Manual teilweise noch steht, sie seien standardmäßig aktiviert). Dies sollten Sie auch so beibehalten; machen Sie sich lieber bei Bedarf Gedanken um Escapezeichen und fügen diese mit addslashes() hinzu oder entfernen Sie mit stripslashes().

Mit Vorsicht zu genießen ist vor allem die Einstellung magic_quotes_sybase, die, wenn aktiviert, die Einstellung magic_quotes_gpc deaktiviert!

auto_prepend_file und auto_append_file

Anfänger

; Automatically add files before or after any PHP document.
auto_prepend_file =
auto_append_file =

Fragen Sie mich nicht, wozu man diese Einstellung jemals aktivieren sollte. Zumindest bei Servern, auf denen mehrere Domains gehostet sind, wird es wahrscheinlich keinen Sinn machen, diese Einstellunge zu nutzen.

Als Anwendungsmöglichkeit fiele mir lediglich ein, automatisch ein Skript vor jedem Aufruf auszuführen, das eine Datenbank-Verbindung herstellt, oder den HTML-Head beinhaltet. Ob es sinnvoll ist, dies in der Konfigurationsdatei anzugeben, sei dahingestellt.

Sollte jemandem eine sinnvollere Anwendungsmöglichkeit einfallen, so würde ich diese gerne erfahren.

default_mimetype und default_charset

Anfänger

; As of 4.0b4, PHP always outputs a character encoding by default in
; the Content-type: header.  To disable sending of the charset, simply
; set it to be empty.
;
; PHP's built-in default is text/html
default_mimetype = "text/html"
;default_charset = "iso-8859-1"

Endlich kann man PHP den Standard-MIME-Typ und den Zeichensatz vorschreiben. Machen Sie Gebrauch davon! Entfernen Sie das Semikolon vor default_charset, um deutsche Umlaute nicht mehr durch Entities ersetzen zu müssen. Bei default_mimetype ist die Angabe "text/html" üblicherweise sinnvoll, es sei denn, Sie möchten dort "application/xhtml" angeben o.ä..

always_populate_raw_post_data

; Always populate the $HTTP_RAW_POST_DATA variable.
;always_populate_raw_post_data = On

Habe ich noch nie benötigt. Wenn aktiviert, gibt es eine Variable $HTTP_RAW_POST_DATA, in der alle POST-Daten stehen.

allow_webdav_methods

; Allow handling of WebDAV http requests within PHP scripts (eg.
; PROPFIND, PROPPATCH, MOVE, COPY, etc..)
; If you want to get the post data of those requests, you have to
; set always_populate_raw_post_data as well.
;allow_webdav_methods = On

Kenne ich mich nicht genug mit aus, um etwas sinnvolles darüber zu schreiben. Hat sich aber offensichtlich auch erledigt...

Paths and Directories

include_path

Anfänger

; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"

Standardmäßig ist der Include-Pfad nur das aktuelle Verzeichnis, in dem ein Skript ausgeführt wird (entspricht include_path = "." unter Windows). In den angegebenen Verzeichnissen wird nach Dateien gesucht, die per include() in ein Skript eingebunden sind.

Dies kann u.U. nützlich sein, wenn wirklich nur die Projekte einer Person/Firma auf einem Server gehostet sind; dann kann man Dateien, die von allen Projekten benötigt werden, in ein eigenes Verzeichnis verschieben. Man sollte aber bedenken, dass die Suche nach der zu inkludierenden Datei etwas Zeit beanspruchen kann (das wirkt sich natürlich erst dann aus, wenn man extensiv davon gebrauch macht).

doc_root

Anfänger

; The root of the PHP pages, used only if nonempty.
; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root
; if you are running php as a CGI under any web server (other than IIS)
; see documentation for security issues.  The alternate is to use the
; cgi.force_redirect configuration below
doc_root =

Hier können Sie den DocumentRoot Ihres Webservers angeben. Wenn angegeben, werden nur Skripte ausgeführt, wenn Sie unterhalb dieses Pfades liegen. Kann aus Sicherheitsgründen sinnvoll sein; vor allem, wenn Sie die CGI-Version von PHP einsetzen und cgi.force_redirect nicht aktiviert haben.

user_dir

; The directory under which PHP opens the script using /~username used only
; if nonempty.
user_dir =

Noch nie benötigt. Bitte melde sich Jemand bei mir, der dies sinnvoll angewendet hat.

extension_dir und enable_dl

; Directory in which the loadable extensions (modules) reside.
extension_dir = /

; Whether or not to enable the dl() function.  The dl() function does NOT work
; properly in multithreaded servers, such as IIS or Zeus, and is automatically
; disabled on them.
enable_dl = On

Werden ausführlicher auf der Seite Dynamic Extensions besprochen.

cgi.force_redirect

; cgi.force_redirect is necessary to provide security running PHP as a CGI under
; most web servers.  Left undefined, PHP turns this on by default.  You can
; turn it off here AT YOUR OWN RISK
; **You CAN safely turn this off for IIS, in fact, you MUST.**
; cgi.force_redirect = 1

Wenn PHP über das CGI ausgeführt wird, können prinzipiell beliebige Dateien (die auf dem Server liegen) über einen URL ausgeführt werden. Daher wird standardmäßig cgi.force_redirect aktiviert, was die Sicherheit dadurch erhöht, dass ein Redirect auf das Skript durchgeführt wird.

cgi.nph

; if cgi.nph is enabled it will force cgi to always sent Status: 200 with
; every request.
; cgi.nph = 1

Wenn aktiviert, sendet PHP in der CGI-Version immer einen HTTP Status 200 an den Client, was soviel heisst wie Alles in Ordnung. Ich verstehe aber ehrlich nicht, was das für einen Sinn haben sollte... Sicherheit? Wenn jemand bescheid weiss, bitte klärt mich auf: jb@intermitto.net oder Kontaktformular.

cgi.redirect_status_env

; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape
; (iPlanet) web servers, you MAY need to set an environment variable name that PHP
; will look for to know it is OK to continue execution.  Setting this variable MAY
; cause security issues, KNOW WHAT YOU ARE DOING FIRST.
; cgi.redirect_status_env = ;

Da ich keine Erfahrung mit dieser Einstellung habe, möchte ich Ihnen auch nichts Falsches erzählen.

fastcgi.impersonate

; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate
; security tokens of the calling client.  This allows IIS to define the
; security context that the request runs under.  mod_fastcgi under Apache
; does not currently support this feature (03/17/2002)
; Set to 1 if running under IIS.  Default is zero.
; fastcgi.impersonate = 1;

Nur benötigt für den MS IIS Webserver.

cgi.rfc2616_headers

; cgi.rfc2616_headers configuration option tells PHP what type of headers to
; use when sending HTTP response code. If it's set 0 PHP sends Status: header that
; is supported by Apache. When this option is set to 1 PHP will send
; RFC2616 compliant header.
; cgi.rfc2616_headers = 0

RFC 2616 ist nichts anderes als der Working Draft für HTTP/1.1, in dem unter anderem geregelt ist, was der Server zu antworten hat:

Response      = Status-Line *(( general-header | response-header | entity-header ) CRLF)
                CRLF
              [ message-body ]

SP steht für ein Leerzeichen, CRLF ist ein Zeilenumbruch. Die Status-Line besteht wiederrum aus den Angaben HTTP-Version SP Status-Code SP Reason-Phrase CRLF, wobei zu jedem Status-Code eine korrespondierende Reason-Phrase gehört. Der oben bei cgi.nph angeführte Status Code ist ein Beispiel: Status-Code 200 entspricht der Reason-Phrase OK; der bekanntere Status-Code 404 entspricht der Reason-Phrase Not Found.

Innerhalb des genereal-headers kann auch eine Zeile stehen wie Status: 200.

Leider weiss ich auch hier nicht so hundertprozentig, was es mit dieser Einstellung auf sich hat. Wer helfen möchte, dieses Tutorial so vollständig wie möglich zu machen, der kontaktiere mich: jb@intermitto.net oder Kontaktformular.

File Uploads, Fopen wrappers weiter

URL: www.intermitto.net/php/konfig/data/
© 2004-05 Jens Becker - intermitto.net v5.1
Letzte Änderung: 23.08.2005

Home - Kontaktformular - Downloads - Suche und Sitemap - Impressum
Entwicklung - Problemlösungen - Tutorials: Apache PHP mySQL

user  pass