abstract class DirHelper { public static function cpdir(string $source, string $target): void { $src_dir = opendir($source); mkdir($target); while (($file = readdir($src_dir))) { if (!in_array($file, ['.', '..'])) { if (is_dir($source.DIRECTORY_SEPARATOR.$file)) { self::cpdir($source.DIRECTORY_SEPARATOR.$file, $target.DIRECTORY_SEPARATOR.$file); } else { copy($source.DIRECTORY_SEPARATOR.$file,$target.DIRECTORY_SEPARATOR.$file); } } } closedir($src_dir); } }
Standardabweichung mit PHP berechnen
Erstellt in PHP am 24. April 2022 vom Daschmi
Um mit PHP die Standardabweichung zu berechnen, kann folgende Funktion verwendet werden.
/** * Berechnet die Standardabweichung aus einem Array von Werten * @param $ar * * @return float */ public static function calculateDeviation($ar) { $num = sizeof($ar); $avg = array_sum($ar) / $num; $abw = 0; foreach ($ar as $item) { $abw += ($item - $avg) * ($item - $avg); } return sqrt((1 / ($num - 1)) * $abw); }
Nummer parallel hochzählen mit Datei Lock
Erstellt in PHP am 15. April 2021 vom Daschmi
Mit folgender php Funktion kann man eine Nummer ohne Datenbank hochzählen. Mittels flock wird sichergestellt, dass die Nummer nicht von parallelen Prozessen doppelt vergeben wird.
/** * @return int * @throws Exception */ function setNumber(): int { $file = dirname(__FILE__).'/number.txt'; $number = 0; if (!file_exists($file)) { $fp = fopen($file, "w"); } else { $fp = fopen($file, "r+"); while (!flock($fp, LOCK_SH)) { } $number = intval(fread($fp, filesize($file))); flock($fp, LOCK_UN); } rewind($fp); $number ++; while ((!flock($fp, LOCK_EX))) { } ftruncate($fp, 0); fwrite($fp, strval($number)); fflush($fp); flock($fp, LOCK_UN); fclose($fp); return $number; }
MD5 Hash rekursiv aus Verzeichnis ermitteln
Erstellt in PHP am 5. November 2020 vom Daschmi
Um mit PHP den MD5 Hash eines Verzeichnisses zu ermitteln kann folgende Funktion verwendet werden.
abstract class Md5Tool { public static function md5_dir(string $path): string { if (is_dir($path)) { foreach (scandir($path) as $entry) { if (!in_array($entry, ['.', '..'])) $arMd5[] = self::md5_dir($path.$entry); } return md5(implode('', $arMd5)); } else { return md5_file($path); } } } echo Md5Tool::md5_dir('/');
WordPress und Sessions und „Zustand der Website“
Erstellt in PHP, Wordpress am 10. September 2020 vom Daschmi
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');