PHP
PHP 8 Änderungen (2025)
- PHP 8 wandelt viele Warnungen in Fehler um, was die Stabilität erhöht, aber Anpassungen am Code erfordert.
- # für Kommentare nicht mehr verwenden, besser // ... oder /* ... */
- mysqli_fetch_row($erg)) { - gibt in PHP8 nur noch single row aus, jetzt so:
while ($row = mysqli_fetch_assoc($erg)) {echo $row["pc_name"];echo $row["hd"];echo "<br>";}
Quellen:
PHP unter IIS8 - IIS10 installieren (2021)
Installation über MS Web Platform Installer läßt sich nicht genau steuern oder deinstallieren,
besser ist die manuelle Installation.
• PHP für IIS/CGI als NTS-Version laden (ZIP)
• PHP in einen beliebigen Pfad auf dem Webserver kopieren.
- PHP.INI anpassen:
- fastcgi.impersonate = 1
- cgi.fix_pathinfo=1
- cgi.force_redirect = 0
- open_basedir = ... möglichst einschränken
- PHP in DOS-BOX testen mit: php -info
Serverrollen: Webserver / Anwendungsentwicklung / CGI installieren
IIS + CGI-Modul installieren.
- Test: IIS Startseite muß laufen
IIS Manager:
- Handler-Zuordnung: Modulzuordnung hinzufügen > *.php, Fast-CGI-Modul, php-cgi.exe, Name= PHPviaFastCGI
- Test: <?php phpinfo(); ?> in Testseite.php
Link: https://technet.microsoft.com/de-de/library/dd239230%28v=ws.10%29.aspx
PHP: Variablen und Eingaben übergeben (2020)
• Eingaben, die mit SQL weiter bearbeitet werden sollen: $name = mysqli_real_escape_string($name);
auch direkt im SQL-Statement möglich:$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
• Eingaben, die mit HTML weiter bearbeitet werden sollen: $name = htmlspecialchars($name);
• Eingaben, die mit EXEC() weiter bearbeitet werden sollen: $kommando = escapeshellcmd($kommando);
Variablen zwischen Seiten übergeben:
extract ($_GET); bzw. extract ($_PUT); oder besser: $variable = $_GET($variable);
Vollständiger Syntax:if (isset($_GET['anzeigejahr'])) { // wurde überhaupt ein Wert angegeben…
$anzeigejahr = $_GET['anzeigejahr']; // dann den Wert übernehmen
}
Zeigt alle per POST übergebenen Daten:if ($_POST) {
echo '<pre>';
echo htmlspecialchars(print_r($_POST, true));
echo '</pre>';
}
PHP4: Wenn Variablen nicht zwischen den Seiten übergeben werden, in der php.ini register_globals (=off) auf ON setzen.
(veraltet und unsicher !)
PHP, MySQL und der Ärger mit UTF-8 (2016)
Wenn ein Dokument als Unicode (UTF-8) abgespeichert wurde, jedoch als ISO 8859-1 interpretiert wird, geschieht folgendes:
erwartete Ausgabe: ä ö ü
wirkliche Ausgabe: ä ö ü
Mit PHP kann man dieses Problem umgehen indem man den entsprechenden Header ändert:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
header('Content-Type: text/html; charset=UTF-8');
?>
Wenn die Umlaute als Fragezeichen dargestellt werden, dann wird ein als ISO 8859-1 kodiertes Dokument als UTF-8 interpretiert. Dies stellt das Gegenstück zur oben genannten Situation dar.erwartete Ausgabe: ä ö ü
wirkliche Ausgabe: � � �
Auch hier lässt sich mit PHP's header()-Funktion nachhelfen, damit der Content als ISO-8859-1 interpretiert wird.
<?php
header('Content-Type: text/html; charset=ISO-8859-1');
?>
Tückisch wird es bei Datenbankanbindung, wenn die Datenbank ISO-8859-1 kodiert ist.
Trick: gleich nach dem Öffnen der DB folgenden Befehl absetzen:
mysqli_query($verbindung, "SET NAMES 'utf8'");
Das sorgt dafür, dass der Datenbankserver weiß, dass er sowohl bei Datenbankabfragen als auch bei Inserts oder Updates mit UTF-8-codierten Daten arbeiten soll. Diese Methode ist deutlich effizienter als das ständige "utf8_encode".
Wenn möglich kann man auch die PHP.INI anpassen:
default_charset = "UTF-8"
[iconv]
iconv.input_encoding = UTF-8
iconv.internal_encoding = UTF-8
iconv.output_encoding = UTF-8
[exif]
exif.encode_unicode = UTF-8
[mssql]
mssql.charset = "UTF-8"
Und genau so die MySQL-Konfiguration in /etc/mysql/my.cnf. Damit entfällt der o.g. SQL-Befehl.
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
PHP 7 Änderungen
- MYSQL wird nicht mehr unterstützt. -> MYSQLI nehmen.
$verbindung = mysqli_connect('Server', 'User', 'Passwort', 'DB');
- mysql_select_db kann damit weg fallen.
- mysql_query($abfrage, $verbindung) -> mysqli_query($verbindung, $abfrage).
- mysql_fetch_row($erg) -> mysqli_fetch_row($erg)
- mysql_fetch_object($erg) -> mysqli_fetch_object($erg)
- mysql_num_rows($erg) bzw. mysql_numrows($erg) -> mysqli_num_rows($erg)
- Connection schließen mit mysqli_close($verbindung);
- Variablenvergleich schlägt fehl? -> intval()
PHP 5.5 Änderungen
- "import_request_variables("GPC")" wird nicht mehr unterstützt!
Einfachste Umstellungs-Lösung:
alle Variablen ungeprüft importieren.
extract ($_GET);
extract ($_POST);
extract ($_COOKIE);
Die Lösung ist nicht sicherer als import_request_variables, aber effektiv und für Intranet OK.
Test auf verwendete Variablen zum gezielten Import:
echo "Per POST übergebene Variablen:<br>\n";
while (list ($key, $val) = each ($_POST))
{
echo "$key => $val<br>";
}
echo "Per GET übergebene Variablen:<br>\n";
while (list ($key, $val) = each ($_GET))
{
echo "$key => $val<br>";
}
von Uwe Backend-Admin

Kommentare
Einen Kommentar schreiben