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

Bitte addieren Sie 3 und 1.