| 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 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-
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-ModulDas 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-ProgrammDas PHP Interpreter Programm ist ein normales ausführbares Programm des jeweiligen Betriebssystems, z.B. ein Linux-Binary oder Windows php-cgi.exeDiese 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-
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-
__FILE__ = /srv/www/htdocs/entwicklung/php/test/php_environment.php
bestehend aus den beiden Teilen
dirname(__FILE__) = /srv/www/htdocs/entwicklung/php/test
Arbeitsverzeichnis (current working directory cwd):
basename(__FILE__) = php_environment.php
getcwd() = /srv/www/htdocs/entwicklung/php/test
Aktuelle Zeile im Quellcode:
__LINE__ = 558
Pfad zur allgemeinen Konfigurations-Datei:
__LINE__ = 559
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 mysqliDas 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-
Modul mysqli ist nicht geladen.
|
PHP-Modul mysqlDieses 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_host_info().$nl;// print mysql_get_server_info($dbs); print mysql_get_server_info().$nl; print mysql_get_client_info().$nl; Live-
Modul mysql ist nicht geladen.
|
|
Letzte Änderung dieser Seite: 2011-12-01 09:25:07
|