PHP-Umgebung

Parameter, Module, Befehle

Hier erfahren sie, wie sie Auskunft über die "Umgebung" von PHP (am Webserver) erhalten. Die vorgestellten Funktionen werden mehrheitlich Live demonstriert.
PHP PHP Hypertext Processor
phpinfo() Einfacher Test und umfangreiche Auskunft
php.ini Daten der PHP-Konfiguration
getenv() & putenv() Funktionen zur PHP-Umgebung
Globale Arrays Vordefinierte globale Arrays $_ENV, $_SERVER, ... und Konstanten
PHP-Module Installierte Module und deren Befehle
get_browser() Auskunft über die Browser-Möglichkeiten
Virtuelle Webserver Individuelle PHP-Konfiguration mit PHP als Apache-Modul oder als CGI-Programm
Auf dieser Seite:
Version PHP-Version
API API (Programm-Variante)
Sonstige PC, Betriebssystem, Datei-Pfade,
MySQL-Info Auskunft vom MySQL-Server an den (Webserver + PHP)
Syntax-Check Test eines PHP-Scripts mit PHP
PHP-Logo Das "eingebaute" PHP-Logo
Verwandte Themen Umgebung bei C/C++, Perl und VBA, Standalone-PHP (Konsolen-Programme), PHP-Konfiguration des Apache-Webservers

PHP-Version

Die Funktion phpversion() oder die Variable PHP_VERSION gibt die aktuelle Version als String zurück.
Benutzen sie diese Abfrage, wenn ihre PHP-Scripts auf andere WebServer portabel sein sollen: Es kommt vor, dass verschiedene Versionen unterschiedlich zu programmieren sind - Testen sie daher neue PHP-Versionen am eigenen (Entwicklungs)-Server, bevor diese beim Web-Provider oder bei KundInnenen eingesetzt werden.

Tipp: Testen sie zusätzlich, ob benötigte → Module und Funktionen verfügbar sind.
<?php
$v = phpversion();
// $v = PHP_VERSION
print "phpversion() = $v <br />";
$va = preg_split('/\./',$v);
for ($i=0;$i<count($va);$i++) {
print "\$va[$i] = $va[$i] <br />");
}
?>
Mit Funktion preg_split ( → Reguläre Ausdrücke) werden die Versions-Teile in ein → Array (hier $va ) überführt, das in der Schleife ausgegeben wird. Live--Ausgabe des gezeigten PHP-Scripts:
phpversion() = 5.3.3-7+squeeze9
$va[0] = 5
$va[1] = 3
$va[2] = 3-7+squeeze9
Die laufende Betreuung von PHP Version<=4 ist bereits eingestellt.

Verwenden sie die derzeit aktuelle PHP Version 5 und → konfigurieren sie PHP so (streng), dass sie mit Version 6 kompatibel sind.
In der unmittelbar bevorstehenden PHP Version 6 werden einige ausgelaufene (deprecated) Optionen endgültig abgeschaltet.
Sie sollten in der → PHP Konfiguration alle veralteten Optionen abschalten. Hinweise erhalten sie im Kommentar der Konfigurations-Datei php.ini und im Internet (Stichwort PHP 6).

PHP-API (Application Programming Interface)

Das PHP Interpreter Programm hat die Aufgabe, den Quelltext von PHP Script-Programmen *.php zu lesen, in die interne Maschinen-Sprache des Prozessors zu übersetzen und diese Anweisungen Live auszuführen. Der PHP Interpreter kann in mehreren unterschiedlichen API-Varianten eingesetzt werden. Das ist typisch für Programmiersprachen, die häufig als Webserver-Hilfsprogramme (CGI) eingesetzt werden.
In diesem Kapitel werden die 3 API-Varianten für PHP vorgestellt: Webserver-Modul, Webserver-(CGI)-Hilfsprogramm und Konsolen-(CLI)-Programm.
Die PHP-Funktion php_sapi_name() teilt mit, in welcher Programm-Variante PHP arbeitet.
Das Ergebnis lautet z.B. apache, apache2handler, cgi, cli

Live-Ausgabe des rechts gezeigten PHP-Scripts:
php_sapi_name() = cgi-fcgi
$sn = cgi-fcgi
<?php
$sn = php_sapi_name();
print "php_sapi_name() = $sn <br />";
if(preg_match('/apache/',strtolower($sn))) {
$sn='apache';
}
print "\$sn = $sn <br />";
?>

PHP-Interpreter als Webserver-Modul

Das PHP Interpreter Programm wird als Modul des Webservers mod_php eingesetzt. Diese Art der Anwendung ist am Webserver des eigenen lokalen Netzwerks die häufigste. Das ergibt die beste Zusammenarbeit und die schnellste Ausführung.

Für den wichtigsten Webserver → Apache gibt es ein eigenes PHP-Modul, das normalerweise in jeder Linux-Distribution enthalten ist (mod_php.* oder mod_php5.*). Für M$IIS und die meisten anderen Webserver wird das Microsoft Interface ISAPI verwendet.

Das PHP-Modul wird nur einmal zusammen mit dem Webserver geladen. Die → Konfiguration wird dabei einmalig eingelesen. Eine Änderung der Konfigurations-Datei wird nur bei Neustart des Webservers berücksichtigt.

Mit den Anweisungen php_value, php_flag, php_admin_value, php_admin_flag der → Webserver-(!)-Konfiguration kann man die PHP-Konfiguration für jeden virtuellen Webserver, oder sogar für jedes Verzeichnis des Webservers individuell konfigurieren. Das ist für die Verwendung großer Programm-Pakete (Content-Management, GroupWare, Wiki, ...) besonders praktisch. Diese Webserver-Anweisungen kann man auch in .htaccess Konfigurations-Dateien verwenden, wenn man als nicht-priviligierter User keinen Zugang zur Konfiguration des Webservers hat.

Die meisten Konfigurations-Daten lassen sich für einzelne Webseiten auch nachträglich → Live ändern.

PHP lässt sich parallel in allen 3 API-Varianten verwenden: Dateien im Dokumenten-Verzeichnis des Webservers (typisch htdocs) werden vom Webserver-Modul interpretiert, Dateien im CGI-Verzeichnis (typisch cgi-bin) vom CGI-Programm.

PHP-Interpreter als CGI-Programm

Das PHP Interpreter Programm ist ein normales ausführbares Programm des jeweiligen Betriebssystems, z.B. ein Linux-Binary oder Windows php-cgi.exe
Diese Variante wird auf experimentellen Windows-Webservern eingesetzt, ebenso auf den Hochleistungs-Webservern der meisten Provider.

In diesem Fall wird das PHP Interpreter-Programm für jede einzelne Anforderung (d.h. für jede dynamische Webseite) einzeln gestartet. Diese Variante ist sicherer (allfällige Probleme eines PHP Script-Programms *.php können sich nicht auf andere auswirken), jedoch langsamer.

Die → Konfiguration wird dabei jedesmal neu (Live) gelesen.
Mit der → Webserver Umgebungs-Variablen PHPRC kann man (nur in dieser Variante !) einen beliebigen Pfad zu einer individuellen Konfigurations-Datei php.ini angeben.

Ein Sonderfall ist die Verwendung von PHP Script-Programmen im Webserver-Verzeichnis cgi-bin (nächster ↓ Absatz).
Webserver-Verzeichnis cgi-bin
Ein Verzeichnis (Ordner) mit diesem Namen ist auf den meisten → Webservern enthalten und speziell konfiguriert.

Der Webserver erwartet in diesem Verzeichnis ausführbare Programme (CGI-Hilfsprogramme), z.B. Linux-Binaries oder Windows *.exe Programme, wie man sie mit der Programmiersprache → C/C++ herstellen kann.

Man kann auch im Verzeichnis cgi-bin Script-Programme wie *.pl, *.php, *.py verwenden, jedoch normalerweise nur mit einem ausführbaren PHP Interpreter Programm, nicht mit dem Apache PHP-Modul.
Die Script-Programme müssen in der ersten Text-Zeile ('Shebang') den Pfad zum jeweiligen Interpreter-Programm enthalten, so wie auf Linux allgemein üblich, z.B.
#!/usr/bin/php5 
bzw. auf Windows
#!c:\programme\php\php-cgi.exe 
Verwenden sie für die Text-Dateien *.php auch auf Windows den Zeilen-Umbruch die Linux-Konvention (LF ohne CR, Umwandlung z.B. mit Notepad++)

PHP als Commandline-Interface (CLI)

PHP kann man auch ohne Webserver als selbständiges → CLI-Programm verwenden.
In diesem Fall werden PHP Script-Programme *.php typisch als → Konsolen-Programme angewendet. Das ist wenig bekannt, bietet jedoch ausgezeichnete Möglichkeiten, z.B. zur Automatisierung von Verwaltungs-Arbeiten.

Auf Linux wird PHP als CLI selten eingesetzt, da es genug Alternativen gibt, z.B. die verschiedenen sehr leistungsfähigen → Shell-Konsolen oder die Programmiersprachen → Perl, Python.

Die → Windows-Konsole cmd.exe bietet nur wenige Komfort und lässt sich durch PHP um alle Möglichkeiten einer vollwertigen Programmiersprache kostenfrei erweitern.

Weitere Vorteile: PHP-Kenntnisse sind bei den meisten Web-EntwicklerInnen bereits vorhanden. Weder PHP ( php-win.exe noch PHP-Programme *.php benötigen eine Installation und sind daher auch auf USB-Stick portabel.

Details zum Thema PHP als CLI

Sonstige PHP-Umgebung

Betriebssystem
Für die Ermittlung des Betriebssystems gibt es mehrere Möglichkeiten.
Live--Ausgabe:
php_uname() = Linux xwpweb01 2.6.32-5-amd64 #1 SMP Sun May 6
  04:00:17 UTC 2012 x86_64
PHP_OS = Linux
getenv('MACHTYPE') =
$_SERVER['SERVER_SOFTWARE'] = Apache/2

Der System-Pfad (Trennzeichen / oder \) ist ebenfalls charakteristisch:
Konstante DIRECTORY_SEPARATOR = /
Konstante PATH_SEPARATOR = :
getenv('PATH') = /bin
Pfad & Datei
Jedes PHP-Script kann seinen eigenen Namen und Pfad ermitteln.
Live--Ausgabe:.
__FILE__ = /srv/www/htdocs/entwicklung/php/test/php_environment.php
bestehend aus den beiden Teilen
dirname(__FILE__) = /srv/www/htdocs/entwicklung/php/test
basename(__FILE__) = php_environment.php
Arbeitsverzeichnis (current working directory cwd):
getcwd() = /srv/www/htdocs/entwicklung/php/test
Aktuelle Zeile im Quellcode:
__LINE__ = 558
__LINE__ = 559
Pfad zur allgemeinen Konfigurations-Datei:
get_cfg_var('cfg_file_path') = /etc/php5/apache2/php.ini
Pfad zu einer individuellen Konfigurations-Datei:
$_ENV['PHPRC'] = /home/topsoft.at/php-etc
$_SERVER['PHPRC'] = /home/topsoft.at/php-etc
Hardware
Auch die Hardware lässt sich teilweise ermitteln, wenn das → Globale Array $_ENV entsprechend konfiguriert wurde.
Rechts einige Live-Beispiele
$_ENV['CPU'] =
$_ENV['HOSTTYPE'] =
getenv('MACHTYPE') =
Details zu den PHP-Funktionen get_cfg_var(), getenv() sowie zu den globalen Arrays $_ENV, $_SERVER und zu globalen PHP-Konstanten.

PHP @ MySQL-Datenbank-Server

Auf jedem Standard-Server ( → LAMP) ist u.a. auch ein Datenbank-Server installiert, in den meisten Fällen ein → MySQL Server.

PHP arbeitet besonders einfach und schnell mit einem MySQL Server zusammen. Die benötigten Komponenten sind in allen Versionen von PHP bzw. MySQL und natürlich in jeder gängigen Linux-Distribution kostenfrei enthalten.

Details zur Verwendung von PHP mit MySQL
PHP bietet für die Arbeit mit einem MySQL-Server das alte Modul mysql und das moderne Modul mysqli für Objekt-orientierte Programmierung.

Beide Module können gleichzeitig installiert und parallel verwendet werden.
Einige Jahre nach der Umstellung sollten alle PHP-Programme nur mehr das neue Modul mysqli verwenden. Für neue Entwicklungen kommt nur dieses Modul in Frage.
Nur für wenige ältere Programm-Pakete braucht man manchmal noch das Modul mysql

PHP-Modul   mysqli

Das neue verbesserte Modul mysqli (i für improved) ist Standard für die Verbindung mit einem MySQL Datenbank Server.

Dieses Modul erfordert zur Erhebung der MySQL Umgebungs-Daten eine gültige Anmeldung.

Die Bezeichnung server betrifft den MySQL Server, client betrifft in diesem Fall den Webserver + PHP, nicht den PC des Users !
Die Anmeldung vom eigenen PC (localhost) ist normalerweise gestattet: Das trifft für einen Webserver + Datenbank-Server am gleichen PC zu, d.h. für Standard-Server in einem kleinen lokalen Netzwerk.
Die Anmeldung von einem anderen PC kann je nach Konfiguration des MySQL Servers erlaubt oder (meistens) verboten sein.

Details zum PHP-Modul mysqli und zu den MySQL Datenbank-Funktionen von PHP
$dbi = 0;   // Datenbank-Objekt
$nl = "<br />\n";   // Zeilen-Umbruch
if(extension_loaded('mysqli')) {
// Anmeldung
$host = 'localhost';
$user = 'Name';
$pwd = 'geheim';
$dbi = new mysqli($host,$user,$pwd);
unset($host,$user,$pwd);
// MySQL Umgebung
print $dbi->host_info.$nl;
print $dbi->server_info.$nl;
print $dbi->server_version.$nl;
print mysqli_get_client_info().$nl;
print mysqli_get_client_version().$nl;
$dbi->close();
}

Live--Ergebnisse für Modul mysqli
Modul mysqli ist nicht geladen.

PHP-Modul   mysql

Dieses Modul ist veraltet. Man braucht es nur mehr zur Verbindung mit veralteten Webserver-Programmen. Beides sollte man so bald wie möglich auf den aktuellen Stand (Modul ↑ mysqli) umstellen.

Ohne Argumente versucht die Funktion, mit einem MySQL-Server am gleichen PC (localhost) zu verbinden.
Wenn sich Webserver und MySQL-Server auf verschiedenen PC befinden, erfordert auch dieses Modul eine Anmeldung (hier mit Kommentar abgeschaltet).

Details zum PHP-Modul mysql
if(extension_loaded('mysql')) {
// $dbs=mysql_connect($host,$user,$pwd);
// print mysql_get_server_info($dbs);
print mysql_get_host_info().$nl;
print mysql_get_server_info().$nl;
print mysql_get_client_info().$nl;
}

Live--Ergebnisse für Modul mysql
Modul mysql ist nicht geladen.

PHP-Syntax-Check mit PHP-Funktion   php_check_syntax

Syntax-Check

Ab Version 5 bietet PHP die Funktion php_check_syntax() zur Überprüfung der 'Grammatik' von PHP-Scripts.
$errmsg = '';
$path = 'test.php';
$ok = php_check_syntax($path,$errmsg);
if($ok) {
print "Fehler in $path: <br />";
print $errmsg;
}
else {
print "Keine Fehler in $path <br />";
}

Quelltext

PHP bietet die komfortable Funktion show_source(), um den Quelltext einer HTML- oder PHP-Datei anzuzeigen. Das ist zwar keine Umgebungs-Funktion, passt jedoch in dieses Kapitel.
Die Funktion erfordert lediglich die Angabe des Pfades zur gewünschten Datei und liefert eine fertig formatierte Ausgabe.

Diese Funktion ist nur am eigenen Webserver sinnvoll und am Server eines Providers normalerweise gesperrt.
Ihre Verwendung kann eine gefährliche Sicherheits-Lücke öffnen. Sichern sie das betreffende PHP-Programm so ab, dass man damit nur genau die gewünschten Dateien anzeigen kann und keine anderen.
Formatierte Quelltext Ausgabe einer PHP-Datei (Linux, Windows):
$path = '/srv/www/htdocs/index.html';
$path = 'C:/Web/htdocs/index.html'
show_source('$path');

Das "eingebaute" PHP-Logo

In jeder PHP-Installation ist das offizielle Logo "eingebaut" und mit Funktion php_logo_guid() verfügbar.
Rechts das Live Ergebnis, unten das PHP-Programm.
PHP Logo
<?php $phplogo=$_SERVER['PHP_SELF'].'?='.php_logo_guid() ?>
<img src="<?php print $phplogo ?>" alt="PHP Logo" />
Letzte Änderung dieser Seite: 2011-12-01 09:25:07