====== PHP ====== ===== Cannot modify header information - headers already sent ===== Dieser Fehler tritt auf, wenn der HTML-Header modifiziert werden soll, er aber schon gesendet wurde. Er wird automatisch gesendet, wenn eine Ausgabe via PHP gemacht wird. Das kann mehrere schwer zu findende Ursachen haben: * Leerzeichen oder -zeilen vor oder nach dem PHP-Tag * Editoren, die bei UTF8 kodierten Dateien Zeichen zur Markierung der Byteorder (BOM) hinzufügen * Ausgaben oder Fehlermeldungen mit print oder echo ===== display_errors auf der Kommandozeile ===== Um die Anzeige von Fehlern auf der Kommandozeile (CLI) zu unterdrücken, ist es nicht ausreichend ''display_errors'' auf Null zu setzen. Es muss zusätzlich auch ''error_log'' auf eine Datei oder ''/dev/null'' gesetzt werden: ini_set('display_errors', 0); ini_set('error_log', '/dev/null'); //no log at all //or ini_set('error_log', 'log/error.log'); //use log file ===== UTF-8 ===== PHP bietet leider [[https://www.php.net/manual/en/language.types.string.php#language.types.string.details|keine eingebaute Unterstützung]] für [[UTF-8]] Strings. Daher ist die Verwendung und Verarbeitung umständlich. * [[https://www.toptal.com/php/a-utf-8-primer-for-php-and-mysql|A Guide to UTF-8 Encoding in PHP and MySQL]] * [[https://phptherightway.com/#php_and_utf8| PHP The right way: Working with UTF-8]] * [[https://wackowiki.org/doc/Dev/Guidelines/UnicodeCheatSheet|Unicode Cheat Sheet]] ===== lokalisierte Zeit und Datum ===== Für das Formatieren und Parsen von lokalisierten Zeit- und Datumswerten kann die Klasse [[https://www.php.net/manual/en/class.intldateformatter.php|DateFormatter]] verwendet werden. Für eine noch flexiblere Behandlung gibt es ab PHP 8.1 zusätzlich die Klasse [[https://www.php.net/manual/en/intldatepatterngenerator.getbestpattern.php|DatePatternGenerator]]. * [[https://wiki.php.net/rfc/intldatetimepatterngenerator|RFC für DatePatternGenerator]], akzeptiert und gemergt ab PHP 8.1 * [[https://carbon.nesbot.com|Carbon - A simple PHP API extension for DateTime]] ===== Entwicklungstools ===== * [[PHP_Codesniffer]] Checker für Codingstyle * [[PHPCompatibility]] Regeln für PHP_CodeSniffer um Kompatibilität mit verschiedenen PHP-Versionen zu prüfen * [[phpDocumentor]] Tool um Dokumenation zu erstellen * [[PHPStan]] Statische Codeanalyse für PHP ===== Links ===== * [[http://www.phptherightway.com|PHP the right way]] Viele Bestpratice Infos * [[http://phpsadness.com/|PHP Sadness]] Ungereimheiten/Probleme mit PHP * [[http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/|PHP: a fractal of bad design]] * [[https://github.com/ziadoz/awesome-php|A curated list of amazingly awesome PHP libraries, resources and shiny things]] * [[https://phpdelusions.net/pdo|(The only proper) PDO tutorial]] * [[https://phpdelusions.net/sql_injection|The Hitchhiker's Guide to SQL Injection prevention]] * [[https://github.com/lazymofo/datagrid|Lazymofo Datagrid]] Klasse um SQL Tabelle zu bearbeiten und anzuzeigen * [[https://php.watch/versions|PHP Watch Versions]] High-Level Überblick über neue PHP-Versionen * [[https://beberlei.de/2021/02/19/when_to_use_empty_in_php_i_say_never.html|When to use empty in PHP? I’d say never]] * [[https://onlinephp.io/|OnlinePHP]] Sandbox um PHP-Code mit sehr vielen verschiedenen PHP-Versionen zu testen * [[https://3v4l.org/|3v4l]] Online PHP-Shell mit allen PHP-Versionen seit 4.3 * [[https://kinsta.com/blog/transpiling-php/|The Ultimate Guide for Transpiling PHP Code]] Code in aktueller PHP-Version schreiben und dann automatisch für niedrigere Versionen anpassen lassen {{tag>Coding}}