Přejít k navigační liště

Zdroják » PHP » Hostujeme PHP aplikace na Windows

Hostujeme PHP aplikace na Windows

Články PHP, Různé

Naprostá většina webových programátorů v PHP / MySQL hostuje své aplikace na Linuxu, využívajíce LAMP platformu, nicméně vytvářejí je většinou na Windows. Řada z nich si nedokáže představit jiný postup. V článku si popíšeme výhody a nevýhody Windows hostingu pro PHP aplikace a zkušenosti s migrací aplikací mezi Apache -> IIS a MySQL -> SQL Server 2008.

Výhody Windows 2008 Server hostingu

Přestože osobně také preferuji na desktopu Windows (a aplikace pro ně), pro hostování PHP / MySQL aplikací jsem řadu let používal jen a pouze Linuxové webhostingy. Od spousty lidí nakonec stále není problém slyšet „axiom“ na server patří Linux (aniž ovšem dodávají proč), a o Windows webhostingu vůbec neuvažují.

K přechodu na Windows hosting vás může přimět:

  • potřeba využívat i jiné databáze než MySQL, například Microsoft SQL Server 2008, které mají lepší možnosti programování,
  • potřeba provozovat současně PHP i ASP.NET aplikace na jednom serveru,
  • pokud chcete hostovat větší množství domén, a vyplatí se vám tedy fyzický či virtualizovaný vlastní server, ale je pro vás (jako pro většinu lidí s Windows) snazší administrovat si Windows 2008 Server než třeba Gentoo Linux,
  • výrazná nespokojenost (podpořená zkušeností) s low-cost LAMP hostingy s „neomezeným“ počtem domén, které se sice tváří jako ve všem nelimitované, ale v důsledku vás stojí spoustu nervů a zbytečného úsilí,
  • potřeba ovlivnit nastavení serveru, které sdílená LAMP platforma nenabídne,
  • snadná správa serveru i aplikací z Windows desktopu i mobilního telefonu,
  • používání aplikací, které znáte z desktopu (správce souborů, editor, atd.) i pro práci na serveru,
  • stabilní systém a „nezbořené“ MySQL tabulky, jak je známe snad ze všech sdílených LAMP webhostingů.

Pokud tedy programujete na Windows (ať už jsou to XP, Vista či Windows 7), bude pro vás zřejmě přijatelnější tato administrace vlastního serveru než SSH příkazová řádka GNU Linuxu:

Winhosting

V případě Windows hostingu máte díky virtualizační technologii Hyper-V Microsoftu na výběr nejen relativně drahé fyzické servery, ale, podobně jako na Linuxu, i virtuální servery. Jedná se o přidělení fyzické části RAM, výpočetního času procesoru a prostoru na disku vašemu virtualizovanému „stroji“, který se následně tváří jako fyzický stroj a můžete tedy jeho nastavení plně ovlivnit.

Současná tržní cena Hyper-V virtualizovaného serveru (VPS) v ČR s přiděleným 1GB RAM, 50GB diskového prostoru, neomezeným přenosem v rámci NIXu a s licencí na Windows 2008 Server  Standard je kolem 1000 Kč (plus DPH) měsíčně. Takovéto VPS webhostingové programy nabízí ASPone, Active24, Czechia, Forpsi a další. V této cenové hladině se nejedná typicky o „managed“ servery, je tedy nutné je aktivně administrovat – sledovat bezpečnostní problémy, logy, nechat pravidelně instalovat bezpečnostní aktualizace, nastavit korektně firewall, aktualizovat PHP – to je práce pro vás.

Vzhledem k tomu, že na VPS server můžete nasadit desítky vlastních domén či domén pro vaše klienty, jedná se o rozumnou částku, která je ve finále nižší, než platit třeba 20×150 Kč na běžném českém „LAMP webhostingu“, účtujícím každou doménu zvlášť.

Nezanedbatelnou výhodou může být i snadná administrace serveru odkudkoliv pomocí Remote Desktop Mobile na telefonech s Windows Mobile (je to použitelné i při GPRS rychlostech):

Winhosting

Nevýhody Windows 2008 Server hostingu

Hlavní nevýhody Windows hostingu pro provozování stávajících PHP aplikací jsou tyto:

  • část autorů PHP skriptů s hostováním na Windows vůbec nepočítá – například skoro žádná aplikace neumí pracovat s $_SERVER["UNENCODED_URL"], což je proměnná obsahující URL před jeho změnou pomocí microsoftí verze „mod rewrite“ na IIS7, část aplikací funguje beze změn jen pod Apache – v distribuci většiny open-source PHP aplikací naleznete jen .htaccess (pro Apache 2.x) namísto ekvivalentního web.config pro IIS 7.x,
  • některé aplikace se spoléhají na postarší FilesMatch (namísto mod_rewrite) v .htaccess, a ty budete muset upravit,
  • část samotných rozšíření pro PHP sice jde zkompilovat jako DLL pro Windows, ale nikdo z jejich autorů je v tomto prostředí pravděpodobně pořádně netestoval, a většinou tedy nejsou stabilní (zatímco na Linuxu ano).

Obecně lze říci, že pokud se jedná o vaše PHP skripty, nový vývoj nebo několik málo existujících open-source skriptů, bude většinou snadné tyto případné nekompatibility odstranit. Pokud ale pracujete s velkým množství různých open-source skriptů a nechcete každý jednotlivě testovat, bude pro vás snazší zůstat na LAMP platformě.

Část z těchto problémů samozřejmě řeší instalace Apache i na Windows 2008 jako webového serveru (namísto IIS), ale tím přijdete o možnost hostování ASP.NET aplikací.

Druhá (a lepší) možnost je mít v uvedených 1GB přidělené paměti VPS serveru spuštěn jak Apache, tak IIS7, MySQL i SQL Server 2008 Express (většina webhostingů nabízí 2 či více IP adres pro jeden VPS). Tím se dá snadno pokrýt přechodné období a migrace skriptů z Apache na IIS dostane rozumnější harmonogram.

Praktické zkušenosti z migrace LAMP → Windows

Při přesunu webů z LAMP platformy na Windows 2008 Server s IIS (a bez Apache) jsem migroval aplikace založené na 7 různých platformách – BLOG:CMS, F-ART:CMS, PunBB fórum, IP.Board, Mantis BugTracker, Singapore Photo Gallery a Dokuwiki. Otestování kompatibility a nutné programové úpravy v PHP kódu byly v tomto případě otázkou zhruba 10 hodin práce. Složitější bylo vybrat tu správnou PHP distribuci a zvláště akcelerátor, o tom ale níže.

PHP aplikace na Windows 2008 Server / IIS7

Instalace IIS

Prvním krokem pro migraci aplikací z Linux/Apache na Windows/IIS je samozřejmě instalace vlastního webového serveru. IIS 7.0 je přítomen ve Windows Vista a Windows 2008 Server, IIS 7.5 ve Windows 7 a Windows 2008 Server R2. Instalace znamená spustit si volbu „Zapnout nebo vypnout funkce systému Windows“ a zde si zvolit Internetovou informační službu a k ní patřičné funkce, včetně CGI (což nainstaluje i potřebné FastCGI):

Winhosting

URL Rewrite

Následně je potřeba stáhnout si a instalovat podporu pro „mod rewrite“, jak jej známe z Apache. Zde existují dva moduly, jeden zdarma pod názvem URL Rewrite Module nabízí přímo Microsoft, druhý je dostupný komerčně (US$ 99 na server) od společnosti Helicon Tech, pod názvem ISAPI/REWRITE/3.

Oba moduly mají své výhody a nevýhody – microsoftí modul pracuje vždy s konfiguračním souborem IIS 7 serveru pro daný web, tedy web.config, ale umí jednorázově importovat do tohoto souboru většinu pravidel obsažených ve stávajícím .htaccess souboru z konfigurace pro Apache mod_rewrite modul.

Takovýto zápis souboru .htaccess (z Nette PHP frameworku):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar.gz)$ index.php [L]

převede importní filtr URL Rewrite Module na ekvivalentní zápis ve  web.config:

<rule name="Nette rewrite" stopProcessing="true">
 <match url=".(pdf|js|ico|gif|jpg|png|css|rar|zip|tar.gz)$" negate="true" ignoreCase="false" />
 <conditions logicalGrouping="MatchAll">
  <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
  <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />
 </conditions>
 <action type="Rewrite" url="/index.php" />
</rule>

ISAPI/REWRITE/3 se chová jinak – umožňuje IIS zpracovávat běžné soubory .htaccess z Apache. Nemusíte je nijak upravovat, postačí aplikaci nakopírovat do adresáře inetpub a prostě spustit, drtivá většina pravidel je kompatibilní (viz tato tabulka) a zpracovávána.

Oba dva moduly pro rewrite URL se chovají trochu odlišně ve spolupráci s PHP. Microsoftí URL Rewrite modul dává URL před jeho přepisem do proměnné $_SERVER["UNENCODED_URL"], zatímco modul od Helicon Tech do $_SERVER["HTTP_X_REWRITE_URL"].  Oproti Apache mod_rewrite může být také vhodné provést změnu {SCRIPT_NAME} za  {URL}.

Osobně bych doporučil používat jen microsoftí URL Rewrite modul a .htaccess pravidla importovat.

Instalace PHP

PHP se v IIS zásadně provozuje pod FastCGI rozhraním, nikoliv ISAPI. Je to nejrychlejší a Microsoftem podporovaná varianta. Toto rozhraní zajišťuje samo o sobě thread-safe prostředí, takže si můžete stáhnout z PHP.net non-thread-safe verzi PHP (je rychlejší než TS verze). Ideální je přitom PHP verze 5.3 (a vyšší), je totiž nativně zkompilována ve Visual Studiu 2008 (VC9), zatímco PHP 5.2 a starší oficiálně podporovalo jen Visual C++ 6.0 z roku 1998.

Pro vývoj si ovšem nestahujte binární soubory PHP z PHP.net, na Windows existuje výkonově výrazně lepší řešení – komerční Zend Server, popřípadě jeho zdarma dostupná alternativa Zend Server Community Edition (CE).

Zend Server CE obsahuje kromě běžných rozšíření PHP i další zcela zásadní komponenty –  Zend Debugger, Zend DataCache a Zend Optimizer+. Zend Optimizer+ je rozšíření, které provádí kompilaci zdrojového PHP kódu do bytecode a také optimalizaci kódu, a tento opcode poté drží v paměti, což v praxi znamená několikanásobné zrychlení vaší aplikace.

Microsoft navíc úzce spolupracuje se Zendem, takže jeho řešení je nejen rychlé, ale i stabilní, otestované a na Windows de-facto jediné doporučitelné pro produkci.

Testoval jsem i další „PHP akcelerátory“ (+ binární soubory z PHP.net) na Windows, ale ať už se jednalo o eAccelerator, XCache či APC, vždy byl dlouhodobý výsledek jediný – nestabilita. Tyto rozšíření lze zkompilovat pro Windows, ale nikdo je zjevně ve Windows pořádně netestoval a při zátěži nefungují.

V praxi tedy potřebujete zdarma dostupný Zend Server CE, a to ve verzi s PHP 5.3. Samotná instalace Zend Serveru je „klikací“ a provede i veškeré potřebné úpravy v konfigurace IIS pro podporu PHP. Jediné, co budete muset doplnit, je přidat nový typ pro „Výchozí dokument“ – index.php a doladit  php.ini.

Drobný problém Zend Serveru je snad jen to, že je kompilován pomocí Visual Studio 2005 (VC8), zatímco většina externích PHP rozšíření (DLL) je kompilována pomocí starého VC6 nebo naopak nového VC9. Jedná se třeba o SQLSRV driver pro PHP, tedy nativní ovladač od Microsoftu pro přístup k SQL Serveru 2008. Není ovšem problém si toto rozšíření zkompilovat i pod VC8, postup jsem popsal na svém blogu.

Migrace databáze: MySQL → SQL Server 2008

MySQL databáze pro Windows existuje a funguje dobře. V praxi jsem se za 6 měsíců provozu deseti webů s IIS 7 / MySQL 5.1 na Windows hostingu nesetkal s jediným problémem (použité jsou MyISAM i InnoDB tabulky), zatímco na různých sdílených webhosting serverech bylo poškození tabulek (zejména MyISAM) či indexů na týdenním pořádku.

Pokud zvolíte Windows hosting, dostáváte výbornou příležitost začít používat lepší databázové enginy než je MySQL – konkrétně SQL Server 2008. Ten je ve verzi SQL Server 2008 Express with Advanced Services dostupný zdarma, a to i pro komerční použití (je ovšem omezen na využití max 1GB RAM a 4GB velikosti databáze, viz srovnání edicí). SQL Server 2008 je databáze, která výborně škáluje, je stabilní a je možné ji programovat podstatně lépe než MySQL. Výborné jsou i nástroje pro ladění výkonu – SQL Server Profiler a Database Engine Tuning Advisor. Pro správu databáze i vývoj je zdarma dostupná aplikace SQL Server Management Studio.

Pro propojení SQL Serveru 2008 s PHP existuje řada, většinou starých, pomalých a neaktualizovaných, rozšíření integrovaných ve standardní verzi PHP (jmenovitě MSSQL, PDO_MSSQL a ODBC), a poté funkční, rychlý a aktualizovaný SQL Server driver 1.1 for PHP, což je relativní novinka od Microsoftu publikovaná na Codeplexu pod open-source licencí. Pro použití se Zend Server CE si jej budete muset zkompilovat pomocí VC8, anebo stáhnout binárku zde (Microsoft dodává jen VC6 a VC9 binární soubory).

Tento driver zavádí do PHP nové sqlsrv funce, jejichž dokumentace je dostupná na MSDN. S SQL Serverem komunikuje od verze 1.1 přímo přes SQL Server 2008 Native Client, tedy tou nejrychlejší možnou cestou.

Při migraci databázového layeru vaší aplikace a jeho uzpůsobení z MySQL na SQL Server 2008 a sqlsrv funkce budete potřebovat znát minimálně následující rozdíly:

Neexistuje LIMIT start,offset

SQL Server 2008 nepodporuje v SQL SELECT dotazech stránkování, tedy LIMIT start, offset příkaz (podobně to nenabízí ani Oracle či Sybase), což se na webu přitom velice často používá. Podporuje jen ekvivalent LIMIT 0, offset, a to ve formě SELECT TOP x. Nicméně není problém si napsat stránkování vlastní, a to za pomocí funkce ROW_COUNT(), která vrací číslo aktuálního řádku podle určeného řazení v OVER (ORDER BY …).

V praxi je pro migraci z MySQL na SQL Server 2008 nejjednodušší napsat si funkci v databázovém layeru, která upraví původní SQL dotaz do vnořeného sub-SELECTU, v této formě:

SELECT queryresult.* FROM (
   SELECT fieldsX,
   ROW_NUMBER() OVER (ORDER BY fieldsY) as rnumber
   FROM table
) as queryresult
WHERE queryresult.rnumber BETWEEN ($start+1) AND ($start+$offset)

S takovou funkcí můžete používat syntax MySQL dotazů, a pro SQL Server budou správně překládány pro stránkování.

Defaultně není použito buffered query, neznáme tedy počet záznamů

MySQL databáze implicitně používá buffered query, což nejdříve přenese veškeré výsledky dotazu na klienta (PHP), a poté se dá použít funkce mysql_num_rows() pro jejich sečtení.

PHP driver pro SQL Server 2008 naproti tomu používá defaultně rychlejší unbuffered query (stejně jako třeba OCI8 rozhraní pro Oracle). Pokud v kódu potřebujete vědět předem počet řádků, doporučuji jej přepsat, většinou to totiž není nezbytně nutné, a často postačí jedna IF podmínka navíc, popřípadě můžete počítat počet řádků v průchodu WHILE cyklem pro FETCH, kdy počet znáte na konci cyklu.

Počítat dopředu počet položek bývá z 99% programátorská chyba. Většinou navíc ani nepotřebujete počet, spíše něco jako „has_rows()“, tedy IF row count>0.

Pokud přesto počet položek ve výsledku potřebujete, tak driver 1.1 zavádí funkce sqlsrv_num_rows a sqlsrv_has_rows. Pro použití té první ovšem musíte daný SQL dotaz zadat s parametrem "Scrollable" => SQLSRV_CURSOR_KEYSET, tedy použít (oproti unbuffered query pomalejší) databázový kurzor. Alternativou je samozřejmě i použití  SELECT
COUNT(*) FROM
.

Znaková sada a připojení k databázi

Datové typy nvarchar, ntext a další používají interně v SQL Serveru UCS2LE kódování. PHP Driver pro SQL Server takováto data poskytne defaultně v UTF16LE, pokud ale při připojení k databázi použijete parametr "CharacterSet" => "UTF-8", tak je převede z / na UTF-8 na vstupu i výstupu.

Připojení se k SQL Serveru 2008 s automatickou konverzí dat na UTF-8 může v PHP vypadat takto:

$SQL_HOST = 'localhost';
$SQL_PARAMS = array(
 'App' => 'aplikace',
 'ConnectionPooling' => true,
 'Database' => 'databaze',
 'UID' => 'uzivatel',
 'PWD' => 'heslo',
 "CharacterSet" => "UTF-8",
 'Encrypt' => false
);

$db = sqlsrv_connect($SQL_HOST, $SQL_PARAMS);
if (! is_resource($db)) die( 'Nemohu se pripojit k databazi');

 Číslo posledního vloženého záznamu s autoincrementem

Pole s automaticky se zvyšujícím sekvenčním číslem se nenazývá v SQL Serveru AUTOINCREMENT jako v MySQL, ale IDENTITY.  Jeho hodnotu změníte snadno v SQL pomocí příkazu  dbcc checkident.

Na poslední hodnotu IDENTITY, kterou vygeneroval INSERT INTO, neexistuje speciální PHP funkce jako v MySQL – mysql_insert_id(), ale získáte ji tímto SQL dotazem:

SELECT SCOPE_IDENTITY() AS 'Identity'

Ladění při vývoji

Při vývoji je dobré si zapnout maximální úroveň logu, a to příkazem:

sqlsrv_configure("WarningsReturnAsErrors", true);
sqlsrv_configure(LogSeverity, SQLSRV_LOG_SEVERITY_ALL);

 Rychlost dotazů

Plánování dotazů funguje v SQL Serveru 2008 jinak než v MySQL, takže to chce věnovat pozornost zejména návrhu indexů a VIEWs. Výborné je, že v SQL Serveru 2008 máte dostupné kvalitní nástroje na monitorování a ladění.

Doporučuji mít při vývoji neustále zapnutý SQL Server Profiler, a případně se po nějaké době podívat i na doporučení od aplikace Database Engine Tuning Advisor. Tyto nástroje v SQL Server 2008 Web / Standard / Enterprise snadno zjistí zásadní problémy návrhu DB již při vývoji.

Není ale příliš dobré aplikovat hromadně doporučení Database Engine Tuning Advisor (mohou jich být stovky). Často je lepší dotaz přepsat a případně k němu vytvořit ručně indexy pro tabulky a podívat se na jejich Execution Plan v Microsoft SQL Server Management Studio.

Triggery používají „inserted“ a „delete“ temporary tabulky

SQL Server 2008 nemá BEFORE INSERT triggery jako třeba MySQL či Oracle. Řeší se to jinou logikou  – AFTER INSERT triggerem, který pracuje s pomocnými tabulkami inserted (či deleted), které mají stejnou strukturu jako tabulka, nad níž se trigger aktivoval, a obsahují vložené (či smazané) záznamy.

V triggeru můžete aktualizovat i samotnou tabulku, která trigger vyvolala, což při jiném přístupu nebývá pravidlem. Kurzory v T-SQL zde fungují podobně jako na Oracle v PL-SQL.

Malý příklad AFTER INSERT triggeru i s (poněkud zbytečným, ale zde jde primárně o ukázku) použitím kurzoru – po vložení komentáře se aktualizuje tabulka článků o statistiku počtu komentářů a datum poslední diskuze, ke komentáři se dá jeho pořadové číslo v rámci diskuze:

CREATE TRIGGER [dbo].[TR_comment_insert]
   ON  [dbo].[comment]
   AFTER INSERT
AS
BEGIN
 SET NOCOUNT ON;
 DECLARE @citem as int,
      @ctime as datetime,
      @crel as int,
      @cnumber as int;
 DECLARE item_cursor CURSOR FOR
   SELECT citem, ctime, cnumber
   FROM inserted ORDER BY ctime ASC, cnumber ASC;
 OPEN item_cursor;
 FETCH NEXT FROM item_cursor INTO @citem, @ctime, @cnumber;
 WHILE @@FETCH_STATUS = 0
  BEGIN
   UPDATE dbo.item SET
     ilatestcomment = @ctime,
     inumbercomments = inumbercomments+1
   WHERE inumber=@citem;
   SELECT @crel = inumbercomments FROM dbo.item WHERE inumber=@citem;
   UPDATE dbo.comment SET crel=@crel WHERE cnumber=@cnumber;
   FETCH NEXT FROM item_cursor INTO @citem, @ctime, @cnumber;
 END
 CLOSE item_cursor;
 DEALLOCATE item_cursor;
END

CLUSTERED indexy na primární klíč nemusí být vždy vhodné

Dobře si rozmyslete, zda chcete PRIMARY indexy dělat jako CLUSTERED, což znamená, že řazení v indexu je poté ovlivněno fyzických pořadím záznamů na disku. Pokud jsou v tabulce milióny položek a vy drobně modifikujete jednu hodnotu, bude SQL Server provádět zbytečně mnoho IO operací.

Jedná se přitom o defaultní hodnotu pro primární klíč, pokud jej vytváříte pomocí SQL Server Management Studio.

Datetime typ nevrací varchar, ale DateTime objekt

Pokud máte v databázi datetime položku, v MySQL tato vrací při SELECTu datový typ string (a podobně se chová i SQLite), nicméně v SQL Serveru vám vrátí objekt typu DateTime, s nímž se dále dá pracovat v PHP třeba pomocí ->format() metody, viz dokumentace.

Pro práci s datem existuje v SQL Serveru velice komfortní funkce DATEADD, s prvním parametrem hour, day, month, atd., čímž můžete snadno nahradit funkce DAY(), MONTH() a další z MySQL.

Závěr

V článku jsme si představili základní body migrace aplikací z LAMP prostředí na kombinaci Windows 2008 Server + IIS 7.0 / 7.5 + Zend Server CE (PHP 5.3) + SQL Server 2008 + SQLSRV driver.

Osobně jsem s touto kombinací spokojen, protože mi po řadě let na Linuxu / Apache nabídla naprosto bezproblémový provoz, opravdu snadnou administraci serveru z Windows desktopu i telefonu, a nakonec i výraznou úsporu nákladů. Přesun části logiky z PHP do transakčního zpracování na úrovni databáze (Transact-SQL) zase přinesl stoprocentní integritu dat a vyšší výkon aplikací (ano, jsem přesvědčen, že kritické zpracování dat se má odehrávat co nejblíže místu jejich uložení, tedy v databázi, a vždy transakčně).

Přestože většina lidí hostuje PHP aplikace na Linuxu / Apache, tak se Windows 2008 Server / IIS7 ukazuje jako srovnatelná platforma, výborně použitelná i pro PHP aplikace.

Komentáře

Subscribe
Upozornit na
guest
63 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Přemek "Mr.Gentleman" V.

Musím pochválit tento článek. Je věcný a upozorňuje na všechny možné problémy. Zmiňuje výhody i nevýhody případné migrace. Opravdu povedené.

peter

nepodporuje, nema, nevie neda sa, …
problemy, problemy, problemy, …

dc

PHP 5.3 by som do produkcneho prostredia este asi zatial nedaval.Osobne som s nim mal dost problemov.
Tak isto zend debugger a zend optimizer obcas blbnu.Co sa tyka optimizeru tak mam celkom dobre skusenosti s phpexpress od nusphere.
Trochu ma rozculuje aktualny stav okolo kompilatorov, v ktorom je to ktore PHPcko skompilovane.Je okolo toho docela chaos a bordel.

michal.kocarek

Pokud člověk nepoužívá kompilátory opkódu a debuggery na produkčním prostředí, tak mohu PHP 5.3 jednoznačně doporučit. (Tzn. místa typu intranety, drobné servery, ale na vysokozatížené servery stejně dopředu vše testujeme, že? :))

Podle informací z fór tyto optimalizátory doposud nefungují (k dnešnímu datu, webOptimizer, APC, …)

Co se týče kompilátorů a binárek pod Windows, nemyslím, že by v tom byl nějaký extra bordel. PHP <= 5.2 se kompilovalo pod VC6. PHP >= 5.3 se kompiluje pod Visual Studiem 6 i 9 (osobně mám zkušenosti s 9 pro 32bit, řádný problém). PHPeři k tomu napsali hezký skript, tutorial k vidění na http://wiki.php.net/…pbystepbuild , další info na http://cz2.php.net/…building.php . Knihovny z PECL je nutné zkompilovat ručně, adresa http://pecl4win.php.net/ mmnt. nefunguje.

PS: PHP 5.3 momentálně prý nejde na Windows zkompilovat jako ISAPI modul pod Apache2.2.

michal.kocarek

Jenom bych doplnil, že pokud plánujete pracovat s MSSQLí databází z PHP, stojí Vám za to to úsilí rozchodit Microsoft SQL Driver for PHP.

Pracuji s PHP s MSSQL už řadu let (původní knihovna funkcí mssql_*() z PHP), a chci Vás upozornit na spoustu omezení, které tato původní knihovna má a proč se vyplatí přejít na sqlsrv_*():
– jakkoliv dlouhá textová buňka byla oříznuta na délku 4kb – delší texty je nutné získávat po kouskách
– na UTF-8 bylo možno zapomenout (buď single-byte ve znakové stránce serveru, nebo UTF-16LE (ale pak je nutné ručně přepisovat query)
– problémy s datem – formátuje se dle locales serveru
– LIMIT … OFFSET … nejde (v MSSQL Serveru 2000 to nejde už vůbec, tam se to řeší pomocí subselectů). V nové knihovně alespoň můžete použít scrollable rowsety a vytřískat jenom část výsledku

.mx.

a mssql_fetch uz rozlisuje 0 od NULL pre stlpce typu bit?

architekt_

Díky za velmi zajímavý článek, spoustu lidí ani nenapadne, že se dá PHP na Windows pohodlně rozjet i na jiném serveru než na Apache.

Poznámka k tomu rozjetí IIS a Apache zároveň: Obvykle se to řeší tak, že se jeden ze serverů spustí na jiném portu než 80 a druhý mu dělá proxy. Respektive jako ta proxy se používá ještě další webserver, který je „tenký“ a rychlý, dnes asi nejčastěji nginx.

Co se týče snadné správy serveru, většina lidí, co si myslí že rozumí Windows, pořádně neumí ani spravovat svůj desktop, natož pak na Windows postavený server. Že má něco GUI ještě neznamená, že je to snadné. A i Linuxová (apod.) řešení mají mnoho různých grafických nástrojů pro správu. Například webové nástroje jako Webmin, Plesk, apod., které se dají snadno používat z jakéhokoliv mobilu s internetovým prohlížečem, kdy není třeba mít nadupaný telefon s RDP klientem. Ale znalost správy serveru v konzoli je základ, a to i Windows serverů!

Jen je škoda, že jsou ty Windowsové VPS tak drahé. Oproti Linuxovým, kde se dá pořídit VPS s 4GB RAM a 40GB HDD za 300Kč měsíčně (např. vpsFree.cz), je to podstatný rozdíl. A to se nebavíme o cenách za Microsoftí licence v případě pořízení vlastního serveru či několika serverů. Na to už dojela spousta nadějných projektů vytvořených v Express edicích .NET nástrojů. Náklady na provoz a použité technologie by si vývojáři měli rozmyslet dříve, než se pustí do vývoje. Každý by chtěl mít úspěšný web s miliony návštěvníků denně, ale pro takové weby nebude PHP na IIS vhodná volba. Ostatně ani PHP ne, ale to už je jiný příběh :-)

Borek Bernard

Během prvních třech let mohou být náklady na licence minimální díky programu BizSpark. Pak už by služba měla být schopná si na licence vydělat, pokud za něco stojí.

Vojto

Windows hosting je zbytocne nakladny. S Linuxom je tiez menej prace, ak potrebujeme rozbehat nieco nestandardne (pretoze na Linuxe to uz niekto robil pred nami)

Pre spolahlivy webserver uplne staci virtualizovany Linux + normalna databaza ako Postgres.

Potom jedina vyhoda Windowsu je moznost vsetko si naklikat, ale myslim, ze spravcovia servrov nie su natolko neskuseni aby nezvladli prikazovy riadok.

Co sa tyka pohodlneho file managera, cez SSH sa daju velmi pohodlne spravovat subory.

Murdej

Souhlas. Třeba instalace lamp treba na ubuntu se dá udělat jedním příkazem

sudo aptitude install apache2 php5 php5-mysql mysql-server

potom pár minut nastavení konfigurace, pokud výchozí nevyhovuje a je hotovo.

ra.ri.ta

A kde to zmiňované „V článku si popíšeme výhody a nevýhody Windows hostingu pro PHP“

Daniel Tlach

Snad poprvé čtu od Radka nekonfliktní článek s kterým navíc mohu alespoň místy souhlasit. Pěkně napsané.

Mastodont

Ale on jich psal mnohem víc, než mu vlezl střeček do hlavy.

František Kučera

Nekonfliktní? Asi jsi přehlédl to navážení se do sdílených linuxových hostingů. Ty jsou samozřejmě někdy problematické, ale windowsí hosting je v článku prezentován jako spása a snad i jediné správné řešení. Aniž by zmínil, že sdílených hostingů řeší (také) linuxová VPSka nebo linuxový vlastní server.

Sten

Bohužel je to napsané tak, že to zní, jako kdyby na tom virtuálním serveru musely běžet Windows, nicméně explicitně to tam (ve výpisu bodů, proč ne sdílený LAMP) nikde uvedené není

Zorg95

Kravaťáckými důvody je myšleno „naše firemní infrastruktura běží na windows, takže vámi vyvíjená aplikace musí běžet taky na windows“. Ten dává perfektní smysl a je většinou zbytečné kvůli neochotě se tomu přizpůsobit přijít o zakázku. Kupodivu jediný není uvedený.
Zbytek srovnává výhody virtuálního Windows serveru se sdíleným hostingem a úplně zapomíná, že Linuxový virtuální server je nejméně stejně tak dostupný. A pokud si někdo troufne na administraci Windows serveru pro PHP, tak je určitě dostatečně odvážný troufnout si na třeba Ubuntu LTS server (rozhodně ne Gentoo). Zkousnout příkazovou řádku považuju za mnohem jednodušší, než procházet všemi popsanými problémy.

toka

Zajímavý článek obsahující plno podnětných a zajímavých informací, na druhou stranu – nikdy bych to nedělal (kdyby mne k tomu nedonutily okolnosti obchodního charakteru – klient má svůj Windows Server a na něm má běžet MySQL + PHP aplikace, která již existuje a běhá spolehlivě na Linuxu). Z článků jsem si odnesl sice mnoho zajímavých poznatků, vím nyní, že PHP a spol. na Windows běží (za jakou cenu). Ale i kdybych byl zapřísáhlý „okenář“, tak bych se rychleji a snáze naučil nastavit vše např. v Debianu, než klikat jak o život a řešit takové potíže – protože jak zde již někdo zmínil, kdo má čas, trpělivost a odvahu s tím bojovat ve Windows, tak už se rovnou může jako nezkušený pustit do konfigurace v Linuxu.

rADo

Hostovani na Windows je o pohodli, rychlosti, stabilite, komfortu a lepsich technologiich (Sql Server, Asp.net). Uvedene „problemy“ jsou jen popisem, jak si nastavit behem hodiny vlastni hosting a ten pak proste funguje bez zasahu.

Pokud se clovek bude starat o LAMP hosting, bude tech problemu resit vyrazne vice :) I takova trivialita jako dobre si nastavit firewall je snazsi na W2k8 nez v iptables, vzdalena administrace IIS nema chybu, moznosti MSSQL jsou daleko pred MySQL.

Je to samozrejme subjektivni, ale ja jsem poprve po 6 letech na 100% spokojen a LAMP uz nasazuji jen pokud se jedna o mini projekty.

peter

Hostovani na GNU/Linuxu je o pohodli, rychlosti, stabilite, komfortu a lepsich technologiich (Postgresql, PHP). Uvedene „problemy“ popsane v clanku jsou popisem, jak si nastavit to, co jinde (Linux) nastavovat nemusite.

Pokud se clovek stara o LAMP hosting, neresi zadne problemy :) I takova trivialita jako dobre si nastavit firewall neni totiz nutne v Linuxu delat (bezpecny OS bez zbytecnych sluzeb, ktere je treba FW blokovat). Vzdalena administrace Linuxu nema chybu, moznosti PostgreSQL jsou daleko pred MSSQL.

toka

Radek má z jednoho pohledu pravdu. Windows Server standardně běží v grafickém režimu, tudíž si vše nakliká – pohodlně. Linux Server běží naopak standardně v režimu bez X Serveru, takže se na vše používá výhradně klávesnice a konfigurační soubory. Každému vyhovuje něco jiného. Ono dále asi Radkovi hraje do karet HTC a Windows Mobile, Windows Server, atd. Snadno se to propojuje – proto dobře vypíchl ten subjektivní názor. Vzdálenou plochou se připojí na Windows Server, a pokud potřebuje, cokoliv si upraví. My ostatní si musíme do HTC shánět SSH klienty ;-)

peter

Drahy Tomas, tiez som vyrastol na win, ale napriek tomu nemozem suhlasit s tym, ze jednoduchsie je to co sa da naklikat. Na linuxe si mozem veci naklikat ked chcem a ked nie, staci mi na to commandline. Ked chcem, cez ssh si spustim zo servera kludne aj GUI X aplikaciu. MS este stale nedobehol X, ktore su tu 40 rokov.
Okrem toho instalacia aplikacii z repozitory je dalsia vec na ktoru MS doteraz nema.
Prajem vela stastia v zhanani softu pod win a v jeho rozbehavani. Toto bola kedysi domena Linuxu, ale svet sa obratil naruby. :)

A este dodam odkaz na to akych ma MS vyvojarov.
http://www.root.cz/…zory/317794/

toka

Ale Petře, já jsem nikde nenapsal, že je jednodušší to, co se dá naklikat. Já jsem napsal, že je to pohodlnější – což je někdy pro uživatele rozhodující (teď mluvím obecně, ne konkrétně k článku a jeho autorovi).

Murdej

Jak kdy, než se viste dostaneš ke konfiguraci síťe tak musíš prolézt 10 oken a klikat na tlačítka typu „upřesnit“ , konfigurovat, … horší než prolézat man

František Kučera

„tiez som vyrastol na win, ale napriek tomu nemozem suhlasit s tym, ze jednoduchsie je to co sa da naklikat“
Díky, že jsi to zmínil. Tohle je totiž rozšířený fáma, spousta lidí si totiž myslí, že když ovládají windowsovský desktop, že jsou automaticky windowsovskými adminy a že jim to půjde jaksi „samo“. Ovšem Windows jsou značně nedokonalý a chybový systém a dobrý správce musí znát spoustu triků a mít načteno, aby z toho udělal použitelný server. Jedna věc je, vědět, jak se kliká na tlačítka ve Wordu a úplně jiná, jak se spravuje IIS, MS SQL Server, Sharepoint, BizTalk, Exchange atd. Co produkt, to jiné chyby, jiné triky a nutnost dalších specifických znalostí, vůbec to není o tom, zda člověk kliká na ikony nebo buší příkazy do konsole, je to o znalostech specifického softwaru, a správa windowsovského serveru je tak vysoce odborná činnost, stejně jako u unixových systémů, jen prostě jiná. Je to prostě úplně jiné kafe než „administrace“ rodinného pécéčka, které slouží ke stahování fotek z digitálu a prohlížení webu.

Po letech se tak stírá rozdíl v platech mezi unixovými a windowsovskými adminy, dřív to bylo tak, že za MS technologie bylo potřeba zaplatit hodně peněz na licencích, ale admina dělal prakticky kdokoli, tedy levně, zatímco za linuxové licence nebylo potřeba utrácet, ale bylo potřeba zaplatit drahého unixového admina. Jenže dneska si nechá dobře zaplatit i windowácký admin, ovšem ty licence jsou pořád drahé, zatímco unixový správce chce pořád stejně hodně peněz a ty licence na linux jsou pořád stejně levné nebo zadarmo.

Polaris

„moznosti PostgreSQL jsou daleko pred MSSQL“

Tedy, už dlouho jsem se tak nenasmál. Děkuji :-))))

okbob

Pokud by se to týkalo db jádra a db funkcí, tak je PostgreSQL o kousek před MSSQL, i když v 2008 se Microsoft dotahuje. Pokud by se brala v potaz GUI administrace nebo OLAP, tak tam má navrch Microsoft a o hodně. U MSSQL hodně záleží, z jakého úhlu se hodnotí – pro sys admina je to hodně dobrá databáze, pro byznys analytika docela slušný nástroj s poměrem cena/výkon, a pro programátora je to o něco lepší MySQL – pokud tedy programátor rozumí databázím.

František Kučera

S tím firewallem se mi to nezdá. V Linuxu používám léty ověřený skript, který nastaví pravidla iptables. Občas do něj připíši řádek, když potřebuji povolit novou službu nebo změnit nějaké parametry. Ale vtip je v tom, že můžu používat pořád ten stejný skript jako před pěti lety (nebo více) nebo v jiné distribuci, nemusím řešit, jestli v nové verzi Windows je ten dialog k nastavování někde jinde, nebo jestli naopak ve starší verzi úplně chybí.

lopata

Proti tomu používat PHP na Win stojí zejména fakt, že PHP je komunitní projekt vyvíjený na Linux/Unixu. Core PHP vývojářů, kteří pracují na win je minimálně. A pokud chcete používat PECL extenze, jste téměř nahraní. Kompilovat si extenze na Win je mnohem obtížnější něž na Linuxu.

Jediný opravdový důvod k tomu použít PHP na Win je, pokud vaše PHP aplikace je na win prostředí nějakým způsobem závislá (většinou intranety). Pak by ovšem bylo na místě zvážit, zda to nepřepsat do .NETu.

Spíš by mě zajímalo, proč to MS dělá, možná v tom budou nějaké peníze od Zendu, smlouva, možná kvůli cloudu. Zájem MS je, aby jste to přepsali do .NETu, na rozvoji PHP žádný zájem nemá, naopak. Další věcí je, že nativním aplikacím pomalu a jistě u MS zvoní hrana, budoucnost Windows je .NET, nikoli WinAPI.

Podhy

zájem MS může být taky v tom aby se používal IIS

František Kučera

„Zájem MS je, aby jste to přepsali do .NETu“
Nejdřív potřebují dostat lidi na Windows s jejich současnými PHP aplikacemi – a .NET se jim budou snažit nacpat až v druhé fázi.

Borek Bernard

Zamyslete se nad tím, co jste napsal (to není urážka, to je upřímná výzva k zamyšlení). Vodítka: proč má MS zájem, abyste své PHP aplikace hostoval na Windows? Je to proto, aby vás postupem času přetáhl k ASP.NET? Jaký business model má ASP.NET?

František Kučera

Je to vzájemně provázané – Když budu používat Windows, pravděpodobně vyzkouším i psát v .NETu. Když začnu psát v .NETu, budu muset používat Windows a už prakticky není cesta zpátky (ano, je tu Mono, ale…). Když budu psát v .NETu, pravděpodobně k tomu použiji VS, pak asi vyzkouším MS SQL server, místo ŠRBD (MySQL, PostgreSQL,…), který jsem používal doteď, protože s MS SQL se ve VS (a dalších MS nástrojích) bude jistě pracovat pohodlněji než s jinou databází. … A najednou člověk zjistí, že je v zajetí MS technologií a už těžko může přejít jinam (a to tahle diskuse začala pod článkem, který kritizuje hloupost vývojářů PHP aplikací, kteří nemyslí na multiplatformnost a mají svoje aplikace odladěné přednostně pro Linux/Unix).

Přispívá k tomu ještě fakt, že některé softwary od MS jsou zadarmo (alespoň pro určité použití a s omezeními). Tím nechci vyčítat MS, že dává něco zadarmo :-) Ale je potřeba trochu krotit počáteční nadšení, když zjistíš, co všechno můžeš dostat, aniž bys za to platil. Některé malé projekty se s takovým vybavením dají i rozjet. Ale je potřeba myslet na budoucnost, na další růst. Totéž dělá třeba Oracle, od něj taky můžeš mít tu minimální verzi DBMS zadarmo. Jenže pak narazíš na její limity a najednou musíš platit kopy peněz. Chce to myslet dopředu a nedělat krátkozraká rozhodnutí.

A poslední věc: člověk stráví spoustu času učením se a získáváním praxe s určitou technologií, softwarem. A já radši investuji svůj čas do poznávání technologií, které mohu používat zdarma pro libovolně velké projekty – ne jen pro pár prvních měsíců nějakého „startupu“. Takže (nejen) z těchto důvodů bych ostatním doporučil, když už si pořizují vlastní servery (ať fyzické nebo virtuální) a opouštějí PHP, ať se vydají raději cestou Javy (J2EE) než cestou .NETu.

BTW: jak hodnotíš dostupnost návodů pro začátečníky v J2EE a v .NETu (pro web)? S čím je z tohoto pohledu snazší začít?

Borek Bernard

Jednoznačně .NET.

František Kučera

Tak říkáš, že mám něco o Javě sepsat? :-)

Svoje začátky s J2EE už pamatuji jen matně, je fakt, že dneska čerpám většinou z článků zaměřených na jedno konkrétní úzké téma, kdežto nějaký ucelený zdroj v češtině pro začátečníky chybí. Prostě takové „chci začít dělat weby v Javě, tak mi poraďte jak na to“. I když nějaký seriál tady na Rootu byl. Tak já si to přidám na svůj seznam úkolů a snad jednou… :-)

Honza

Pro weby dnes nemá smysl se zabývat J2EE či .NET Zvláště ne pro člověka, který chce začít. Tyhle nástroje tu jsou pro lidi, kteří v nich programují jiné typy aplikací a teoreticky se snadno přizpůsobí (nebo je k tomu donutí hloupá firemní politika či neochota učit se něco nového). Ale jsou to jen nástroje pro jiné účely „znásilněné“ tak, aby v nich šly dělat i weby. Oproti nástrojům a frameworkům určeným přímo pro web ale hrají jen druhou až třetí ligu. Kdo to s weby myslí vážně, měl by začít s Ruby on Rails, Django, apod.

František Kučera

Tak to jsem vážně netušil :-D

Banky a další velké firmy hrají druhou až třetí ligu? Ty desítky nebo stovky webových J2EE frameworků, které vznikly právě kvůli webu a AJAXu, jsou „znásilněním“ a pro web se nehodí? Java jako jazyk tu sice byl dávno před webem, jak ho známe dnes, ale ty frameworky (včetně těch přímo od Sunu) vznikaly právě kvůli webu.

Dot NET z tohoto (webového) pohledu hodnotit moc nechci – mám zkušenost jen s pár mizernými a padajícími weby (ale i s nepadajícími) a k tvorbě webu v .NETu jsem jen přičuchnul (nijak mne to nezaujalo, Java je lepší).

Ale proti těm progresivním technologiím nic nemám. Jde prostě jen o to, co chceš, někdy se hodí ověřená a odladěná platforma pro kritické aplikace a jindy si chce člověk trochu zaexperimentovat a odvázat se :-)

P.S. co se týče začátečníků a výuky, má Java jednu velkou výhodu – jakž takž programátora vede k tomu, aby dal aplikaci nějakou architekturu, rozdělení na vrstvy, myslel na znovupoužitelnost – což jsou věci, ke kterým se člověk musí v mnoha jiných jazycích pracně nutit (ty ho vedou k opaku). No, zkusím sepsat nějaký ten návod :-) ale zítra to nebude…

Michal Augustýn

Taky jsem byl překvapenej :) Věta Ale jsou to jen nástroje pro jiné účely „znásilněné“ tak, aby v nich šly dělat i weby. mě fakt dostala – nemůžu mluvit za J2EE, ale ASP.NET bylo vydáno ± ve stejné době jako první verze .NET Frameworku (a C# a VB.NET).

No ale je to blbost už z principu – Java i C# jsou univerzální jazyky, tak proč je nepoužít pro weby…

František Kučera

Jednak jsou dost univerzální a jednak v té Javě píšeš aplikační logiku (tedy programování) a na tvorbu stránek (tedy dokumentů, prezentační vrstvy) používáš JSP nebo nějakou jeho nadstavbu – což je velmi vhodný přístup, programuješ v programovacím jazyce a dokumenty (HTML) vytváříš jako dokumenty, šablony (JSPX je XML, které má k (X)HTML velmi blízko).

Martin Malý

Nechcete ten návod nabídnout na redakce@zdrojak.cz? Rád jej tu vydám…

František Kučera

OK, snad se k tomu v dohledné době dostanu :-)

architekt_

Nic proti Javě, ale na argumenty o použití v bankách apod. si dejte pozor – o ničem to nevypovídá a nikdo vás nebude brát vážně. Stejnými argumenty lze prosazovat masivní nasazení třeba COBOLu, který je v tom sektoru stále rozšířenější než Java :-)

Laco

Ty vole… vobec som tomu nerozumel, ale bolo to zaujimave :)

.

Přijde mi, že sice to jde, ale je to dost pitomé řešení. Asi jako snaha běhat na Linuxu .NET aplikace přes Mono. Jakž-takž to funguje, ale primárně to bylo vyvíjeno na jinou platformu a je to znát. Neodladěné, s malou uživatelskou základnou, těžko řešitelné případné problémy, neustálý boj s tím, že vývojáři předpokládají specifika původní cílové platformy apod.

Článek mě jedině utvrdil v tom, že to tak doopravdy je. U autora byla navíc vidět obrovská snaha prosazovat Wokna nad Linuxem, která – ať už jím samým či následnou korekcí ze strany zadavatele – vyzněla v trapné srovnávaní jablek s hruškami. Konkrétně například:

K přechodu na Windows hosting vás může přimět
výrazná nespokojenost (podpořená zkušeností) s low-cost LAMP hostingy s „neomezeným“ počtem domén, které se sice tváří jako ve všem nelimitované, ale v důsledku vás stojí spoustu nervů a zbytečného úsilí

Opravdu netuším, jak může autor srovnávat VPS s Windows a low-cost LAMP hostingy. Férové srovnání by bylo VPS s Windows a VPS s Linuxem (pak by ale musel uvést, že Windows VPS bývají oproti Linuxovým VPS dražší a to i třeba o desítky procent). A samozřejmě srovnání low-cost Windows hostingů s low-cost LAPMy.

Michal Augustýn

Cože? Že aplikace přes Mono jakž-takž fungujou? To jste asi zaspal dobu – Mono je v ledasčem dokonce před Microsoftí implementací .NETu a používá se např. i v bankovním sektoru.

.

V bankovním sektoru se používají i Windows 3.11 a znamená to snad něco?

Ano, aplikace pro Mono fungují jakž takž, minimálně protože občas obsahují platform-specific záležitosti nebo věci v Monu dosud neimplementované. V době, kdy Microsoft má za sebou dávno release .NET 3.5 a venku je beta .NET 4.0, Mono se nachází někde kousek za .NET 2.0.

Takže mám dojem, že dobu zaspal někdo jiný (vývojáři Mona) a někdo další (Vy) se snaží tvářit, že se vlastně vůbec nic neděje.

František Kučera

„A samozřejmě srovnání low-cost Windows hostingů s low-cost LAPMy.“
Ovšem taky VPS, protože Windowsová varianta sdílených hostingů prakticky neexistuje. To je velká nevýhoda tohoto OS, zatímco v Linuxu/Unixu můžou v pohodě běžet aplikace různých uživatelů (např. ty weby) vedle sebe, ve Windows je to problematické. V Linuxu je možné provozovat „lehkou“ virtualizaci, která má minimální režii, každý má svoje aplikace, v libovolných verzích, klidně i různé distribuce, ale jádro běží jen jedno (např. OpenVZ v Linuxu nebo Zóny v Solarisu). Toto ve Windows nelze a člověk je odkázaný na plnou virtualizaci, kdy na jednom fyzickém stroji běží několik virtuálních počítačů – sice to má některé výhody, ale ty jsou často podružné a hodila by se lehčí virtualizace, díky které lze na stejném HW provozovat mnohem více VPSek.

Borek Bernard

Pokud chce někdo provozovat Apache i IIS na jednom serveru a nechce uživatele nutit specifikovat odlišný port (např. 80 pro IIS a 8080 pro Apache), může využít modul Application Request Routing (http://www.iis.net/…questRouting), který umožní IIS nastavit jako reverzní proxy pro Apache. (Nebo to jde udělat opačně – Apache může být reverzní proxy pro IIS s pomocí mod_proxy.)

Hodí se pro zprovoznění aplikací, které se bez Apache obejdou jen těžko, např. Trac.

Stoural

Proc se Trac jen tezko oejde bez Apache? A jak je mozne, ze ho provozuji pod Lighttpd? Videl jste nekdy originalni dokumentaci? Pokud nevite, jak odpovedet na libovolnou z uvedene trojice otazek ci na ni odpovite zaporne, doporucuji Vam

http://trac.edgewall.org/…/TracInstall#…

Borek Bernard

Nemyslel jsem to tak, že by Trac jinde než na Apachi neběžel (to samozřejmě není pravda a taky jsem to nikde nenapsal), jen drtivá většina návodů běh na Apachi předpokládá. Pro člověka bez hlubších znalostí Tracu, což byl přesně můj případ, bylo prostě jednodušší využít IIS jako reverzní proxy. Tip byl pro lidi, co jsou na tom podobně.

nx99

Je to pořád dokola. A pořád dokola stejná Microsoft propaganda. Nedám si na server produkt, u kterého není schopen autor ani záplatovat všechny objevené chyby:

http://secunia.com/…ories/graph/?…
http://secunia.com/…ories/graph/?…

Tu příšernou díru v SMB/SMB2 mají 100 let a je tam pořád, i když tvrdí, že to záplatovali:

http://www.abclinuxu.cz/…-na-cervenou

Takže hezký, profesionálně odvedený článek, který je ovšem spíše propagandou. Widle na serveru má jen ignorant.

Baghira

Axiom (z řec. axióma, to co se uznává) je tvrzení, které se předem pokládá za platné a tudíž nedokazuje. ;)

Rook

Jakým programem se z Windows mobile telefonů dá přihlásit na vzdálenou plochu? Pokud vím ve standardní instalaci na to program není, před časem jsem hledal nějaký oficiálně vyvíjený microsoftem ale našel jsem jen nějakou dev verzi.

Jura55

ja mam ve svych windows mobile na HTC Touch HD normalne remote desktop aplikaci primo od M$. Funguje paradne, zejmena na 3G pripojeni (full grafika), na GPRS se musim smirit s nizsi kvalitou, ale porad to jaksi jde… Samozrejme Touch Pro 2 s klavesnici je s pouzitelnosti jeste o kus dal…

AW

Opět další článek plný polopravd a zkreslených faktů… Co jiného také čekat od pana Hulána, že? :-(
První lež, jako věž, hned na začátku článku:
>snadná správa serveru i aplikací z Windows desktopu i mobilního telefonu
Ano, už vidím, jak spravuji (rozuměj klikám a složitě posunuji kurzor joystickem) Windows server ze své Nokie 3310, s monochromatickým 48×48 displayem, přes gprs…
Pro SSH protokol to není problém, s RDP je to noční můra i na relativně novém mobilu bez OS (vzhledem k nedostupnosti jakékoliv použitelné java aplikace pro připojení k RDP)…

František Kučera

Ad „Výhody Windows 2008 Server hostingu“:
bohužel se tu směšují výhody/nevýhody související s přechodem od sdíleného hostingu na vlastní (virtuální) server a výhody/nevýhody přechodu z jedné platformy na jinou.

„potřeba využívat i jiné databáze než MySQL, například Microsoft SQL Server 2008, které mají lepší možnosti programování,“
Slova „i jiné“ by bylo vhodné vynechal. Stěhuje-li se člověk od MySQL za něčím „lepším“, např. Oraclem, DB/2, PostgreSQL… může zůstat na Linuxu, Solarisu nebo jiném unixovém OS. Důvod ke stěhování na Windows je tedy jen ten MS SQL Server → takže žádné „i jiné“.

„potřeba provozovat současně PHP i ASP.NET aplikace na jednom serveru“
Jsou tu sice i alternativy, jak provozovat .NET v Linuxu, ale netroufám si tvrdit, že jsou 100% plnohodnotné. Takže tenhle argument beru: kdo potřebuje ASP.NET, tomu není pomoci a holt ty Windows asi bude muset mít.

„pokud chcete hostovat větší množství domén, a vyplatí se vám tedy fyzický či virtualizovaný vlastní server, ale je pro vás (jako pro většinu lidí s Windows) snazší administrovat si Windows 2008 Server než třeba Gentoo Linux,“
Nevím, proč je zde Linux zastoupen právě Gentoo. Proč ne třeba Debian/Ubuntu, které se spravují (alespoň pro začátečníka) snadněji. Existují webové administrační nástroje, jak pro apache, tak mysql, takže ta příkazová řádka nebude nutná.

„výrazná nespokojenost (podpořená zkušeností) s low-cost LAMP hostingy s „neomezeným“ počtem domén, které se sice tváří jako ve všem nelimitované, ale v důsledku vás stojí spoustu nervů a zbytečného úsilí,“
To ano, mizerný hosting je k zlosti, zvlášť když na tom závisí váš byznys. Ale to je zase otázka sdílený vs. vlastní, případně kvalitní vs. mizerný, nikoli Linux vs. Windows.

„potřeba ovlivnit nastavení serveru, které sdílená LAMP platforma nenabídne,“
Opět ta samá písnička. „Sdílená LAMP“ platforma. Ona sdílená být nemusí, může být vyhrazená. Opět to tedy není problém Linux vs. Windows.

„snadná správa serveru i aplikací z Windows desktopu i mobilního telefonu,“
Pod snadností si každý představí něco jiného, takže je to dost subjektivní. Nicméně já bych dal přednost raději webovému administračnímu rozhraní (u LAMP) nebo SSHčku, se kterým se dá pracovat i v tom telefonu, než na malém displeji mobilu hledat nějaké ikonky na vzdálené RDP ploše. Ovšem je to věc vkusu. (Např. takový YAST (klikací GUI pro správu SUSE Linuxu) se dá spustit taky na dálku přes SSH).

„používání aplikací, které znáte z desktopu (správce souborů, editor, atd.) i pro práci na serveru,“
já jsem např. z desktopu zvyklý na jEdit a ten si taky můžu pustit na dálku přes SSH. Ovšem spíš bych si připojil serverový souborový systém pomocí SSHFS a editor si spustil lokálně. Nicméně tento postup příliš nedoporučuji, může totiž vést k nevhodným návykům. Místo seriózního stylu vývoje (vývoj a verzování → nasazení na testovací stroj → nasazení na produkční stroj) se pak někteří uživatelé uchylují k úpravám a programování přímo na produkčním serveru a doslova „bastlení“

„stabilní systém a „nezbořené“ MySQL tabulky, jak je známe snad ze všech sdílených LAMP webhostingů.“
A znovu: chyba hloupých adminů, chyba sdíleného hostingu (oproti vlastnímu serveru), případně chyba MySQL. Nejedná se o výhodu Windows hostingu. Na Linuxu lze se provozují i jiné databáze (PostgreSQL, Oracle…), existují schopní admini, existují nesdílené hostingy.

„než platit třeba 20×150 Kč na běžném českém „LAMP webhostingu“, účtujícím každou doménu zvlášť.“
To by bylo jistě hloupé. Nicméně stále to není důvod k přechodu na Windows – Linuxovou VPSku nebo vlastní linuxový server si snad nemůžu pořídit?

Vyplývá mi z toho, že windowsovský hosting buď výhody nemá, nebo je autor nezná, a tak si musel vymyslet tyto.

Ad „Nevýhody Windows 2008 Server hostingu“
Zde se dozvídáme, že některé PHP aplikace jsou zprasené. Ano, jsou, to mohu potvrdit, ale že by to byla nevýhoda Windows hostingu jako takového?
Skutečné nevýhody budou někde jinde…

Navíc je potřeba doplnit, že když už přecházíme z webhostingu na VPS či vlastní server (což autor směšuje s přechodem na Windows), máme daleko širší paletu, nemusíme se držet jen PHP a MySQL, můžeme si život zpříjemnit např. tím, že budeme psát v Javě a jako DB používat PostgreSQL (tato DB je i na mnoha hostinzích).

„Neexistuje LIMIT start,offset … (podobně to nenabízí ani Oracle či Sybase)“
Bohužel ano. Ovšem: co definuje SQL standard? Chvilka napětí … ano, je to právě zápis „LIMIT start, offset“.

„Pokud v kódu potřebujete vědět předem počet řádků, doporučuji jej přepsat“
Ano, takový kód by se skutečně přepsat měl – v ideálním případě aplikace funguje jako roura, čte záznamy z DB a vychází z ní výstup.
Přístup, kdy nejdřív natáhneme všechny záznamy z DB, pak něco uděláme a pak všechno najednou vyplivneme na výstup, není ideální,
i když to jinak nejde, neměli bychom ho používat, pokud to není nutné.

„$db = sqlsrv_connect“
Zajímalo by mne, proč autor používá tuto funkci pro přístup k MS SQL, když tu máme PDO, které tento DBMS také podporuje.
Když už si tedy hrajeme na nějakou přenositelnost mezi OS a mezi DBMS, měli bychom používat PDO nebo nějakou jinou vrstvu, která nás od konkrétní implementace databáze odstíní – jinak budeme ten kód přepisovat jako blbci pořád dokola.

„Přesun části logiky z PHP do transakčního zpracování na úrovni databáze (Transact-SQL) zase přinesl stoprocentní integritu dat a vyšší výkon aplikací (ano, jsem přesvědčen, že kritické zpracování dat se má odehrávat co nejblíže místu jejich uložení, tedy v databázi, a vždy transakčně).“
S tím se dá souhlasit. Bohužel to ale opět není nic specifického pro Windows a MS SQL. Přenést část logiky do databáze (tedy blíže datům) je možné v Oraclu, PostgreSQL, DB/2 … a dokonce i v té MySQL.

Článku by prospělo méně PR a (pseudo)argumentů pro „jedinou správnou platformu“ a více praktických tipů, jak se s touhle exotickou platformou má člověk vyrovnat, když už ji musí používat.
(Ano, exotickou, protože pokud se bavíme o PHP webech, jsou Windows skutečně exotem).

P.S. Vím sice, že polemika s autorem nikam nepovede, ale stejně mi to nedalo :-)

lépe řečeno: LIMIT m OFFSET n

AsciiWolf

+1
ps. Netuším, proč má tvůj komentář negativní hodnocení. Asi zapracovali trollové z Hulan-blogu… :-)

happymaster23

Zdravím,

hned na úvod musím napsat, že s maximální spokojeností používám Windows (Windows XP i Windows 7) a na vydání Windows 7 se těším už půl roku. Klidně si dovedu představit (ale pouze představit, absolutně nic mě k tomu netlačí), že bych Windows mohl začít používat na serverech, ale tyhle argumenty „pro přechod“ mi připadají strašně nesmyslné a hloupé.

Vezměme to postupně:
potřeba využívat i jiné databáze než MySQL, například Microsoft SQL Server 2008, které mají lepší možnosti programování,
Toto je snad jediný oprávněný argument.

potřeba provozovat současně PHP i ASP.NET aplikace na jednom serveru,
Hloupý argument, existuje Mono.

pokud chcete hostovat větší množství domén, a vyplatí se vám tedy fyzický či virtualizovaný vlastní server, ale je pro vás (jako pro většinu lidí programujících na Windows) snazší administrovat si Windows 2008 Server než třeba Gentoo Linux,
No to se každopádně hodí, ale stejně jako může být virtualizovaný Windows, tak i Linux. Snadnost je otázkou zvyku, uvádění Gentoo jako zástupce Linuxu je silně zavádějící, ale chápu, porovnání třeba s takovým RHELem by už nemělo ten šmrnc ;). Nicméně dobře, se skřípění zubů a správnou interpretací se tenhle argument „dá vzít“.

výrazná nespokojenost (podpořená zkušeností) s low-cost LAMP hostingy s „neomezeným“ počtem domén, které se sice tváří jako ve všem nelimitované, ale v důsledku vás stojí spoustu nervů a zbytečného úsilí,
Nehorázný nesmysl, tohle s platformou hostingu nesouvisí. Mizerný může být jak na Windows tak na Linuxu. Stejně jako můžu přejít od neskutečně nekvalitního hostingu na Linuxu pod virtualizovaný Linux, to můžu udělat na Windows…

potřeba ovlivnit nastavení serveru, které sdílená LAMP platforma nenabídne,
V podstatě už třetí reinkarnace toho stejného nesmyslu. Ano, sdílená LAMP platforma nenabídne to co virtualizovný operační systém (a je úplně jendo, jestli je to Windows nebo Linux). A stejně tak to nenabídne ani sdílená Windows platforma.

snadná správa serveru i aplikací z Windows desktopu i mobilního telefonu,
Beru spíš jako vtip :). SSH klienti existují pro každou platformu (i mobilní). Pro Windows třeba hodně dobrá kombinace PuTTY a WinSCP. Připadá mi mnohem lepší tu mít více oken „přímo napojených“ na server, než jedno a v něm teprve klikat na okna další. Použití X taky není problém, nicméně nehodlám reportovat, protože sám nepoužívám a IMHO je to krajně zbytečné.

používání aplikací, které znáte z desktopu (správce souborů, editor, atd.), i pro práci na serveru,
Je to článek pro „programátory“ a nebo pro nebožáka, co pět let chodil na školení, aby dokázal zapnout „modré éčko“ a zkopírovat soubor na disketu?

Třeba co se týče toho editoru – představte si, používám pořád ten stejný, můj oblíbený, editor a je úplně jedno, jestli s ním edituji soubor co mám uložený v počítači a nebo vzdáleně přes WinSCP. A je to ještě více user friendly, protože mi ten editor běží přímo v mém prostředí a ne v dalším okně na RD.

Pokud by to s námi bylo fakt moc špatné, můžeme rozjet VPN a na ní Sambu a bude to tak user friendly, až nás z toho bude bolet hlava.

stabilní systém a „nezbořené“ MySQL tabulky, jak je známe snad ze všech sdílených LAMP webhostingů.
Ano, právě jste „udeřil hřebíček na hlavičku“ své úsměvné argumentace. Ono totiž dneska jsou stabilita a operační systém dva od sebe naprosto oddělené pojmy a vůbec spolu nesouvisí.

František Kučera

njn, už jsem to tu psal, ta „argumentace“ v principu stojí na rozdílu mezi sdíleným a VPS hostingem (nikoli na rozdílu mezi OS) a jak zaseknutá deska se točí pořád dokola. Ale snad je tahle mystifikace natolik průhledná, že na jí nikdo neuvěří a jediným důsledkem bude vyvolání flamu. Autor jednoduše pokračuje v tradici svých provokativních blogů, víc to asi nemá cenu komentovat.

critter

Vcelku užitečný článek, nicméně v něm postrádám jakoukoliv zmínku o oddělení jednotlivých hostovaných webů mezi sebou. Jak zajistit, aby „web A“ nemohl koukat do „webu B“ (mám na mysli z pohledu filesystému), pokud oba běží na jednom serveru?

Více o této problematice zde.

Miki

No to je snad na obou platformách otázka systémových práv…

tewy

…aneb povinny restart kazdy den ve 3 rano.
http://social.msdn.microsoft.com/…3c708118383c

rADo

Ten memory leak problém existoval v SQLSRV driveru 1.0, v 1.1 je vyřešen.

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.