Windows-Unterstützung

Unterstützung für lange Pfade und UTF-8-Pfade

Wenn eine Webanwendung UTF-8-konform ist, sind keine weiteren Maßnahmen erforderlich. Für Anwendungen, die auf Pfade angewiesen sind, die nicht UTF-8-kodiert sind, muss eine explizite INI-Direktive gesetzt werden. Die Prüfung der INI-Einstellungen für die Kodierung hängt von der Reihenfolge im Kern ab:

  • internal_encoding
  • default_charset
  • zend.multibyte

Es wurden mehrere Funktionen zur Handhabung von Codepages eingeführt:

  • sapi_windows_cp_set(), um die Standard-Codepage festzulegen
  • sapi_windows_cp_get(), um die aktuelle Codepage abzurufen
  • sapi_windows_cp_is_utf8()
  • sapi_windows_cp_conv(), um unter Verwendung einer mit iconv() kompatiblen Signatur zwischen Codepages zu konvertieren

Diese Funktionen sind threadsicher.

Die Codepage für die Konsolenausgabe wird abhängig von der intern in PHP verwendeten Kodierung festgelegt. Je nach konkreter OEM-Codepage des Systems kann die sichtbare Ausgabe korrekt sein oder nicht. Zum Beispiel wird die Ausgabe in der standardmäßigen cmd.exe und auf einem System mit der OEM-Codepage 437 in den Codepages 1251, 1252, 1253 und einigen anderen korrekt angezeigt, wenn UTF-8 verwendet wird. Auf dem gleichen System werden Zeichen in Codepages wie 20932 wahrscheinlich nicht korrekt angezeigt. Dies hängt ab von den jeweiligen Systemregel für die Codepage, der Kompatibilität der Schriftart und dem verwendeten Konsolenprogramm. PHP konfiguriert die Codepage der Konsole automatisch gemäß den Kodierungsregeln der php.ini. In manchen Fällen kann es das Ergebnis verbessern, wenn eine andere Konsole verwendet wird als cmd.exe selbst.

Es ist jedoch zu beachten, dass ein Wechsel der Codepage zur Laufzeit nach dem Start der Anfrage unerwartete Nebeneffekte auf die CLI haben kann. Die bevorzugte Methode führt über die php.ini. Wenn PHP-CLI in einem Konsolen-Emulator verwendet wird, der kein Unicode unterstützt, kann dieser Weg notwendig sein, um eine Änderung der Konsolenkodierung zu vermeiden. Um dies zu erreichen, wird empfohlen, die Standard- oder interne Kodierung entsprechend der ANSI-Codepage einzustellen. Eine Alternative ist, die INI-Direktiven output_encoding und input_encoding auf die gewünschte Codepage zu setzen, wobei in diesem Fall der Unterschied zwischen interner und E/A-Codepage jedoch wahrscheinlich zu Zeichensalat führt. In seltenen Fällen kann es vorkommen, dass bei einem Absturz von PHP die ursprüngliche Konsolen-Codepage möglicherweise nicht wiederhergestellt wird. In diesem Fall kann der Befehl chcp verwendet werden, um sie manuell wiederherzustellen.

Besondere Vorsicht ist bei DBCS-Systemen (Systeme mit Doublebyte-Characterset) geboten - die Codepage zur Laufzeit mittels ini_set() zu ändern, kann zu Darstellungsproblemen führen. Der Unterschied zu Nicht-DBCS-Systemen ist, dass die erweiterten Zeichen zwei Konsolenzellen für die Anzeige benötigen. In bestimmten Fällen kann es vorkommen, dass Zeichen in den Glyphensatz der Schriftart abgebildet werden, ohne die Schriftart zu ändern. Dies liegt in der Natur der DBCS-Systeme und die einfachste Methode, Darstellungsprobleme zu vermeiden, besteht darin, die Codepage nicht per ini_set() zu ändern.

Infolge der Unterstützung von UTF-8 in den Streams sind PHP-Skripte nicht mehr auf ASCII- oder ANSI-Dateinamen beschränkt. Dies wird standardmäßig von CLI unterstützt. Für andere SAPIs ist die Dokumentation für den entsprechenden Server hilfreich.

Die Unterstützung langer Pfade ist transparent. Pfaden, die mehr als 260 Bytes haben, wird automatisch ein \?\ vorangestellt. Die maximale Pfadlänge ist auf 2048 Bytes begrenzt. Es ist zu beachten, dass die Begrenzung der Pfadsegmente (Länge des Basisnamens) weiterhin gilt.

Um die beste Portabilität zu erreichen, wird dringend empfohlen, für Dateinamen, I/O und andere verwandte Themen UTF-8 zu verwenden. Außerdem ist für Konsolenanwendungen eine TrueType-Schriftart zu bevorzugen. Darüber hinaus wird davon abgeraten, ini_set() für für die Änderung der Codepage zu verwenden.

readline

Die Erweiterung readline wird nun von der » WinEditLine-Bibliothek unterstützt, wodurch die interaktive CLI-Shell nun ebenfalls unterstützt wird (php.exe -a).

PHP_FCGI_CHILDREN

Die Umgebungsvariable PHP_FCGI_CHILDREN wird nun berücksichtigt. Wenn sie definiert ist, führt der erste php-cgi.exe-Prozess die angegebene Anzahl von Unterprozessen aus. Diese teilen sich denselben TCP-Socket.

ftok()

Die Unterstützung für ftok() wurde hinzugefügt

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

Technisches SEO bleibt relevant

Technisches SEO – Was ist das überhaupt? Technisches SEO bezieht sich auf die Optimierung der technischen Aspekte deiner Webseite. Das Ziel ist klar! ...

admin

Autor : admin
Kategorie: SEO & Online-Marketing

Was ist neu in der PHP 8.2.10

PHP 8.2.10 ist eine der neuesten Versionen von PHP, die eine Reihe von Verbesserungen und neuen Funktionen mit sich bringt. In diesem Artikel werden wir einige der herausragenden Neuerungen und Verbesserungen dieser Version diskutieren. ...

admin

Autor : admin
Kategorie: Software-Updates

Total Commander 11.00 (final) ist verfügbar!

Total Commander, ein beliebter Datei-Manager, hat kürzlich seine neueste Version, 11.00, veröffentlicht. Mit einer Vielzahl von neuen Funktionen und Korrekturen bietet diese Version den Benutzern ein verbessertes und optimiertes Erlebnis. ...

admin

Autor : admin
Kategorie: Software-Updates

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

Warning: Undefined variabl

völlig übersehen, ja der code müssste mal überrbeitet werden. mit http_client ... ect. gut zu wissen. hat sich ja doch mehr verändert als ged ...

Geschrieben von derneue1 am 20.02.2024 00:00:45
Forum: PHP Developer Forum
Warning: Undefined variabl

Ähm, die weißt schon, dass wir hier von Grundlagen reden, oder? if ($new)​ if (isset($new))​ $ers["username"] = "" . $ers["username"] . ...

Geschrieben von scatello am 19.02.2024 21:00:38
Forum: PHP Developer Forum
Warning: Undefined variabl

ok, das geht. eigentlich war das reporting vorher auch immer an, komisch. und wie sieht das hier aus ? Warning: Undefined variable $new in /var/ww ...

Geschrieben von derneue1 am 19.02.2024 18:55:03
Forum: PHP Developer Forum
Warning: Undefined variabl

ich bunutze schon lange ein script was immer funktioniert hat. Das lag aber nur daran, dass du das Error-Reporting nicht hochgedreht hast, denn da ...

Geschrieben von scatello am 19.02.2024 17:59:56
Forum: PHP Developer Forum