Jak se dá shodit PHP
Školení, která pořádám
Přestože je PHP vysokoúrovňový jazyk (např. není třeba alokovat paměť nebo se starat o ukazatele), neposkytuje kompletní prevenci proti potenciálně nebezpečným operacím. 10 způsobů, jak shodit PHP, představuje na svém blogu Ilia Alshanetsky, jeden z předních vývojářů PHP (je zodpovědný za vydávání verze 4.3.x). Článek je už poněkud staršího data, většina způsobů ale myslím bude platit stále.
Na jeho blogu je více zajímavých příspěvků, např. kritika direktivy safe_mode nebo triky pro optimalizaci rychlosti kódu (někdy až legrační – např. strlen($foo) < 5
je pomalejší než !isset($foo[5])
, ale používat to bych vám kvůli čitelnosti kódu opravdu nedoporučoval, jindy naopak rozumné – např. $keys = array("key" => true); isset($keys["key"])
je u velkých polí rychlejší než $keys = array("key"); in_array("key", $keys)
).
Přijďte si o tomto tématu popovídat na školení Bezpečnost PHP aplikací.
Diskuse
isset($keys["key"]) je rychlejší prakticky vždy, tedy nejen u velkých polí. Mezi oběma typy polí se dá transformovat funkcí array_flip()
Tomáš:
Tohle ale nezjistí, pokud v poli prvek existuje, ale má null hodnotu, mnohem lepší ke array_key_exists()
Kryšpín:
jsem amatér, ale když jsem zkoušel v php funkce pro zamykání tabulek MySQL (locktables .... unlocktables) tak pokud v kodu mezi nimi byla nějaká fatální chyba (lze nasimulovt například die(); ), tak to na lokálu shodilo mysql server. Na webu jsem to raději nezkoušel, takže nevím jestli je to mým amatérským nastavením php a mysql nebo něčím jiným.
Slash:
Ted jsem se setkal s případem že jakékoliv volání COM shodí Apache. Třeba
<?php
$excel = new COM("excel.application") or die("Unable to instantiate Excel");
echo "Loaded Excel, version {$excel->Version}\n";
?>
Nevíte čím by to mohlo být?
Mám apache 1.3.33, php 4.3.10
patrik:
je to bug apache, viz jejich buq track ci jak se to jmenuje
<?php
$excel = new COM("excel.application") or die("Unable to instantiate Excel");
echo "Loaded Excel, version {$excel->Version}\n";
?>
že by špatná kontabilita ?
Diskuse je zrušena z důvodu spamu.