=
3.237.71.23

Daschmi's Notizblog

Logo des Etikators - Tool um online drucken von Etiketten für selbst angefertigte Tinkturen

WordPress und Sessions und „Zustand der Website“

Erstellt in PHP, Wordpress am 10. September 2020

Wer mit Sessions unter WordPress arbeiten muss und bisher die Session einfach im init Hook mit session_start() geöffnet hat erhält seit WordPress 5.5. folgende Meldung im Check „Zustand der Website“

Gelöst habe ich das Problem bei mir, indem ich die Session im init Hook einmal öffne und wieder schließe. Später öffne ich sie im send_headers Hook wieder und lasse sie offen damit ich nach dem Senden des Headers noch damit arbeiten kann.

function st_init() {

    if (!session_id()) { 
        
        // Ich öffne die Sesion kurz, damit ich den $_SESSION Array verwenden kann
        // Schließe sie aber dann wieder

        session_start(); 
        //session_write_close();

    }

}

function st_send_headers() {

    // Hier öffne ich die Session wieder, damit ich mit dem $_SESSION Array wieder arbeiten kann

    $ses = $_SESSION;

    session_start();

    $_SESSION = $ses;

}

add_action('init', 'st_init', 1);
add_action('send_headers', 'st_send_headers');

Verzeichnisse mit Inhalt und Unterverzeichnissen rekursiv löschen mit PHP

Erstellt in PHP am 25. September 2019

Mit folgender Klasse/Funktion können mit der Programmiersprache PHP Verzeichisse und darin enthaltene Dateien rekursiv gelöscht werden.

abstract class DirHelper {

   /**
    * Verzeichnis mit Inhalten recursiv löschen
    * @param string $path
    * 
    * @return bool
    */
   public static function rmDir(string $path) : bool {
         
      if (is_dir($path)) {
               
         $hPath = opendir($path);
               
         if ($hPath) {
                  
            while ($file = readdir($hPath)) {
                  
               if ($file != "." && $file != "..") {
                        
                  if (!is_dir($path."/".$file)) {
                           
                     unlink($path."/".$file);
               
                  } else {
                  
                     delete_directory($path.'/'.$file);
            
                  }

               }
         
            }
                  
            closedir($hPath);
               
         }
               
         rmdir($path);
               
         return true;
               
      }
            
      return false;
            
   }
   
}

Aufruf

 DirHelper:: rmDir('{Pfad}');

Kleine Hilfsfunktion um FILETIME in einen Unix TIMESTAMP zu konvertieren und umgekehrt

Erstellt in PHP am 6. August 2019

Für ein Projekt, bei der eine Kommunikation mit einem Windows Programm und einem Webserver stattfindet musste ich die im Windows bereich gebräuchlichen FILETIME Datumstypen (64Bit) in normale Unix TIMESTAMPS konvertieren. Folgende kleine Funktionen haben die Zeitstempel für mich konvertiert.

abstract Class TimestampHelper {

   public static function FILETIME_to_UNIXTIMESTAMP(float $filetime) : int {
            
      return $filetime / (10 * 1000 * 1000) - 11644473600;
            
   }
         
   public static function UNIXTIMESTAMP_to_FILETIME($timestamp) : int {
      
      return ($timestamp + 11644473600) * (10 * 1000 * 1000);
      
   }

}

PHP Funktion um HEX Farben in Dezimal RGB Farben zu zerlegen

Erstellt in PHP, Sonstiges am 18. März 2019

/**
 * @param string $hex #FF0000 oder FF0000
 * @param array $default
 * @return array
 */
public static function hex2rgb(string $hex, array $default = ['r' => 0, 'g' => 0, 'b' => 0]) : array {

  if (substr($hex, 0, 1) !== '#') $hex = '#'.$hex;
  if (!preg_match('/#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/', $hex)) return $default;

  $r = substr($hex, 1, 2); $r = hexdec($r);			
  $g = substr($hex, 3, 2); $g = hexdec($g);
  $b = substr($hex, 5, 2); $b = hexdec($b);

  return [
    'r' => $r,
    'g' => $g,
    'b' => $b
  ];

}

(Gesetzliche) Feiertage ermitteln in Abhängigkeit der Bundesländer mittels PHP

Erstellt in PHP, Sonstiges am 22. Februar 2019

Mit folgender PHP Funktion, kann überprüft werden ob an einem Datum (Timestamp) ein Feiertag ist und wenn ja in welchem Bundesland.

class Helper {

	/**
	 * @param $tDay Timestamp des Tages, der auf einen Feiertag überprüft werden soll 
	 * @return array(
	 * 	'text' => '' Text
	 *  'feast' => boolean True wenn Feiertag
	 *  'arState' => '' Leerer Array oder Array mit Bundesländern für die der Feiertag gilt
	 * )
	 * 
	 * 	BW = Baden-Württemberg
	 * 	BY = Bayern
	 * 	BE = Berlin
	 * 	BB = Brandenburg
	 * 	HB = Bremen
	 * 	HH = Hamburg
	 * 	HE = Hessen
	 * 	MV = Mecklenburg-Vorpommern
	 * 	NI = Niedersachsen
	 * 	NW = Nordrhein-Westfalen
	 * 	RP = Rheinland-Pfalz
	 * 	SL = Saarland
	 * 	SN = Sachsen
	 * 	ST = Sachsen-Anhalt
	 * 	SH = Schleswig-Holstein
	 * 	TH = Thüringen
	 */
	public static function getFeastInfo($tDay) {
		
		$md = date('md', $tDay);		
		$tEaster = easter_date(date('Y', $tDay));
		
		$text = ''; $feast = ''; $arState = [];		
				
		if ($md == '0101') { $feast = _('Neujahr'); }
		else if ($md == '0501') { $feast = _('Erster Mai'); }
		else if ($md == '0106') { $feast = _('Heiligen Drei Könige'); $arState = ['BW', 'BY', 'ST']; }
		else if ($md == date('md', strtotime('-2 day', $tEaster))) { $feast = _('Karfreitag'); }
		else if ($md == date('md', $tEaster)) { $feast = _('Ostersonntag'); }
		else if ($md == date('md', strtotime('+1 day', $tEaster))) { $feast = _('Ostermontag'); $arState = ['SN']; }
		else if ($md == date('md', strtotime('+39 day', $tEaster))) { $feast = _('Christi Himmelfahrt'); }
		else if ($md == date('md', strtotime('+49 day', $tEaster))) { $feast = _('Pfingstsonntag'); }
		else if ($md == date('md', strtotime('+50 day', $tEaster))) { $feast = _('Pfingstmontag'); }
		else if ($md == date('md', strtotime('+60 day', $tEaster))) { $feast = _('Fronleichnam'); $arState = ['BW', 'BY', 'HE', 'NW', 'RP', 'SL', 'SN', 'TH']; }
		else if ($md == '0815') { $feast = _('Maria Himmelfahrt'); $arState = ['SL', 'BY']; }
		else if ($md == '1003') { $feast = _('Tag der deutschen Einheit'); }
		else if ($md == '1031') { $feast = _('Reformationstag'); $arState = ['BB', 'MV', 'SN', 'ST', 'TH']; }
		else if ($md == '1101') { $feast = _('Allerheiligen'); $arState = ['BW', 'BY', 'NW', 'RP', 'SL']; }
		else if ($md == date('md', strtotime("last wednesday", mktime(0, 0, 0, 11, 23,date('Y', $tDay))))) { $feast = _('Buß- und Bettag'); $arState = ['SN']; }
		else if ($md == '1224') { $feast = _('Heiliger Abend'); }
		else if ($md == '1225') { $feast = _('1. Weihnachtsfeiertag'); }
		else if ($md == '1226') { $feast = _('2. Weihnachtsfeiertag'); }
		else if ($md == '1231') { $feast = _('Silvester (Bankfeiertag)'); }
		else if ($md == '1231') { $feast = _('Silvester (Bankfeiertag)'); }
		else if ($md == '0803') { $feast = _('Internationaler Frauentag'); $arState = ['BE']; }
					
		if (date('N', $tDay) === '6') $text = 'Samstag';
		else if (date('N', $tDay) === '7') $text = 'Sonntag';
		else $text = '';
		
		if (sizeof($arState) > 0) {
			
			$arStateMapping = [
				'BW' => 'Baden-Württemberg', 'BY' => 'Bayern', 'BE' => 'Berlin', 'HB' => 'Bremen', 'HH' => 'Hamburg', 'HE' => 'Hessen' ,'MV' => 'Mecklenburg-Vorpommern', 'NI' => 'Niedersachsen', 'NW' => 'Nordrhein-Westfalen',
				'RP' => 'Rheinland-Pfalz', 'SL' => 'Saarland', 'SN' => 'Sachsen', 'ST' => 'Sachsen-Anhalt', 'SH' => 'Schleswig-Holstein', 'TH' => 'Thüringen'
			];
			
			foreach ($arState as $k => $v) {
				
				$arState[$k] = $arStateMapping[$v];
				
			}
			
		}
						
		if ($feast === '' && $text === '') $text = 'Arbeitstag';
		else if ($feast !== '' && $text !== '') $text = $text.' ('.$feast.rtrim(', '.implode(', ', $arState), ' ,').')';
		else if ($feast !== '') $text = $feast.rtrim(', '.implode(', ', $arState), ' ,');
			
		return [
			'text' => $text, 
			'feast' => ($feast !== ''),
			'arState' => $arState
		];
		
	}

}

Siehe auch: https://de.wikipedia.org/wiki/Gesetzliche_Feiertage_in_Deutschland