Softwarový projekt PHP.NET

Cílem projektu je modul, který by umožňoval běh skriptů jazyka PHP na platformě Microsoft .NET Framework. Modul bude spolupracovat s technologií ASP.NET a bude jejím doplňkem tak, aby bylo možné generovat webovské stránky napsané v jazyce PHP podobným způsobem, jak funguje generování stránek v ASP.NET.

Na rozdíl od standardního interpretu skriptovacího jazyka PHP bude náš modul stránky překládat do jazyka MSIL (Microsoft Intermediate Language). Při prvním přístupu na stránky bude mít server kvůli kompilaci delší odezvu, ale následující přístupy by měly být mnohem rychlejší, než by bylo možné dosáhnout interpretováním kódu. Výhoda tohoto přístupu bude markantní především při práci se skripty, které používají knihovny (např. PHPLIB, PEAR, PHP Nuke, apod.). Tyto knihovny jsou rozsáhlé, avšak neměnné, a tudíž jejich zkompilování proběhne na serveru pouze jednou. Jelikož je jazyk PHP interpretovaný, může obsahovat i kód, který není v době překladu známý. Kompilace tohoto kódu bude provedena až za běhu. Generování kódu za běhu programu platforma .NET Framework plně podporuje. Tím se sice částečně ztrácí výhoda předkompilování, nicméně letmou analýzou zdrojových kódů výše uvedených knihoven jsme zjistili, že konstrukce jazyka PHP vynucující odklad kompilace jsou v nich velmi řídké.

Naším hlavním požadavkem na projekt bude plná funkčnost existujících skriptů PHP bez jejich modifikace za předpokladu, že skripty nebudou využívat speciálních funkcí poskytovaných systémem Unix nebo serverem Apache. Aby mohlo být dosaženo tohoto cíle, bude třeba implementovat "standardní" funkce, které jsou poskytovány programátorům samotným interpretem PHP (práce s řetězci, poli apod.), do jazyka C#. Tyto funkce budou implementovány odděleně od hlavního modulu, budou proto využitelné v jakýchkoli jiných aplikacích na platformě .NET Framework.

Kromě "standardních" funkcí obsahuje PHP i funkce externí - v dynamicky linkovaných knihovnách. Ty poskytují programátorům možnost práce s různými databázemi, obrázky, komprimačními algoritmy apod. Jelikož těchto modulů je mnoho, a v budoucnu jich bude pravděpodobně ještě více, není možné je všechny implementovat v C#. Proto projekt bude obsahovat i modul, jenž umožní volání funkcí těchto knihoven z jazyka C#, pokud to bude možné. Zda je tento cíl realizovatelný zatím stoprocentně nevíme. Pokud se vyskytne nepřekonatelný problém, implementujeme nejpoužívanější externí funkce jako jsou funkce pro práci s různými databázemi, sockety a další.

Vedoucí projektu:
Jan Stoklasa, Microsoft s. r. o., jan.stoklasa@email.cz
Vojtěch Jákl, MFF, vjj@mff.cuni.cz

Členové týmu:
Jan Benda, Pavel Novák, Václav Novák, Martin Malý, Tomáš Matoušek, Ladislav Prošek