Hauptmenü

Werkzeuge

Kategorien

Archiv

Inkonsistentes Verhalten von gettype in PHP

Erstellt in Allgemein am 19. Februar 2024 vom Daschmi

Mir ist aufgefallen, das die PHP Funktion „gettype“ bei Integer Werten „integer“ und nicht die interne PHP Bezeichnung „int“ zurückgibt.

Aufgrund der Abwärtskompatibilität wird das Verhalten wohl auch nicht geändert. https://bugs.php.net/bug.php?id=74742.

Aufgefallen ist mir das bei der Reflection einer Klasse die ich dynamisch für einen SOAP Server und REST Anfragen nutze. Dort erhalte ich bei „ReflectionParameter::getType“ als Typ „int“, wenn ich den aber mit dem gettype der JSON Anfrage vergleiche erhalte ich „integer“.

Gelöst habe ich das durch eine kleine match Function.

abstract class Helper {
  /**
   * Correct integer to int in the gettype php function
   * https://bugs.php.net/bug.php?id=74742
   * @param string $type
   * @return string
   */
  public static function mapGetTypeType(string $type): string {
    
    return match($type) {
      'integer' => 'int',
      default => $type
    };
    
  }
}

CSV Download mit Javascript erstellen

Erstellt in Javascript am 14. November 2023 vom Daschmi

Mit folgender JavaScript Funktion kann ein CSV Download aus einem Array initiiert werden.

function downloadCSV(data, filename) {

	const csvContent = "data:text/csv;charset=utf-8," + data.map(row => row.join(",")).join("\n");
	const encodedUri = encodeURI(csvContent);
	const link = document.createElement("a");

	link.setAttribute("href", encodedUri);
	link.setAttribute("download", filename);

	document.body.appendChild(link);

	link.click();

	document.body.removeChild(link);

}

Das ganze wird dann wie folgt aufgerufen:

downloadCSV(csvData, fileName);

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