Ich   Entwicklung   Lösungen Apache PHP mySQL  
 

Der Abschnitt Language Options

engine

Anfänger

; Enable the PHP scripting language engine under Apache.
engine = On

Da fragt man sich, was das soll... ganz einfach: wenn Sie PHP (zu Testzwecken oder warum auch immer) deaktivieren möchten, können Sie das hier recht einfach tun, ohne die httpd.conf ändern zu müssen. Wenn PHP als CGI-Version läuft, muss noch nicht einmal der Apache neu gestartet werden (da die CGI-Version die php.ini bei jedem Start neu einliest).

zend.ze1_compatibility_mode

; Enable compatibility mode with Zend Engine 1 (PHP 4.x).
zend.ze1_compatibility_mode = Off

Rein prinzipiell kann man die Zend Engine 2 mit PHP 4 mischen. Davon rate ich dringend ab, der Standardwert Off ist zu empfehlen.

short_open_tag

Anfänger

; Allow the <? tag.  Otherwise, only <?php and <script> tags are recognized.
short_open_tag = On

Wenn auf On, wird auch <? als Anfang von PHP interpretiert. Ich empfehle hier dringend

short_open_tag = Off

Vor allem deshalb, weil On jeglichen Konventionen widerspricht. Auch wenn der Client davon ja nichts mitbekommt, ist <? kein guter Stil. Mit <? fängt nicht nur PHP an... ein gutes Beispiel ist die XML-Deklaration zu Beginn einer XML- oder XHTML-Datei: <?xml version="1.0" ?>. Wenn Sie diese XML-Deklaration in einem PHP-Skript stehen haben, hagelt es sofort eine Fehlermeldung, da PHP die XML-Deklaration natürlich nicht versteht (und es versucht, obwohl er es nicht soll).
In neueren PHP-Versionen steht ein etwas längerer Kommentar, der ebenfalls von der Nutzung abrät. Standard ist auch in PHP 5 leider immer noch On.

asp_tags

Anfänger

; Allow ASP-style <% %> tags.
asp_tags = Off

Wenn auf On, wird auch <% als Anfang von PHP interpretiert, aber wer will denn das? <% ist schliesslich das Signal, dem ASP folgt, nicht PHP!

precision

; The number of significant digits displayed in floating point numbers.
precision    =  14

Die Anzahl der Stellen, die bei Fließkommazahlen (Gleitkommazahlen) standardmäßig angezeigt wird.

y2k_compliance

; Enforce year 2000 compliance (will cause problems with non-compliant browsers)
y2k_compliance = Off

Ich habe selbst noch nie ausprobiert, was y2k_compliance bringt. Es wird auch in der Dokumentation nicht weiter erwähnt. Ich empfehle, die Standardeinstellung (Off) zu behalten.

output_buffering

; Output buffering allows you to send header lines (including cookies) even
; after you send body content, at the price of slowing PHP's output layer a
; bit.  You can enable output buffering during runtime by calling the output
; buffering functions.  You can also enable output buffering for all files by
; setting this directive to On.  If you wish to limit the size of the buffer
; to a certain size - you can use a maximum number of bytes instead of 'On', as
; a value for this directive (e.g., output_buffering=4096).
output_buffering = 4096

Aus dem Vorspann (Unterschied zur php.ini-dist):

; - output_buffering = 4096        [Performance]
;     Set a 4KB output buffer.  Enabling output buffering typically results in less
;     writes, and sometimes less packets sent on the wire, which can often lead to
;     better performance.  The gain this directive actually yields greatly depends
;     on which Web server you're working with, and what kind of scripts you're using.

Die Ausgabe-Pufferung ist für einen Großteil der Anwendungen uninteressant, die Standardeinstellung 4096 geht also in Ordnung. Zu beachten ist aber, dass die Performance-Steigerung beim Apache meist nicht spürbar ist, zumindest für nicht vielbesuchte Server ist sie deshalb recht unwichtig. Manchmal tritt eher sogar das Gegenteil auf, zumindest beim Client. Denn dadurch, dass die Ausgabe gepuffert wird, bekommt der Browser erst später Daten, was bei langsamen Verbindungen (also ISDN oder langsamer) dazu führt, dass der Benutzer schon einmal einige Millisekunden länger warten muss, bis ihm der Browser etwas anzeigt. Je kleiner die Einstellung, desto früher werden dem Browser kleinere Häppchen geschickt, die er schneller verarbeiten kann. Die minimalste Einstellung ist Off, wobei nicht gepuffert wird. Aber auch hohe Einstellungen haben Vorteile. Hier einmal zusammengefasst:

  • Off hat den Vorteil, dass erzeugte Daten sofort zum Client geschickt und deshalb dort sofort verarbeitet werden können. Dadurch sind auch Spielereien wie <?php echo "bitte warten."; flush(); sleep(1); echo "."; flush(); sleep(1); echo "."; flush(); sleep(1); echo "."; ?> möglich. Header-Daten müssen aber natürlich als erstes gesendet werden; was aber bei sauberer Programmierung kein Problem ist.
  • Einstellung eines Bytewertes wie z.B. 4096 hat den Vorteil, dass die Server- und Netzwerk-Performance etwas besser werden (da weniger Pakete geschickt werden müssen), die Performance des Browsers geringfügig schlechter. Wenn Sie puffern möchten, ist dies empfehlenswerter als die Einstellung On, da dort eventuell eine Menge Zeit vergeht, bis der Browser Daten erhält und verarbeiten kann.
  • On puffert den kompletten Output, bevor er verschickt wird. Das hat den Vorteil, dass im Nachhinein Änderungen am Output vollzogen werden können (fortgeschrittene Programmierung, selten gebraucht) und dass Header-Daten auch nach schon erfolgter Ausgabe gesendet werden können (das ist nicht zeitlich gemeint, sondern von der Platzierung im Skript). Nachteil ist, dass der Browser erst recht spät den erzeugten Quelltext zugesendet bekommt, vor allem bei größeren Datenpaketen und langsamen Verbindungen.

Eine Empfehlung kann ich hier nicht aussprechen, weil das auf die Bedürfnisse des Anwenders ankommt. Ich tendiere aber zur Arbeit ohne Puffer, weil es zu sauberem Programmieren zwingt. Header-Daten müssen zu Beginn geschickt werden. Pufferung für bestimmte Teile des Programms kann explizit im Programm aktiviert werden, falls sie benötigt wird (mit ob_start()). Ich liesse mich (zumindest für professionelle Server) aber auch von der Pufferung überzeugen, falls mir jemand beweisen kann, dass dies die Performance wirklich verbessert.

output_handler

; You can redirect all of the output of your scripts to a function.  For
; example, if you set output_handler to "ob_gzhandler", output will be
; transparently compressed for browsers that support gzip or deflate encoding.
; Setting an output handler automatically turns on output buffering.
output_handler =

Wenn Sie einen output_handler setzen, wird output_buffering automatisch auf On gesetzt. Der gesamte Output wird dann gepuffert und der Funktion übergeben, die Sie als output_handler angegeben haben. Falls Sie sich fragen, wozu das sinnvoll sein könnte, dann brauchen Sie keinen output handler... (beispielsweise könnte man den Output komprimieren oder gar an Tidy übergeben oder ähnliches).

zlib.output_compression und zlib.output_handler

; Transparent output compression using the zlib library
; Valid values for this option are 'off', 'on', or a specific buffer size
; to be used for compression (default is 4KB)
; Note: Resulting chunk size may vary due to nature of compression. PHP
;       outputs chunks that are few hundreds bytes each as a result of compression.
;       If you want larger chunk size for better performence, enable output_buffering
;       also.
; Note: output_handler must be empty if this is set 'On' !!!!
;       Instead you must use zlib.output_handler.
zlib.output_compression = Off

; You cannot specify additional output handlers if zlib.output_compression
; is activated here. This setting does the same as output_handler but in
; a different order.
;zlib.output_handler =

Belassen Sie diese Einstellung wie sie ist, es sei denn Sie wissen genau, was Sie tun! Genau wie der Apache kann auch PHP mit zlib komprimierte Dateipakete an Browser (oder andere Clients) versenden. Ich kann dies aber nicht empfehlen, da einige Browser damit nicht umgehen können!

implicit_flush

; Implicit flush tells PHP to tell the output layer to flush itself
; automatically after every output block.  This is equivalent to calling the
; PHP function flush() after each and every call to print() or echo() and each
; and every HTML block.  Turning this option on has serious performance
; implications and is generally recommended for debugging purposes only.
implicit_flush = Off

Wie oben schon einmal angeschnitten (bei output_buffering) erhöht implicit_flush die Performance des Browsers geringfügig, während hier der Server und das Netzwerk deutlich mehr belastet werden. Belassen Sie implicit_flush am besten auf Off; falls Sie den Output doch einmal unbedingt steuern möchten, können Sie dazu flush() verwenden (oder den Output per ob_start() steuern).

unserialize_callback_func

; The unserialize callback function will called (with the undefined class'
; name as parameter), if the unserializer finds an undefined class
; which should be instanciated.
; A warning appears if the specified function is not defined, or if the
; function doesn't include/implement the missing class.
; So only set this entry, if you really want to implement such a
; callback-function.
unserialize_callback_func=

Eine neuere Einstellung. Für Anfänger völlig unbedeutend.

serialize_precision

; When floats & doubles are serialized store serialize precision significant
; digits after the floating point. The default value ensures that when floats
; are decoded with unserialize, the data will remain the same.
serialize_precision = 100

Ehrlich gesagt: wieder so eine Einstellung, die die Welt nicht braucht.

allow_call_time_pass_reference

; Whether to enable the ability to force arguments to be passed by reference
; at function call time.  This method is deprecated and is likely to be
; unsupported in future versions of PHP/Zend.  The encouraged method of
; specifying which arguments should be passed by reference is in the function
; declaration.  You're encouraged to try and turn this option Off and make
; sure your scripts work properly with it in order to ensure they will work
; with future versions of the language (you will receive a warning each time
; you use this feature, and the argument will be passed by value instead of by
; reference).
allow_call_time_pass_reference = Off

Aus dem Vorspann (Unterschied zur php.ini-dist):

; - allow_call_time_pass_reference = Off     [Code cleanliness]
;     It's not possible to decide to force a variable to be passed by reference
;     when calling a function.  The PHP 4 style to do this is by making the
;     function require the relevant argument by reference.

Eine aus Kompabilitätsgründen zu PHP 3 übernommene Einstellung, die veraltet ist und in zukünftigen Versionen von PHP nicht mehr unterstützt werden wird. Daher einfach mir vertrauen und auf Off belassen.

safe_mode

;
; Safe Mode
;
safe_mode = Off

Der sichere Modus ist eine nicht ganz unproblematische Methode, um Sicherheit bei kritischen Funktionen und Dateioperationen zu gewährleisten. Besonders problematisch ist der sichere Modus unter Windows-Betriebssystemen, denn er wurde für UNIX entwickelt und funktioniert auch nur dort halbwegs zuverlässig. Provider haben den sicheren Modus meist aktiviert, da die Benutzung einiger Funktionen, mit denen Schabernack getrieben werden kann, eingeschränkt oder untersagt ist.

Zusätzliche Hilfe

Ausführliche Informationen dazu finden Sie in einem eigenen Kapitel im PHP Manual: http://www.php.net/manual/de/features.safe-mode.php. Nebenbei: Der safe_mode hat auch Auswirkungen auf die Einstellung doc_root weiter unten.

safe_mode_gid

; By default, Safe Mode does a UID compare check when
; opening files. If you want to relax this to a GID compare,
; then turn on safe_mode_gid.
safe_mode_gid = Off

Im sicheren Modus wird normalerweise überprüft, ob das Skript den selben Besitzer hat wie die Datei, auf der eine Operation ausgeführt werden soll. Wenn safe_mode_gid auf On gestellt ist, wird stattdessen überprüft, ob der Inhaber zur selben Gruppe gehört. Um das zu verstehen sind natürlich Kenntnisse in der User-Verwaltung von UNIX nötig.

safe_mode_include_dir

; When safe_mode is on, UID/GID checks are bypassed when
; including files from this directory and its subdirectories.
; (directory must also be in include_path or full path must
; be used when including)
safe_mode_include_dir =

Diese Einstellung ersetzt die Einstellung include_dir, wenn der sichere Modus aktiviert ist. Dabei muss der safe_mode_include_dir-Pfad auch in include_dir vorkommen, sonst muss beim inkludieren der vollständige Pfad statt nur dem Dateinamen angegeben werden.

safe_mode_exec_dir

; When safe_mode is on, only executables located in the safe_mode_exec_dir
; will be allowed to be executed via the exec family of functions.
safe_mode_exec_dir =

Wenn Sie PHP im sicheren Modus betreiben werden die Funktionen exec(), system() und andere Funktionen, die Systemprogramme ausführen, nur dann gestartet, wenn Sie sich in dem mit safe_mode_exec_dir angegebenen Verzeichnis befinden. Wenn die Einstellung leer bleibt, werden solche Funktionen nicht ausgeführt.

open_basedir

; open_basedir, if set, limits all file operations to the defined directory
; and below.  This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file.
;open_basedir =

Dateioperationen dürfen im sicheren Modus nur im mit open_basedir angegebenen Verzeichnis und dessen Unterverzeichnissen ausgeführt werden. Wenn open_basedir nicht gesetzt wird, dann dürfen die erlaubten Dateioperationen weiterhin in jedem beliebigen Verzeichnis ausgeführt werden. Wie schon im englischen Kommentar erwähnt macht open_basedir vor allem dann Sinn, wenn man diese Einstellung in der httpd.conf vornimmt, um für verschiedene Domains auch verschiedene Verzeichnisse freizugeben.

safe_mode_allowed_env_vars

; Setting certain environment variables may be a potential security breach.
; This directive contains a comma-delimited list of prefixes.  In Safe Mode,
; the user may only alter environment variables whose names begin with the
; prefixes supplied here.  By default, users will only be able to set
; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR).
; Note:  If this directive is empty, PHP will let the user modify ANY
; environment variable!
safe_mode_allowed_env_vars = PHP_

Mit safe_mode_allowed_env_vars legt man fest, mit welcher Zeichenkette Namen von Umgebungsvariablen beginnen müssen, damit sie durch ein Skript geändert werden können (mit putenv()). Zu beachten ist hierbei allerdings, dass ein Skript alle Umgebungsvariablen ändern darf, wenn diese Einstellung leer bleibt. Das ist ganz nützlich, wenn man mit Ausnahme einiger weniger Variablen den Zugriff auf alle erlauben möchte: hier erst den Zugriff auf alle erlauben, dann mit der nachfolgenden Einstellung den Zugriff auf bestimmte Variablen verhindern. Sie sollten sich allerdings überlegen, ob ein Skript überhaupt Umgebungsvariablen ändern sollte.

safe_mode_protected_env_vars

; This directive contains a comma-delimited list of environment variables that
; the end user won't be able to change using putenv().  These variables will be
; protected even if safe_mode_allowed_env_vars is set to allow to change them.
safe_mode_protected_env_vars = LD_LIBRARY_PATH

safe_mode_protected_env_vars bewirkt das Gegenteil von safe_mode_allowed_env_vars: hier können Sie festlegen, welche Umgebungsvariablen im sicheren Modus nicht geändert werden dürfen. Mehrere Werte können durch Kommata getrennt angegeben werden.

disable_functions

; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names.  This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_functions =

An dieser Stelle kann man festlegen, welche Funktionen in Skripten nicht benutzt werden dürfen (durch Kommata getrennt; z.B. disable_functions = exec,system - auch aktiv, wenn PHP nicht im sicheren Modus läuft). Vor allem natürlich dann interessant, wenn ich als Provider die Rechte meiner Kunden beschränken möchte.

disable_classes

; This directive allows you to disable certain classes for security reasons.
; It receives a comma-delimited list of class names.  This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_functions =

Ähnlich zu disable_functions kann man hier Klassen deaktivieren. Das objektorientierte Konzept wurde in PHP 5 (oder besser gesagt in der Zend Engine 2) komplett überarbeitet; in PHP 4 war diese Option noch nicht nötig.

highlight

; Colors for Syntax Highlighting mode.  Anything that's acceptable in
; <font color="??????"> would work.
highlight.string  = #CC0000
highlight.comment = #FF9900
highlight.keyword = #006600
highlight.bg      = #FFFFFF
highlight.default = #0000CC
highlight.html    = #000000

Mit den Funktionen highlight_file(), highlight_string() und show_source() (und bei Dateien, für die der Content-Type application/x-httpd-php-source eingestellt ist) kann man Quelltext anzeigen, wobei die Syntax farbig gekennzeichnet wird. Mit den verschiedenen Einstellungen hier kann man die Farben festlegen, die dazu verwendet werden sollen. #FF9900 für highlight.comment hat sich für meinen Geschmack beispielsweise als zu grell herausgestellt. Ändern Sie die Einstellungen nach Ihren Vorlieben. HTML sollte aber schwarz bleiben, damit PHP besser zu erkennen ist. Mit highlight.bg können Sie eine Hintergrundfarbe wählen.

expose_php

Anfänger

;
; Misc
;
; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header).  It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
expose_php = On

Die letzte Einstellung in diesem Abschnitt besagt lediglich, ob PHP sich outen darf. Wenn ja, dann zeigt der Apache beispielsweise auf seiner Standard-Fehlerseite die Server-Signatur inklusive PHP an (wenn in der httpd.conf ServerSignature On eingestellt ist), ausserdem wird diese Signatur im HTTP Header mitgeschickt. Falls Sie also nicht möchten, dass Ihre Besucher dahinterkommen, dass Sie PHP nutzen (z.B. aus Sicherheitsgründen), dann wählen Sie Off. Falls Ihnen das egal ist und Sie lieber möchten, dass jeder sieht, dass Sie PHP benutzen, dann belassen Sie die Einstellung On.

Resource Limits, Error handling and logging weiter

URL: www.intermitto.net/php/konfig/language/
© 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