Upload souborů v PHP na IIS7
Leden 27th, 2009
Pokud používáte PHP na IIS7 (ať už na vývoj pod Windows Vista nebo na server pod Windows Server 2008) možná jste se setkali s problémem se kterým jsem se do nedávna potýkal i já. Při uploadu souboru pomocí HTTP formuláře jste měli problém při jeho používání. Pokud použijete například move_uploaded_file, výsledný soubor bude sice čitelný pomocí PHP, ale běžný uživatel ba ani webserver na něj nebude mít práva. Pokud se na dočasný soubor dotážete pomocí funkce is_readable, vrátí vždy false.
Včem je problém?
V PHP, jako obvykle :o) PHP totiž standardně použije pro upload adresář c:\windows\temp, který má ale v nových Windows podstatně zesílené nastavení zabezpečení a díky špatně napsaným funkcím v PHP se tato bezpečnostní nastavení přenášejí dál.
Co s tím?
Řešení je více než jednoduché, osobně za nejlepší považuji vytvoření nového adresáře s přístupovými právy pro NETWORK SERVICE (např. c:\temp\uploads) a jeho nastavení v php.ini a restartování IIS.
Na problémy php aplikací pod windows si pomalu ale jistě začínám zvykat, ale doufám že s tím jak se bude IIS7 a FastCGI PHP rozšiřovat, bude i větší tlak na vývojáře PHP a ti budou nuceni začít pracovat s filesystémem Windows korektně, tam je totiž největší slabina PHP na Windows.
Home