Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

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.

clock 15. 7. 2005 pencil PHP comments Komentáře: 32


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.

clock 14. 7. 2005 pencil PHP comments Komentáře: 41


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

clock 19. 5. 2005 pencil PHP comments Komentáře: 30


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í';

clock 18. 5. 2005 pencil PHP comments Komentáře: 27


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ářů.

clock 2. 4. 2005 pencil PHP comments Komentáře: 8


phpFashion © 2004, 2012 David Grudlo webu

Pokud není uvedeno jinak, podléhá obsah těchto stránek licenci Creative Commons BY-NC-ND Creative Commons License BY-NC-ND

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.