Jednou si tak programuju na svym serveru a jak mám ve zvyku hned debuguju právě napsaný kód v PHP. Takže pouštím web zadávám URL a odezva je najednou nějaká strašně pomalá, skoro bych řekl, že žádná. No chvíli čekám, mám tam nejaký cyklus, a po hodné chvíli stále nic… Pouštím pro kontrolu jiný web a nic nejede. Takže VMW a koukám, server beží na 100% a dochází místo na disku. Tak ho otočím všechno v pořádku naběhne, no nic něco se zaseklo, už to zase běží.
Běží do chvíle než spustím onu URL…
a zase se to zaseklo…
takhle se to opakuje ještě asi 3x…
než došlo místo na disku…
brrrr co teď někde mám chybu jako kráva a už 10x jsem to kontroloval a nic nenašel??
za chvíli najdu obří errorlog, za pár mnut testování desítky GB…
říká, že neexistují řádky v databázi s ID kolem 2 500 000, no bodejť by existovaly, když tam nejsou…
je jich tam kolem 20…
nedělám nic zvláštního jednoduše čtu pár řádkků z DB v cyklu for tak jako jsem to dělal už milionkrát…
—
Po půl hodině zírám jako vyvoraná myš MÁM TO!
for ($x = 0; x < $max_count; $x++) {
// přečti číslo objednávky
$Objednavka = mysql_result($sSQL, $x,"OBJEDNAVKA");
// … dalsi kod ….
}
Pochopitelně správně má být:
for ($x = 0; $x < $max_count; $x++) {
Je to jasný?
Ještě nikdy za posledních 25 let programování jsem takovou chybu neudělal, ovšem proč to php zbaštilo to netuším…
Samotná chyba v te podmince cyklu by asi jen zacyklila procesor, ale v kombinaci s tim dotazem do databáze a následným logováním err odpovědí to byla smrtící kombibace. Jen mě překvapilo jak strašně rychle se ten log vytvořil a zaplnil komplet celý disk.
Předpokládal bych, že takovou hrubou chybu kompilátor vůbec nepustí na stránku.