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

http://user:pass@example.com pro SP2

Pokud vás štve, že po nainstalování Service Pack 2 pro Windows XP (případně jiného patche) nefunguje v Internet Exploreru zjednodušené přihlašování ve formě http://username:password@example.com, dá se to řešit úpravou registrů.

Vytvořte si soubor iefix.reg s tímto obsahem a pak jej spusťte:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_HTTP_USERNAME_PASSWORD_DISABLE]
"iexplore.exe"=dword:00000000
"explorer.exe"=dword:00000000

Změna se bude týkat všech uživatelů počítače. Pokud ji chcete omezit jen na aktuálního uživatele, zaměňte klíč HKEY_LOCAL_MACHINE za HKEY_CURRENT_USER.

clock 16. 9. 2005 pencil HTML & CSS comments Komentáře: 19


Databázové tabulky: singulár nebo plurál?

Vzpomínka na krásné chvíle na www.synthesia.cz Rád bych se zeptal všech ctěných programátorů, jestli pro databázové tabulky volí názvy v jednotném nebo množném čísle? Tedy používáte User, Password, Order nebo Users, Passwords, Orders? Nebo se dokonce přikláníte k českým názvům (uzivatele, hesla, objednavky)?

Jak nazýváte tabulky obsahující jen cizí klíče? A pole s těmito klíči?

A co v případě programovacích jazyků: dáváte polím názvy v singuláru nebo plurálu? Tedy $modules = array() nebo $module = array()?

clock 16. 8. 2005 pencil PHP comments Komentáře: 56


PHP Memory Leaks

Pojmem memory leaks se označují stavy, kdy aplikace není schopna uvolnit alokovanou paměť. Nedávno tento problém hlouběji rozebíral Roman -Dagi- Pichlík. A před pár dny jsem zjistil, jak katastrofálně je na tom PHP.

PHP Trošku odbočím. Před každým vypuštěním nové verze Texy! ji testuji tak, že nechám převést několik tisíc připravených souborů a porovnávám získané výsledky s referenčními. Onehdy jsem během testování měl spuštěného Správce úloh, záložku Procesy. Řeknu vám, pěkně mi klesla čelist, když jsem zahlédl, že PHP si ukouslo 900MB RAM a stále chce víc. Cosi shnilého je v mé aplikaci, pomyslel jsem si, a jal se hledat problém.

Tak jsem testovací skript + knihovnu Texy! postupně redukoval a redukoval, až jsem to zredukoval na těchto pár řádků:

class MemoryLeakClass {
  var $ref;
}

$obj = new MemoryLeakClass();
$obj->ref = & $obj;
unset($obj);

Pokud si myslíte, že příkaz unset() uvolní paměť drženou objektem, jste na omylu. Neuvolní. Můžete si to ověřit tak, že spustíte tento lehce upravený příklad a budete ve Správci úloh sledovat využitou paměť:

class MemoryLeakClass {
  var $consumeBigMemory;
  var $ref;
}

$obj = new MemoryLeakClass();

// allocate 5MB
$obj->consumeBigMemory = str_repeat('*', 5e6);

$obj->ref = & $obj;
unset($obj);

// wait 10s
sleep(10);

Během čekání (sleep) je krásně vidět, že paměť zůstává blokovaná. To je mazec, co?

Příklad můžete modifikovat i tak, že vytvoříte dva objekty, které budou referencí odkazovat jeden na druhého. I když je společně zrušíte příkazem unset(), vzpomínka na ně zůstane v živé paměti.

Problém se týká prakticky všech verzí PHP, testoval jsem od 4.3.0 do 5.0.4. Prohledal jsem PHP Bugs a našel více než dva roky starý související Bug #22055 Memory leak with references in objects. Reakce jednoho z vývojářů mě dostala:

It won't be fixed in PHP 4 anyway as it has to do with the way objects

Nicméně ani v pětce to vyřešené není.

Nejvíc mě na tom celém trápí, že neznám způsob, jak ty objekty uvolnit. I když zruším $obj->ref a následně $obj, stejně to nepomůže. Takže … nevíte o nějaké učebnici Javy pro začátečníky? :-)

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


How to emulate PHP5 object model in PHP4

I spent a lot of time thinking, how to emulate some PHP5's object model features in older PHP4. How get rid tons of ampersands in my source codes. How force objects to not copy itself every time.

So, there is solution.

…pokračování continue

clock 5. 8. 2005 pencil PHP comments


PHP4: zbavme se ampersandů II.

Nedávno jsem naznačoval způsob, jak v PHP4 předávat objekty bez všudypřítomných ampersandů. Nechci se opakovat a vysvětlovat, k čemu je to dobré – to si prosím nastudujte jinde.

Podařilo se mi najít nové a zcela originální řešení. Má i pár záporů, ty proberu níže. Nejprve se podívejte na tento kód:

class MyClass {
    var $parent;
    var $children = array();

    // všimněte si pětkového konstruktoru
    function __construct($parent = null)
    {
        if ($parent !== null) {
            $this->parent = $parent;
            $parent->addChild($this);
        }
    }


    function addChild($child)
    {
        $this->children[] = $child;
    }
}


$parent = new MyClass();
$child1 = new MyClass($parent);
$child2 = new MyClass($parent);

V PHP5 dle očekávání vytvoří takovouto hierarchii:

V PHP4 k tomu nedojde. Především kvůli absenci ampersandů, ale také kvůli pojmenování konstruktoru. Proto použijeme Trik.

…pokračování continue

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


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í.