Dávám PHP4 rok, maximálně dva
To jsem si říkal v loni, když vyšlo PHP verze 5. Byl jsem
skeptický, neočekával jsem jeho brzké nasazení na placených hostinzích.
Dnes vidím, že jsem byl skeptický málo. Budou to spíš roky dva.
Proč má PHP5 stále tak malou podporu? Faktem je, že předělávat
existující a především fungující skripty jen kvůli tomu, že kdesi
vymysleli nové PHP, je nesmysl (stejně jako přepisovat hotové stránky
z HTML 4.01 do XHTML). A hostéři by k tomu neměli své klienty nutit.
Prostě do fungujících věcí se nešahá. Někdy je nebezpečné vymetat
i pavučiny, člověk neví, která co drží, která je ta nosná
Jenže stále se píše spousta nových skriptů, pro které by PHP5 představovalo zásadní přínos. Bohužel, bez masivní podpory hostingů si pětkový luxus nemůže spousta vývojářů dovolit. Myslím především vývojáře OpenSource aplikací. Z tohoto pohledu jsou to právě hostéři, kdo brzdí pokrok.
Je skutečně takový problém nabídnout klientům volbu mezi verzí 4 a 5?
p.s. jedno pozitivum to ale má: až většina hostingů začne pětku nabízet, nebude to už 5.0, ale 5.1 nebo 5.5.
Jak zabít procesor
Nedávno jsem uvažoval, jak pracuje takový překladač PHP. Napadlo mě napsat zdrojový kód, který by jej odstřelil. V případě PHP4 se mi to povedlo – stáhněte si a vyzkoušejte tento příklad. PHP5 už umí vstupní data ošetřit lépe a namísto smrti ohlásí Parse error: parser stack overflow (pro pětku použijte upravený příklad).
Na webové prohlížeče lze zaútočit i na další frontě. Například je nechat zobrazit extrémně velký obrázek. Pro experiment bude stačit bitmapa o velikosti např. 1024×768, ke zvětšení použijeme HTML:
<img width="9000000" height="9000000"
src="wallpaper.jpg" />
Jak si s tím poradí trojlístek IE, Firefox a Opera? První dva jmenovaní se pokusí vyhovět zadání a počítač vytíží natolik, že bude připomínat mrtvý stroj (zkuste zarolovat). Opera rozměry zdaleka nedodrží (má limit někde kolem 30.000 pixelů) a k přetížení nedojde. Co je důležité, žádný z prohlížečů nezačne bezhlavě alokovat kvanta paměti a vždy jen přepočítá zobrazovaný výřez.
Můžete si to sami vyzkoušet – ale klikejte jen s vědomím všech rizik!
Ještě dodávám, že testy jsem dělal na Windows 2000 SP4 s Apache 2.0.48, PHP 4.4.0 & 5.0.4, IE 6 SP1, Firefoxem 1.0.4 a Operou 8.01. Jinde se může chování lišit.
Jak zredukovat PHP skripty?
Občas je třeba zmenšit PHP skripty na minimum. Odstranit komentáře, zredukovat bílé místo. Zkrátí se doba nahrávání na server, mírně zrychlí provádění a program se stane hůře čitelný pro nepovolané osoby.
Existují sice nástroje, které tento úkol řeší téměř dokonale (Zend Encoder, SourceGuardian atd.), mají však svá „ale“. Buď v podobě závratné ceny, specifických nároků na hosting, nebo v prostém zatajení faktu, že existují i zpětné dekodéry.
Ukážu vám jeden směšně jednoduchý postup, jak vypustit ze skriptů
zbytečné znaky. Používám jej pro texy-compact.php, kde
dosahuji úspory cca 50% velikosti. A v žádném případě to neovlivní
jeho funkčnost.
// Dgx's PHP shrinker
// PHP 4 & 5 compatibility
if (!defined('T_DOC_COMMENT'))
define ('T_DOC_COMMENT', -1);
if (!defined('T_ML_COMMENT'))
define ('T_ML_COMMENT', -1);
// read input file
$input = file_get_contents('script.php');
$space = $output = '';
$set = '!"#$&\'()*+,-./:;<=>?@[\]^`{|}';
$set = array_flip(preg_split('//',$set));
foreach (token_get_all($input) as $token) {
if (!is_array($token))
$token = array(0, $token);
switch ($token[0]) {
case T_COMMENT:
case T_ML_COMMENT:
case T_DOC_COMMENT:
case T_WHITESPACE:
$space = ' ';
break;
default:
if (isset($set[substr($output, -1)]) ||
isset($set[$token[1]{0}])) $space = '';
$output .= $space . $token[1];
$space = '';
}
}
// write shrinked file
fwrite(
fopen('output.php', 'w'),
$output
);
Nevím, jestli to potřebuje podrobnější komentář, každopádně hlavní magie se skrývá ve funkci token_get_all, kterou doporučuji nastudovat.
Online PHP shrinker
PHP hádanka VII.: rovný a rovnější
Najdete všechny hodnoty, kterých může nabývat proměnná
$value, aby byla následující podmínka vyhodnocena kladně?
$value = ???
if ($value=="ahoj") echo 'rovnost platí';
PHP: soubor, cesta a URL přehledně
Aneb mohlo by se vám hodit.
Klasické URL pdf
AcceptPathInfo pdf
Obrázky ukazují, jak PHP parsuje URL a cestu k fyzickému souboru se skriptem do pole $_SERVER.
AcceptPathInfo
je specialitka serveru Apache, díky které je možné používat pěkná URL
i bez modulu mod_rewrite a
také spoustu serverů rozhodit pouhým přidáním /x za koncovku
.php.
Pokud objevíte nepřesnost nebo vás napadne vhodné doplnění, napište mi do komentářů.
novější články
