PHP rychlá práce s obrázky (c) Oldřich Šálek
Od jisté doby vím, že výkon není zadarmo a taky vím, že výkon není nekonečný. Se systémovými prostředky by se mělo šetřit. Když jsem koupil web patrikvogl.cz, zjistil jsem, že na ftp chybí spousty obrázků. Při načtení stránky je vidět spousty křížků informujích o chybějícím obrázku. Toho jsem se chtěl zbavit a proto jsem si vytvořil skript, který mi místo chybějícího obrázku podstrčí obrázek chybový (404.png).
$obrazek = ImageCreateFromPNG('css/404.png');
header('Content-Type: image/png');
imagepng($obrazek);
imagedestroy($obrazek);
Skript byl hotový, víc jsem neřešil. Skript funguje. To jsem ještě nic netušil o optimalizaci PHP skriptů. Zjišťuji přes program ab (apache benchmarking), že 1000 *10 spuštění skriptu trvá neuvěřitelných 40sekund.
Řešení nevymýšlel dlouho, napadlo mne ihned.
header("Location: ".HOME.'404.png');
header("Connection: close");
die('nenalezeno'); // presmerovani proste nestaci. skript nesmi pokracovat dale
Prostě požadavek elegantně přepošlu na chybový obrázek. Stejným postupem jsem testnul rychlost přesměrování. Provedení skriptu 1000*10 krát trvá „jen“ 3,4 sekund. To by se dalo považovat za úspěch, ale mě napadlo ještě jedno řešení. Místo přesměrování budu otevírat klasický jako soubor.
$img = file_get_contents('404.png');
header('Content-Type: image/png');
echo $img;
Můj poslední skript je ještě o třetinu rychlejší. Trvá jen 2,1 sekund. S toho nelze než nemít radost :).