In einer Welt, in der Content Diebstahl und Bandbreiten Kosten Hand in Hand gehen, ist ein passiver Schutz nicht genug. Die meisten Entwickler verlassen sich auf starre .htaccess Regeln, die oft mehr schaden als nützen, sie sperren Suchmaschinen aus, ruinieren das SEO Ranking und bieten keinerlei Mehrwert.
Dieses Dreamcodes Script bietet dir einen intelligenten Hotlink Schutz, Auto WebP & Mobile Resizing und das ohne ohne Framework Ballast. Es ist eine intelligente Sovereign Image Engine, die autonom entscheidet, welcher Besucher welche Version deiner Daten erhält.
Warum dieses System „intelligent“ ist:
- Kontextsensitive Auslieferung: Das Script erkennt den Unterschied zwischen einem legitimen Google Bot (SEO-Boost), einem Smartphone User (Performance-Boost) und einem Content Dieb (Branding-Boost).
- WebP Evolution: Jedes Bild wird on the fly in das hocheffiziente Next Gen Format WebP konvertiert. Das bedeutet: Bis zu 80% weniger Dateigröße bei identischer Qualität.
- Adaptive Resizing: Ein Smartphone erhält niemals mehr Pixel, als es physisch anzeigen kann. Das schont das Datenvolumen deiner Nutzer und katapultiert deine Core Web Vitals bei Google nach oben.
- Automatisierte Selbstreinigung: Das System verwaltet sich selbst. Ein intelligenter Cache Mechanismus sorgt dafür, dass nur benötigte Daten den Speicher füllen, während „Datenleichen“ automatisch entsorgt werden.
Anstatt deine Originalbilder dem direkten Zugriff des Webs auszusetzen, fungiert dieses Script als Gatekeeper. Deine Originale liegen sicher in einem geschützten Verzeichnis. Was die Außenwelt sieht, ist das Resultat einer Kette von Entscheidungen, optimiert für Speed, Sicherheit und Sichtbarkeit.
Erstelle eine .htaccess :
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !image-shield-ultimate\.php
RewriteRule ^(.*)\.(jpg|jpeg|png|gif)$ /dreamcodes-image-shield.php?img=$1.$2 [NC,L,QSA]
RewriteRule ^img-data/.*$ - [F,L]
<Directory "/img-data">
Order Deny,Allow
Deny from all
</Directory>
Erstelle die dreamcodes-image-shield.php :
<?php
$allowed_domain = 'dreamcodes.net';
$source_dir = __DIR__ . '/img-data/';
$cache_dir = __DIR__ . '/img-cache/';
$watermark_text = "Powered by Dreamcodes.NET";
$cache_lifetime = 86400 * 30;
$webp_quality = 75;
$mobile_width = 800;
if (!is_dir($cache_dir)) mkdir($cache_dir, 0755, true);
if (rand(1, 100) === 42) {
foreach (glob($cache_dir . "*") as $file) {
if (is_file($file) && (time() - filemtime($file) > $cache_lifetime)) unlink($file);
}
}
$img_param = basename($_GET['img'] ?? '');
$source_file = $source_dir . $img_param;
if (empty($img_param) || !file_exists($source_file)) {
header("HTTP/1.1 404 Not Found");
exit("404");
}
$is_mobile = preg_match('/(android|iphone|ipad|mobile)/i', $_SERVER['HTTP_USER_AGENT']);
$referrer = $_SERVER['HTTP_REFERER'] ?? '';
$is_safe = (empty($referrer) ||
strpos($referrer, $allowed_domain) !== false ||
preg_match('/(google|bing|yahoo|pinterest|facebook)/i', $referrer));
$device_prefix = $is_mobile ? 'mob_' : 'desk_';
$status_prefix = $is_safe ? 'safe_' : 'wm_';
$cache_file = $cache_dir . $status_prefix . $device_prefix . $img_param . ".webp";
if (file_exists($cache_file)) {
touch($cache_file);
header("Content-Type: image/webp");
header("X-Dreamcodes-Cache: HIT");
header("X-Device: " . ($is_mobile ? 'Mobile' : 'Desktop'));
readfile($cache_file);
exit;
}
$info = getimagesize($source_file);
$mime = $info['mime'];
$orig_w = $info[0];
$orig_h = $info[1];
switch ($mime) {
case 'image/jpeg': $image = imagecreatefromjpeg($source_file); break;
case 'image/png': $image = imagecreatefrompng($source_file); break;
case 'image/gif': $image = imagecreatefromgif($source_file); break;
default: exit;
}
imagepalettetotruecolor($image);
imagealphablending($image, true);
imagesavealpha($image, true);
if ($is_mobile && $orig_w > $mobile_width) {
$new_h = floor($orig_h * ($mobile_width / $orig_w));
$tmp_img = imagecreatetruecolor($mobile_width, $new_h);
imagealphablending($tmp_img, false);
imagesavealpha($tmp_img, true);
imagecopyresampled($tmp_img, $image, 0, 0, 0, 0, $mobile_width, $new_h, $orig_w, $orig_h);
imagedestroy($image);
$image = $tmp_img;
}
if (!$is_safe) {
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
$font = 5;
$x = imagesx($image) - 230;
$y = imagesy($image) - 30;
imagestring($image, $font, $x + 1, $y + 1, $watermark_text, $black);
imagestring($image, $font, $x, $y, $watermark_text, $white);
}
header("Content-Type: image/webp");
header("X-Dreamcodes-Cache: MISS");
imagewebp($image, $cache_file, $webp_quality);
imagewebp($image, null, $webp_quality);
imagedestroy($image);
