Od konce června je oficiálně k dispozici první betaverze PHP5. O chystaných novinkách jsem se zmiňoval již dříve (viz související články). Uživatelé si však mohli všimnout ještě jedné, dosud nediskutované změny – z PHP byla odstraněna interní podpora databázového systému MySQL. Proč k tomu došlo a co s tím vývojáři mohou udělat?

O co jde?

PHP obsahuje velmi dobrou podporu pro celou řadu databázových systémů a k mnoha dalším lze přistupovat prostřednictvím rozhraní ODBC. Pro každý databázový systém existuje knihovna, kterou je možné k PHP připojit, případně je možné přeložit PHP ze zdrojových kódů přímo s příslušnou podporou. Naproti tomu podpora pro databázový systém MySQL je již několik let v PHP integrována přímo, bez potřeby externí knihovny. Na platformě Windows jsou takto distribuovány všechny binární soubory, na Linuxu stačí přidat odpovídající parametr při kompilaci. I díky tomu si MySQL vydobyla obrovskou popularitu (a naopak snadné spojení PHP s databází napomohlo k rozšíření PHP). Ne nadarmo se používá zkratka LAMP (Linux, Apache, MySQL, PHP), případně WAMP (totéž na Windows) pro nejoblíbenější vývojovou platformu pro web.

S PHP5 výše řečené přestává platit. Interní podpora MySQL byla zrušena, čímž se MySQL v PHP dostává na roveň s ostatními databázovými systémy. (Ve skutečnosti je situace ještě horší, jak za chvíli zjistíme.) Mnohé vývojáře v PHP tento krok zmátl, neboť na MYSQL byli zvyklí. Pro řadu z nich je dokonce MySQL synonymum databázového systému. Co tedy vedlo autory PHP k tomuto kroku, o němž jistě nečekali, že bude přijat s jásotem?

Na první pohled by se mohlo zdát, že důvodem je právě snaha nepreferovat jeden konkrétní databázový systém, když existuje řada dalších a často volně použitelných alternativ. Jmenujme SQLite jako jednoduchý souborový DBS, PostgreSQL jako komplexní a spolehlivý DBS nebo slibně se rozvíjející projekt Firebird. Existuje-li tolik použitelných řešení, proč některé z nich preferovat? Například proto, že statisíce vývojářů si na tento stav zvyklo. Ale důvodem změny zřejmě není snaha o rovnoprávnost databázových systémů v novém PHP. Důvody jsou právní.

MySQL pod GPL

Vývojáři databázového systému MySQL (nebo jejich právníci) se rozhodli distribuovat databázový systém MySQL pod známou licencí GPL. To mimo jiné znamená, že každý program, který se s takovýmto systémem propojuje, musí být opět vydán pod GPL nebo musí mít zakoupenu licenci. PHP je distribuováno pod jiným typem licence, konkrétně BSD, který není pro vývojáře tolik zavazující – umožňuje vytvářet i komerční aplikace bez nutnosti licence.

Autoři PHP tedy byli nuceni interní podporu MySQL z PHP odstranit, jinak by totiž museli změnit licenci k PHP, a v důsledku toho by i vývojáři PHP museli své projekty zpřístupnit pod GPL nebo žádat o licenci. MySQL je nyní v PHP podporováno (téměř) jako ostatní DBS – pokud chcete příslušné funkce využívat, musíte připojit příslušnou knihovnu (DLL na Windows, SO na Linuxu). A samozřejmě, že pokud této možnosti využijete, týkají se vás licenční omezení GPL.

Opravdu? Skutečně budu muset zpřístupnit své aplikace pod GPL, pokud budu chtít používat MySQL? Tato otázka není zcela triviální, debatují o ní dosud i právníci nejen zmiňovaných vývojářských společností. (Sám nejsem právník, abych mohl zaujmout jasné stanovisko.) Faktem je, že vaše aplikace v PHP není nijak propojena s MySQL, neboť propojení obstarává PHP jako prostředník (či dokonce knihovny připojené k PHP). Na druhou stranu toto propojení zřejmě stačí na to, aby dle GPL i výsledný program (respektive zdrojový datový soubor pro jinou aplikaci, PHP) pod tuto licenci spadal. Zatím se o celé problematice spíše spekuluje a na výsledek si budeme muset počkat. Možná, že pomůže až skutečný soudní proces, možná (a velmi pravděpodobně) mnoho vývojářů přejde na jiný DBS, koneckonců, migrace mezi DBS není v PHP obvykle příliš složitá.

Dle vyjádření právníka společnosti MySQL AB, vyvíjející databázový systém MySQL, se v současné době pracuje na právním řešení problematiky. Výsledkem má být částečná výjimka, umožňující uživatelům knihoven MySQL (nikoli vývojářům, kteří modifikují samotný DBS) vydat svá díla, využívající zmíněnou databázi, pod jinou licencí pro volně šiřitelný software. V zásadě to znamená, že pokud se vám GPL pro vaši aplikaci nehodí, budete zřejmě moci použít jinou licenci pro volně šiřitelný software, třeba BSD. Pokud se však rozhodnete šířit svůj program za jiných podmínek, budete muset od MySQL AB získat licenci.

Zřejmě teprve časem se ukáže, jak tento právní problém vyřešit, a nepochybuji, že to rozvíří bouřlivou diskuzi i zde pod článkem. Neváhejte přijít s novými poznatky a upřesněním zde prezentovaných informací.

PHP a MySQL

Vraťme se od právní problematiky zpět k samotnému PHP a jeho propojení s MySQL. Zmínil jsem se o tom, že MySQL bude nyní podporováno obdobně jako ostatní databázové systémy, ale situace je nyní ještě horší. Proč? Stáhnete-li si například betaverzi PHP5 pro Windows, zjistíte, že rozchodit ji s MySQL není jednoduché. Interní podpora chybí, externí ovšem také. Odpovídající knihovna php_mysql.dll totiž v distribuci není! Velmi trapná záležitost. Kromě zmíněného rozšíření php_mysql.dll pro podporu MySQL v PHP potřebujete ještě dynamickou knihovnu libmySQL.dll, kterou v adresáři php/dlls najdete, stačilo by ji přesunout někam, kde ji zase najde PHP – tedy buď do adresáře s php.exe, nebo do adresáře s knihovnami Windows (osobně preferuji první řešení).

Situaci lze vyřešit jedině stažením aktuální distribuce místo oficiální betaverze. Ta již knihovnu php_mysql.dll obsahuje. Ale pozor! Nestačí pouze z nového archivu zkopírovat tuto knihovnu, neboť došlo ke změnám také v podpůrné knihovně libmySQL.dll a PHP samotném. Je třeba (kromě již mnohokrát zmiňovaného přechodu na jiný databázový systém) nainstalovat celou novou distribuci (v současné době 5.0.0b2-dev). Zde již MySQL funguje uspokojivě. Shrňme si ještě jednou celý postup, jak dostat do PHP5 podporu pro MySQL:

  1. Stáhnout aktuální verzi z http://snaps.php.net a nainstalovat místo původní.
  2. Umístit knihovnu libmySQL.dll někam, kde si ji může interpret najít.
  3. V konfiguračním souboru php.ini přidat řádek extension=php_mysql.dll.
  4. Pokud vám funguje PHP jako modul, je třeba ještě restartovat webový server.

Nyní můžete podporu MySQL otestovat, nejprve třeba pomocí funkce phpinfo().

Shrnutí

Vyřazení interní podpory oblíbeného databázového systému MySQL z nové verze PHP bylo vynuceno změnou licenčních podmínek tohoto DBS a jedná se ze strany autorů PHP o vcelku pochopitelný krok. Na druhou stranu je třeba říci, že uživatelé PHP měli být o této situaci mnohem lépe informováni než pouhým řádkem v souboru news.txt, který říká, že tato podpora byla odstraněna. Řada uživatelů totiž může tento krok vnímat jako zradu a vinit za něj autory PHP. Zároveň je zřejmé, že adaptace na krok MySQL AB vznikla narychlo, a v první oficiální betaverzi PHP5 prakticky neexistuje žádná podpora MySQL. Jedná se sice pouze o betaverzi, nikoli o konečný produkt, ale spolu s dalšími nepříjemnými drobnostmi (jako například ignorování nastavení register_globals) se zdá, že tato betaverze byla i po měsících čekání poněkud uspěchaná.

Alternativy

Protože to zatím vypadá, že pro většinu vývojářů bude neúnosné ve svých aplikacích nadále MySQL používat, rád bych se v krátkosti zmínil o možných alternativách. Pro domácí použití nepochybně postačí zajímavý systém SQLite. Jedná se o jednoduchý souborový databázový systém, který si při malých rozměrech databáze vede velmi dobře i v rychlostních testech, v mnoha ohledech překonává i rychlé MySQL. Navíc PHP5 již obsahuje interně podporu pro SQLite, i když dokumentace zatím chybí. Pro větší systémy je toto řešení samozřejmě nepoužitelné a přednost nejspíš dostane osvědčený PostgreSQL (knihovny a funkce pro přístup k této databázi PHP obsahuje) či nově vyvíjený Firebird, k němuž lze přistupovat prostřednictvím rozhraní a funkcí pro databázový systém InterBase.

Související články

Další zdroje

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět