Warum hashen und cachen?
Ohne lange Erklärungen gehe ich direkt zu einem Beispiel. Gegeben ist eine URL inklusive viele Parameter. Wir wollen diese URL maskieren damit der User diese URL nicht sehen kann.
Die base64_encode() Methode
Encodes the given data with base64.
This encoding is designed to make binary data survive transport through transport layers that are not 8-bit clean, such as mail bodies.
Base64-encoded data takes about 33% more space than the original data.
Base 64 eignet sich hervorragend dazu, Links zu maskieren. Es hat aber wie schon im Quote erwähnt einen gewaltigen Nachteil: Der Originalstring wird größer!
Weiterhin hat base64 noch einen kleinen Nachteil. Einige Sonderzeichen werden nicht unterstützt. Daher müssen diese erst einmal rausgefilter werden.
$link = "http://www.beispiel.tld/link?param1=eins¶m2=zwei¶m3=drei";
$encodedLink = strtr ( base64_encode ( $link ), '+/=', '-_,' );
Die Memcache Methode
Memcache module provides handy procedural and object oriented interface to memcached, highly effective caching daemon, which was especially designed to decrease database load in dynamic web applications.
Super Sache, denn mit Memcache lassen sich mit der Methode Memcache::add() Variablen im Speicher ablegen. Die Methode add() nimmt zwei Argumente entgegen – key und value. Als Key bietet sich ein unique identifier an, zum Beispiel ein Hashtag.
$link = "http://www.beispiel.tld/link?param1=eins¶m2=zwei¶m3=drei";
$md5 = md5($link);
Memcache::add($md5, $value);
Die APC Methode
Auch APC bietet eine Methode an um Dateien direkt im Cache abzulagern. Die Funktionsweise von APC und Memcache sind oberflächlich ähnlich. Der Unterschied ist aber dass Memcache ein verteiltes Caching ermöglicht während APC nur lokal cached. Der Zugriff auf APC ist daher sehr schnell. Es bietet sich besonders an wenn Werte oft geändert und gelesen werden.
PHP bietet von Haus an eine native Unterstützung für APC. Die funktion heisst in dem Fall apc_add() und nimmt auch wie bei Memcache::add() die Gleichen zwei Argumente entgegen: key und value.
$link = "http://www.beispiel.tld/link?param1=eins¶m2=zwei¶m3=drei";
$md5 = md5($link);
apc_add($md5, $value);