php

A register_shutdown_function esete az ImageCreateFromPNG-vel

Sajnos úgy tűnik, hogy az php GD comagban lévő imagecreatefrompng függvénynek lehet olyan bemenetet adni, amitől úgy hasal el és rántja magával a php-t, hogy utóbbinak már arra sincs ereje, hogy meghívja a register_shutdown_function-el regisztrált kilépő függvényünket.

Aki képeket akar feldolgozni cron-ban php szkript-el, annak jó ezt észben tartani.

parse_url() alternatíva

HTML-ből kiszedett url-eket dolgoztam volna fel, de a PHP beépített parse_url() függvénye egy warning kíséretében elszáll, ha relatív url-eket adunk meg.

Szintén nem tetszenek neki az olyan URI-k, mint pl. a mailto: vagy ftp://

Írtam egy függvényt, ami úgy dolgozza fel az URL-eket és URI-kat, hogy

  • soha nem száll el warning-al
  • jól kezeli a relatív URL-eket
  • teljes értékű helyettesítője a php parse_url()-nek

Itt a kód, illetve a post végén egy linken le is tölthető. Bárki bármilyen hibát talál, jelezze a hozzászólásoknál, hogy javíthassam.

<?php
function parse_url_relative($url, $component = NULL){
 
$full_rx = '!^
    (?P<scheme>[a-z][a-z0-9\+\-\.]*):/*         # scheme
    (?:(?P<user>[^:@]*)(?::(?P<pass>[^@]*))?@)? # user and password
    (?P<host>[^/\?\#:]*)                        # host
    (?::(?P<port>[0-9]+))?                      # port
    (?P<path>[^\?\#]*)                          # path
    (?:\?(?P<query>[^\#]*))?                    # query
    (?:\#(?P<fragment>.*))?                     # fragment
  $!ix'
;

 
$path_rx = '!^
    (?P<path>[^\?\#]*)                          # path
    (?:\?(?P<query>[^\#]*))?                    # query
    (?:\#(?P<fragment>.*))?                     # fragment
  $!ix'
;

  if (!
preg_match($full_rx, $url, $m)) {
   
preg_match($path_rx, $url, $m);
  }

 
$return = array(
   
'scheme'    => isset($m['scheme'])    ? $m['scheme']    : NULL,
   
'user'      => isset($m['user'])      ? $m['user']      : NULL,
   
'pass'      => isset($m['pass'])      ? $m['pass']      : NULL,
   
'host'      => isset($m['host'])      ? $m['host']      : NULL,
   
'port'      => isset($m['port'])      ? $m['port']      : NULL,
   
'path'      => isset($m['path'])      ? $m['path']      : '',
   
'query'     => isset($m['query'])     ? $m['query']     : '',
   
'fragment'  => isset($m['fragment'])  ? $m['fragment']  : '',
  );

  switch (
$component) {
    case
NULL:
      return
$return;
    case
PHP_URL_SCHEME:
      return
$return['scheme'];
    case
PHP_URL_HOST:
      return
$return['host'];
    case
PHP_URL_PORT:
      return
$return['port'];
    case
PHP_URL_USER:
      return
$return['user'];
    case
PHP_URL_PASS:
      return
$return['pass'];
    case
PHP_URL_PATH:
      return
$return['path'];
    case
PHP_URL_QUERY:
      return
$return['query'];
    case
PHP_URL_FRAGMENT:
      return
$return['fragment'];
  }
}
?>

Mi a közös bennük: Firefox 2, MySQL 3, PHP4, Drupal 5?

Több mint két hete már, hogy megjelent a Firefox 3, kiváncsi lettem, hogy mennyien tértek át. Az F1világ látogatottsági statisztikája alapján az összes Firefox felhasználóból 17% tért át a 3-as verzióra. Ami kevés, szerintem.

Akkor mégis mi is a közös a Firefox 2, MySQL 3, PHP4 és Drupal 5-ben?

Nem, nem csak az hogy internettel kapcsolatos szoftverek, hanem az, hogy túl jól sikerültek, és kevesen tértek át az újabb verziókra.

A MySQL 3 hírhedt arról, hogy mennyi helyen használják, PHP4 szintén, és úgy néz ki a Drupal 5-el is ez a helyzet. Bár ez a hír valószínüleg lendít majd a Drupal 6 elterjedésében. Legalábbis remélem. Az FF3 penetráción meg egy Firebug dobna sokat, szerintem.

GoPHP5.org

Anno, 2007 közepén, nagy lelkesedéssel olvastam a GoPHP5 kezdeményezésről. Örültem, hogy végre valaki felkarolta ezt a problémát.

Azonnal el is kezdem figyelni, hogy a CentOS csapata mikor fogja bevezeti a base vagy a centosplus repo-ba a PHP 5.2-t. Akkor még 5.1.6 volt a standard PHP verzió.

Több mint másfél hónapja elmúlt 08.05.02, és szomorúan jelenthetem, hogy azóta sem történt előrelépés, a centosplus repository php verziója még mindig az 5.1.6.

Én nem vagyok egy Linux guru, ha egy mód van rá elkerülöm olyan szoftverek telepítését, amelyek nincsenek benne egyetlen hivatalos repo-ban sem. Az én szerveremen akkor lesz PHP 5.2, amikor a CentOS team is úgy akarja.

Különösebben nem fáj egyébként a hiánya. PDO abszolút nem hiányzik, jó XML támogatás 5.1 alatt is megoldható.

Egy dologra fáj csak a fogam, a fájl feltöltés állapotellenőrzés-re.

Remélem CentOS-ék mihamarabb lépnek ez ügyben, bár tudom, hogy nem csak rajtuk múlik.