Archive for February, 2009

Nyní mám možnost pracovat na projektu, kde se na virtuálním aplikačním serveru používá Windows 2008 Enterprise, s tím nové IIS7. Vše běží na opravdu výkoném hardware. Rozhodl jsem se zvolit instalovat PHP jako ISAPI a ne jako FASTCGI. Již z minulých několika let se verze ISAPI modulu osvědčila ve stabilitě a rychlosti. A právě o těchto dvou jsem četl pozitivně i ve spojení s IIS7.

Stručný návod:

  1. Stažení PHP 5.2.8 z php.net jako ZIP balíčku. Verze 32 bit. 64 bit verze není podle informací stabilní. Rozbalit do d:\php5
  2. Nainstalovat IIS7 a podporu pro ISAPI v IIS7. Poté restartovat server. Bohužel až po restartu celého serveru(nestačí jen IIS7) se objeví možnost nastavit “ISAPI and CGI Restrictions”
  3. V IIS7 otevřít “Handler Mappings”, zvolit “Add Script Map”. Koncovka *.php, handler mapping: d:\php5\php5isapi.dll. Nakonec povolit ISAPI extension and execution of scripts.
  4. V IIS7 by mělo být vidět “ISAPI and CGI Restrictions”, na něj vlastnosti “Edit Feature Settings” a poté “Allow unspecified ISAPI modules”
  5. V Default Application Pool vybrat “Advanced Settings”. V něm povolit “Enable 32-bit Applications”. Popř. lépe vytvořit svou pool na 32 bit podporu pro PHP a defaultní nechat pro případný běh jiných modulů na 64 bit.
  6. PHP.ini se nahraje do c:\windows. Ještě předtím se ale v jiné složce musí správně nakonfigurovat, protože Windows 2008 neumožňují editaci přímo v systémové složce.
Share

Pokud potřebuji spojit několik řádků se sloupcem řetězcového typu, tak mohu k tomu použít uživatelsky definovanou funkci. V této funkci bude parametr, kterým budu určovat které řádky se mají sloučit. Funkce bude obsahovat naplnění dočasné proměnné, která prostřednictvím selectu a omezením where spojí hodnoty několika řádků do sebe.

Příklad:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
--vytvoření tabulky:
create table mytable(
	col1 int not null identity primary key,
	col2 int not null,
	col3 varchar(20) not null
)
 
--uživatelská funkce:
CREATE FUNCTION dbo.myFunc (@col2 as int)
RETURNS varchar(max)
AS
BEGIN
	DECLARE @RetVal varchar(max)
	SELECT @RetVal = ''
	SELECT @RetVal=@RetVal + col3 + ' - ' 
	  FROM mytable
	  WHERE col2=@col2
	select @RetVal = left(@RetVal, len(@RetVal)-2)
	RETURN (@RetVal)
END
 
--naplnění tabulky daty:
insert into mytable values(1,'a')
insert into mytable values(1,'b')
insert into mytable values(1,'c')
insert into mytable values(1,'d')
insert into mytable values(2,'aa')
insert into mytable values(2,'bb')
insert into mytable values(2,'cc')
insert into mytable values(2,'dd')
 
--výpis naplněných hodnot
select * from mytable

screenhunter_01-feb-27-1742

1
2
--použití s UDF na spojení stejných řádků dle sloupce col2
select distinct col2, dbo.myFunc(col2) as vysledek from mytable

screenhunter_02-feb-27-1742

Share