Hauptmenü

Werkzeuge

Kategorien

Archiv

Einhell

Daten zwischen zwei Datumswerten mit PHP im Format YYYY-MM-DD

Erstellt in PHP am 21. Oktober 2023 vom Daschmi

Mit folgender Funktion kann man die Tage zwischen zwei Daten im Format YYYY-MM-DD ermitteln.

/**
 * Gibt einen Array mit Tagen im Format YYYY-MM-DD zurück die zwischen $startDate und $endDate liegen
 *
 * @param string $startDate
 * @param string $endDate
 * @return string[]
 * @throws \Exception
 */
public static function getDatesBetween(string $startDate, string $endDate): array {

	$start = new \DateTime($startDate);
	$end = new \DateTime($endDate);
	$interval = new \DateInterval('P1D');
	$period = new \DatePeriod($start, $interval, $end->modify('+1 day'));

	$arDates = [];

	foreach ($period as $date) $arDates[] = $date->format('Y-m-d');
	
	return $arDates;

}

Bilder bei Upload automatisch auf maximale Auflösung begrenzen mit PHP

Erstellt in PHP am 17. Oktober 2023 vom Daschmi

In der modernen Web-Entwicklung ist das Hochladen von Bildern eine alltägliche Anforderung. Aber wie können wir sicherstellen, dass die hochgeladenen Bilder die richtige Größe haben, um sowohl den Speicherplatz als auch die Ladezeit zu optimieren? In diesem Blog-Beitrag werden wir einen einfachen, aber robusten PHP-Code vorstellen, der nicht nur ein Bild auf den Server lädt, sondern auch seine Abmessungen überprüft und anpasst.

Die Funktion verwendet die PHP-GD-Bibliothek, um die Abmessungen des hochgeladenen Bilds zu erfassen und es bei Bedarf zu skalieren. Falls während des Vorgangs ein Fehler auftritt, fällt die Funktion auf den herkömmlichen move_uploaded_file()-Ansatz zurück, um sicherzustellen, dass der Upload nicht fehlschlägt.

try {
						
	$is = getimagesize($_FILES[$field]['tmp_name']);
	if (!$is) throw new \Exception();
	
	list($width, $height) = $is;
	
	if (!is_numeric($width) || $width <= 0) throw new \Exception();
	if (!is_numeric($height) || $height <= 0) throw new \Exception();
	
	$image = imagecreatefromstring(file_get_contents($_FILES[$field]['tmp_name']));
	if ($image === false) throw new \Exception();
	
	$max_width = 1024; $max_height = 768;
	$ratio = min($max_width / $width, $max_height / $height);
	
	$new_width = $width * $ratio; $new_height = $height * $ratio;
	
	$new_image = imagecreatetruecolor($new_width, $new_height);
	if ($new_image === false) throw new \Exception();
	
	$b = imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
	if ($b === false) throw new \Exception();
	
	$b = imagejpeg($new_image, $path.$filename, 75);
	if ($b === false) throw new \Exception();
	
	imagedestroy($image);
	imagedestroy($new_image);
	
} catch (\Exception $e) {
	
	// Bild alternativ hochladen
	move_uploaded_file($_FILES[$field]['tmp_name'], $path.$filename);
	
}

Auf erste Kindseite leiten, wenn eine Seite Kindseiten hat

Erstellt in PHP, Wordpress am 20. Januar 2023 vom Daschmi

Mit folgendem Code kann man auf die erste Unterseite umleiten, sofern eine Seite Unterseiten hat. Dies ist nützlich wenn z.B. die Oberseite keinen Inhalt aufweist.

function my_template_redirect() {

  if (\is_page()) {

      $subPages = \get_children([
          'post_parent' => \get_the_ID(),
          'post_type'   => 'page',
          'post_status' => 'publish'
      ]);

      if (sizeof($subPages) > 0) {

          \wp_redirect(\get_permalink(array_shift($subPages)->ID)); exit;

      }

  }

}

\add_action('template_redirect', 'my_template_redirect');

DS Youtube – Youtube Videos datenschutzkonform in Webseite einbinden

Erstellt in PHP, Wordpress am 15. Oktober 2022 vom Daschmi

Mit der Bibliothek DSYoutube ist es auf einfache Weise möglich YouTube Videos in eine Webseite einzubinden. Man braucht lediglich die VideoID und muss den Pfad für das Vorschaubild konfigurieren.

Weitere Informationen und Downloads bekommen Sie auf der Demoseite der Bibliothek.

Für WordPress gibt es ein Plugin, mit dem sie die Funktionalität einfach über einen Shortcode z.B.

[ds_youtube]OepAzzGcz4E[/ds_youtube]

nutzen können.

Im Frontend sieht das ganze dann so aus.

Datenschutz ist uns wichtig!

Daher wird dieses Video erst geladen wenn sie der Verwendung des Drittanbieters "YouTube" zustimmen durch den möglicherweise Cookies gesetzt und Nutzerdaten übertragen werden.

Ich bin einmalig damit einverstanden.
DSGVO Script powered by https://daschmi.de.

Ds Youtube

Stückpreis: 15,00 EUR
Mit dieser Bibliothek können YouTube Videos datenschutzkonform eingebunden werden.
Mit diesem Plugin können YouTube Videos datenschutzkonform eingebunden werden. Die Videos werden dabei erst nach Nutzerzustimmung geladen. Eine Demo sehen sie hier https://daschmi.de/ds_youtube/

EXIF Bildrotation mit gd / imagerotate korrigieren

Erstellt in PHP am 12. Oktober 2022 vom Daschmi

Möchte man mittels der GD-Bibliothek die Drehung/Spiegelung von Bildern anhand der EXIF Meta Daten korrigieren kann man folgenden Code verwenden:

$srcImage = @imagecreatefrompng($src_file);

$exif = exif_read_data($src_file);

if ($exif && !empty($exif['Orientation'])) {

  $srcImage = match ($exif['Orientation']) {
    8 => imagerotate($srcImage, 90, 0),
    3 => imagerotate($srcImage, 180, 0),
    6, 5, 7 => magerotate($srcImage, -90, 0)
  };

}

Verzeichnis rekursiv mit PHP kopieren

Erstellt in PHP am 23. September 2022 vom Daschmi

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');