P H P - A d v a n c e d T u t o r i a l

bemutefrogtownΑσφάλεια

18 Νοε 2013 (πριν από 3 χρόνια και 6 μήνες)

137 εμφανίσεις

P H P - A d v a n c e d T u t o r i a l
G u l e v
D e c e m b e r 6, 2 0 0 2. V e r a c r u z, M e x i c o
R a s m u s L e r d o r f < r a s m u s @ p h p.n e t >
h t t p://l e r d o r f.c o m/v e r a c r u z.p d f

S l i d e 1/6 4 D e c e m b e r 6, 2 0 0 2
A g e n d a
o
P H P - M y S Q L


o
C o o k i e H a n d l i n g


o
D y n a m i c I m a g e s


o
P D F


o
F l a s h


o
S e s s i o n s


o
S e c u r i t y


o
T i p s & T r i c k s


o
O p t i m i z a t i o n


o
L a t e s t D e v e l o p m e n t s


o
F u t u r e


- 2 -
S l i d e 2/6 4 D e c e m b e r 6, 2 0 0 2
S e t u p
C h e c k y o u r P H P S e t u p f o r M y S Q L s u p p o r t
<? p h p i n f o ( ) ?>
I f n o t e n a b l e d
V e r y r a r e s i n c e a M y S Q L c l i e n t l i b r a r y i s d i s t r i b u t e d w i t h P H P a n d b u i l t i n t o P H P b y d e f a u l t.
H o w e v e r, i t i s p o s s i b l e t o b u i l d P H P w i t h o u t M y S Q L s u p p o r t. S o m e p o s s i b l e f i x e s:


a p t - g e t i n s t a l l p h p - m y s q l
r p m - U v h p h p - m y s q l - 4.2.2 - 1.i 3 8 6.r p m



./c o n f i g u r e - - w i t h - m y s q l = s h a r e d,/u s r
c p m o d u l e s/m y s q l.s o /u s r/l o c a l/l i b/p h p
e x t e n s i o n _ d i r =/u s r/l o c a l/l i b/p h p
e x t e n s i o n = m y s q l.s o
- 3 -
S l i d e 3/6 4 D e c e m b e r 6, 2 0 0 2
S a n i t y C h e c k
M a k e s u r e M y S Q L i s r u n n i n g
p r o m p t:~ > m y s q l s h o w
+ - - - - - - - - - - - +
| D a t a b a s e s |
+ - - - - - - - - - - - +
| m y s q l |
| t e s t |
+ - - - - - - - - - - - +
O r w i t h t h e l a t e s t P H P
<? e c h o m y s q l _ s t a t ( ) ?>
O u t p u t:
U p t i m e: 6 7 1 7 T h r e a d s: 1 Q u e s t i o n s: 1 S l o w q u e r i e s: 0 O p e n s: 6 F l u s h t a b l e s: 1
O p e n t a b l e s: 0 Q u e r i e s p e r s e c o n d a v g: 0.0 0 0
- 4 -
S l i d e 4/6 4 D e c e m b e r 6, 2 0 0 2
C o n n e c t i n g t o M y S Q L
T h e s i m p l e c o n n e c t i o n
<?
$ c o n n = m y s q l _ c o n n e c t ('l o c a l h o s t');
e c h o $ c o n n;
?>
O u t p u t:
R e s o u r c e i d #2 8
O t h e r v a r i a t i o n s
<?
m y s q l _ c o n n e c t ('d b.d o m a i n.c o m:3 3 3 0 6','r a s m u s','f o o b a r');
m y s q l _ c o n n e c t ('l o c a l h o s t:/t m p/m y s q l.s o c k');
m y s q l _ c o n n e c t ('l o c a l h o s t','r a s m u s','f o o b a r',
t r u e,M Y S Q L _ C L I E N T _ S S L | M Y S Q L _ C L I E N T _ C O M P R E S S );
?>
- 5 -
S l i d e 5/6 4 D e c e m b e r 6, 2 0 0 2
P e r s i s t e n t C o n n e c t i o n s
T h e s i m p l e c o n n e c t i o n
<?
$ c o n n = m y s q l _ p c o n n e c t ('l o c a l h o s t');
e c h o $ c o n n;
?>
O u t p u t:
R e s o u r c e i d #3 1
C a v e a t s
o
W a t c h o u t f o r m u l t i - c r e d e n t i a l c o n n e c t i o n s


o
M a k e s u r e y o u m a t c h u p m a x _ c o n n e c t i o n s a n d M a x C l i e n t s


- 6 -
S l i d e 6/6 4 D e c e m b e r 6, 2 0 0 2
C r e a t i n g a D a t a b a s e
C r e a t e a D B
<?
m y s q l _ c o n n e c t ('l o c a l h o s t');
i f ( m y s q l _ q u e r y ("C R E A T E D A T A B A S E f o o") ) {
e c h o "D a t a b a s e f o o c r e a t e d";
} e l s e {
e c h o m y s q l _ e r r o r ( );
}
?>
O u t p u t:
D a t a b a s e f o o c r e a t e d
C r e a t e a T a b l e
<?
m y s q l _ s e l e c t _ d b ('f o o');
$ r e s u l t = m y s q l _ q u e r y ("C R E A T E T A B L E u s e r s (
i d v a r c h a r ( 1 6 ) b i n a r y N O T N U L L d e f a u l t '',
P a s s w o r d v a r c h a r ( 1 6 ) N O T N U L L d e f a u l t '',
N a m e v a r c h a r ( 6 4 ) d e f a u l t N U L L,
e m a i l v a r c h a r ( 6 4 ) d e f a u l t N U L L,
t s t i m e s t a m p ( 1 4 ) N O T N U L L,
P R I M A R Y K E Y ( i d )
)");
i f ( $ r e s u l t ) {
e c h o "T a b l e c r e a t e d";
} e l s e {
e c h o m y s q l _ e r r o r ( );
}
?>
O u t p u t:
T a b l e c r e a t e d
- 7 -
S l i d e 7/6 4 D e c e m b e r 6, 2 0 0 2
I n s e r t i n g D a t a
I N S E R T Q u e r y
<?p h p
f u n c t i o n a d d _ u s e r ( $ i d, $ p a s s, $ n a m e, $ e m a i l ) {
$ r e s u l t = m y s q l _ q u e r y ("i n s e r t i n t o u s e r s v a l u e s
('$ i d',E N C R Y P T ('$ p a s s'),'$ n a m e','$ e m a i l',N U L L )");
i f ( $ r e s u l t ) {
e c h o "R o w i n s e r t e d < b r />";
} e l s e {
e c h o m y s q l _ e r r o r ( )."< b r />";
}
}
m y s q l _ c o n n e c t ('l o c a l h o s t');
m y s q l _ s e l e c t _ d b ('f o o');
a d d _ u s e r ('r a s m u s','f o o b a r','R a s m u s L e r d o r f','r a s m u s @ p h p.n e t');
a d d _ u s e r ('c a r l','c a r l s p a s s','C a r l A l e x a n d e R L e r d o r f','c a r l @ l e r d o r f.c o m');
?>
O u t p u t:
R o w i n s e r t e d R o w i n s e r t e d
- 8 -
S l i d e 8/6 4 D e c e m b e r 6, 2 0 0 2
S e l e c t i n g D a t a
S E L E C T Q u e r y
<?
m y s q l _ c o n n e c t ('l o c a l h o s t');
m y s q l _ s e l e c t _ d b ('f o o');
$ r e s u l t = m y s q l _ q u e r y ("s e l e c t * f r o m u s e r s");
i f (!$ r e s u l t ) e c h o m y s q l _ e r r o r ( );
e l s e {
w h i l e ( $ r o w = m y s q l _ f e t c h _ r o w ( $ r e s u l t ) ) {
e c h o "$ r o w [ 0 ] - $ r o w [ 1 ] - $ r o w [ 2 ] - $ r o w [ 3 ] - $ r o w [ 4 ] < b r />\n";
}
}
?>
O u t p u t:
r a s m u s - a V O t b U F 2 L O D n w - R a s m u s L e r d o r f - r a s m u s @ p h p.n e t - 2 0 0 2 1 2 0 6 1 4 2 6 4 6
c a r l - a V O n a D J h 4 8 k 7 o - C a r l A l e x a n d e R L e r d o r f - c a r l @ l e r d o r f.c o m - 2 0 0 2 1 2 0 6 1 4 2 6 4 6
m y s q l _ f e t c h _ a r r a y ( )
<?
$ r e s u l t = m y s q l _ q u e r y ("s e l e c t * f r o m u s e r s o r d e r b y i d");
i f (!$ r e s u l t ) e c h o m y s q l _ e r r o r ( );
e l s e {
w h i l e ( $ r o w = m y s q l _ f e t c h _ a r r a y ( $ r e s u l t,M Y S Q L _ A S S O C ) ) {
e c h o "$ r o w [ i d ] - $ r o w [ P a s s w o r d ] - $ r o w [ N a m e ] -
$ r o w [ e m a i l ] - $ r o w [ t s ] < b r />\n";
}
}
?>
O u t p u t:
c a r l - a V O n a D J h 4 8 k 7 o - C a r l A l e x a n d e R L e r d o r f -
c a r l @ l e r d o r f.c o m - 2 0 0 2 1 2 0 6 1 4 2 6 4 6
r a s m u s - a V O t b U F 2 L O D n w - R a s m u s L e r d o r f -
r a s m u s @ p h p.n e t - 2 0 0 2 1 2 0 6 1 4 2 6 4 6
- 9 -
S l i d e 9/6 4 D e c e m b e r 6, 2 0 0 2
D e a l i n g w i t h t i m e s t a m p s
U s i n g D A T E _ F O R M A T
<?
m y s q l _ c o n n e c t ('l o c a l h o s t');
m y s q l _ s e l e c t _ d b ('f o o');
$ r e s u l t = m y s q l _ q u e r y (
"s e l e c t i d, e m a i l,
d a t e _ f o r m a t ( t s,'% W % M % D, % Y % r') a s d
f r o m u s e r s o r d e r b y t s");
i f ( $ r e s u l t ) {
w h i l e ( $ r o w = m y s q l _ f e t c h _ a s s o c ( $ r e s u l t ) ) {
e c h o "$ r o w [ i d ] - $ r o w [ e m a i l ] - $ r o w [ d ] < b r />\n";
}
} e l s e {
e c h o m y s q l _ e r r o r ( );
}
?>
O u t p u t:
r a s m u s - r a s m u s @ p h p.n e t - F r i d a y D e c e m b e r 6 t h, 2 0 0 2 0 2:2 6:4 6 P M
c a r l - c a r l @ l e r d o r f.c o m - F r i d a y D e c e m b e r 6 t h, 2 0 0 2 0 2:2 6:4 6 P M
- 1 0 -
S l i d e 1 0/6 4 D e c e m b e r 6, 2 0 0 2
C h a n g i n g E x i s t i n g R o w s
U s i n g U P D A T E
<?
m y s q l _ c o n n e c t ('l o c a l h o s t');
m y s q l _ s e l e c t _ d b ('f o o');
$ r e s u l t = m y s q l _ q u e r y (
"u p d a t e u s e r s s e t e m a i l = 'b a b y c a r l @ l e r d o r f.c o m'
w h e r e i d = 'c a r l'");
i f ( $ r e s u l t ) {
e c h o m y s q l _ a f f e c t e d _ r o w s ( );
} e l s e {
e c h o m y s q l _ e r r o r ( );
}
?>
O u t p u t:
1
R E P L A C E I N T O
Y o u c a n a l s o u s e R E P L A C E I N T O t o u p d a t e a r o w i f i t e x i s t s a n d i n s e r t i t i f i t d o e s n't.


- 1 1 -
S l i d e 1 1/6 4 D e c e m b e r 6, 2 0 0 2
M a g i c Q u o t e s
E s c a p i n g t r o u b l e s o m e c h a r a c t e r s
W h e n y o u a r e i n s e r t i n g d a t a i n t o a M y S Q L d a t a b a s e, c e r t a i n c h a r a c t e r s h a v e a s p e c i a l m e a n i n g a n d
m u s t t h e r e f o r e b e e s c a p e d i f y o u w i s h t o i n s e r t t h e s e c h a r a c t e r s l i t e r a l l y.


B y d e f a u l t, P H P w i l l e s c a p e t h e s e c h a r a c t e r s f o r y o u i n a n y d a t a c o m i n g f r o m t h e u s e r i n G E T, P o s t
o r C o o k i e d a t a. T h i s m a g i c e s c a p i n g i s k n o w n a s M a g i c Q u o t e s a n d c a n b e c o n f i g u r e d i n y o u r p h p.i n i
f i l e b y s e t t i n g t h e m a g i c _ q u o t e s _ g p c d i r e c t i v e.


T h e c h a r a c t e r s a f f e c t e d a r e \ ' " a n d N U L ( c h a r 0 ). I f t h e s e c h a r a c t e r s a p p e a r i n u s e r - s u p p l i e d d a t a
t h e y w i l l b e e s c a p e d w i t h a \ ( b a c k s l a s h ).


S o m e p e o p l e p r e f e r t o t u r n t h i s f e a t u r e o f f a n d h a n d l e e s c a p i n g d a t a m a n u a l l y u s i n g t h e a d d s l a s h e s ( )
f u n c t i o n. T h e r e i s a c o n v e r s e f u n c t i o n, s t r i p s l a s h e s ( ), w h i c h r e m o v e s t h e b a c k s l a s h c h a r a c t e r s i n a n
e s c a p e d s t r i n g.


- 1 2 -
S l i d e 1 2/6 4 D e c e m b e r 6, 2 0 0 2
A S i m p l e G u e s t b o o k
G u e s t b o o k E x a m p l e
A v e r y s i m p l e g u e s t b o o k e x a m p l e t o i l l u s t r a t e b a s i c f i l e h a n d l i n g.


< h t m l > < h e a d > < t i t l e > M y G u e s t b o o k </t i t l e > </h e a d >
< b o d y >
< h 1 > W e l c o m e t o m y G u e s t b o o k </h 1 >
< h 2 > P l e a s e w r i t e m e a l i t t l e n o t e b e l o w </h 2 >
< f o r m a c t i o n ="<?="$ P H P _ S E L F#r e s u l t s"?>" m e t h o d ="P O S T">
< t e x t a r e a c o l s = 4 0 r o w s = 5 n a m e = n o t e w r a p = v i r t u a l > </t e x t a r e a >
< i n p u t t y p e = s u b m i t v a l u e =" S e n d i t ">
</f o r m >
<?i f ( i s s e t ( $ n o t e ) ) {
$ f p = f o p e n ("/t m p/n o t e s.t x t","a");
f p u t s ( $ f p,n l 2 b r ( $ n o t e ).'< b r >');
f c l o s e ( $ f p );
}
?> < h 2 > T h e e n t r i e s s o f a r:</h 2 >
<? @ R e a d F i l e ("/t m p/n o t e s.t x t") ?>
</b o d y > </h t m l >
O u t p u t:
M y G u e s t b o o k
W e l c o m e t o m y G u e s t b o o k
P l e a s e w r i t e m e a l i t t l e n o t e b e l o w
T h e e n t r i e s s o f a r:
- 1 3 -
S l i d e 1 3/6 4 D e c e m b e r 6, 2 0 0 2
D B - d r i v e n G u e s t b o o k
S Q L'i z i n g t h e G u e s t b o o k E x a m p l e
W e a r e g o i n g t o c o n v e r t t h i s i n t o a n S Q L - d r i v e n g u e s t b o o k b y f i r s t c r e a t i n g a d a t a b a s e, t h e n a
s c h e m a f o r t h e t a b l e w h e r e w e w i l l s t o r e t h e d a t a a n d t h e n w e w i l l m o d i f y t h e c o d e.


C r e a t e a d a t a b a s e
m y s q l a d m i n c r e a t e m y d b
C r e a t e a S c h e m a
C R E A T E T A B L E c o m m e n t s (
i d i n t ( 8 ) D E F A U L T '0' N O T N U L L a u t o _ i n c r e m e n t,
c o m m e n t t e x t,
t s d a t e t i m e,
P R I M A R Y K E Y ( i d )
);
- 1 4 -
S l i d e 1 4/6 4 D e c e m b e r 6, 2 0 0 2
D B - d r i v e n G u e s t b o o k
S Q L'i z i n g t h e G u e s t b o o k E x a m p l e
H e r e w e a d d t h e n e c e s s a r y c o d e t o s t o r e o u r g u e s t b o o k c o m m e n t s i n a n S Q L d a t a b a s e


< h t m l > < h e a d > < t i t l e > M y G u e s t b o o k </t i t l e > </h e a d >
< b o d y >
< h 1 > W e l c o m e t o m y G u e s t b o o k </h 1 >
< h 2 > P l e a s e w r i t e m e a l i t t l e n o t e b e l o w </h 2 >
< f o r m a c t i o n ="<? e c h o "$ P H P _ S E L F#r e s u l t s"?>" m e t h o d ="P O S T">
< t e x t a r e a c o l s = 4 0 r o w s = 5 n a m e ="n o t e" w r a p = v i r t u a l > </t e x t a r e a >
< i n p u t t y p e ="s u b m i t" v a l u e =" S e n d i t ">
</f o r m >
<?
m y s q l _ c o n n e c t ('l o c a l h o s t');
m y s q l _ s e l e c t _ d b ('m y d b');
i f ( i s s e t ( $ n o t e ) ) {
$ t s = d a t e ("Y - m - d H:i:s");
m y s q l _ q u e r y ("i n s e r t i n t o c o m m e n t s v a l u e s
( 0,'$ n o t e','$ t s')");
}
?>
< h 2 > T h e e n t r i e s s o f a r:</h 2 >
<? $ r e s u l t = m y s q l _ q u e r y ("s e l e c t * f r o m c o m m e n t s");
w h i l e ( $ r o w = m y s q l _ f e t c h _ r o w ( $ r e s u l t ) ) {
e c h o $ r o w [ 0 ] ." " . $ r o w [ 1 ] . " " . $ r o w [ 2 ] . "< b r >\n";
} ?>
</b o d y > </h t m l >
O u t p u t:
M y G u e s t b o o k
W e l c o m e t o m y G u e s t b o o k
P l e a s e w r i t e m e a l i t t l e n o t e b e l o w
T h e e n t r i e s s o f a r:
- 1 5 -
S l i d e 1 5/6 4 D e c e m b e r 6, 2 0 0 2
D B A b s t r a c t i o n
A d a t a b a s e a b s t r a c t i o n l a y e r i s b u n d l e d w i t h P H P 4. I n t h e e x a m p l e b e l o w, t h e o n l y t h i n g y o u w o u l d
n e e d t o c h a n g e t o u s e a d i f f e r e n t d a t a b a s e i s t h e o d b c w o r d o n t h e t h i r d l i n e.


<?p h p
r e q u i r e _ o n c e 'D B.p h p';
$ d b = D B::c o n n e c t ('o d b c://u s e r:p w @ h o s t/m y d b');
$ s t m t = $ d b - > p r e p a r e ('S E L E C T * F R O M c o m m e n t s');
$ r e s u l t = $ d b - > e x e c u t e ( $ s t m t );
w h i l e ( $ r o w = $ d b - > f e t c h r o w ( $ r e s u l t ) ) {
w h i l e ( $ r o w a s $ f i e l d = > $ v a l u e ) {
e c h o "$ f i e l d: $ v a l u e < b r >\n";
}
}
$ d b - > d i s c o n n e c t ( );
?>
- 1 6 -
S l i d e 1 6/6 4 D e c e m b e r 6, 2 0 0 2
H T T P H e a d e r s
Y o u c a n a d d h e a d e r s t o t h e H T T P r e s p o n s e i n P H P u s i n g t h e H e a d e r ( ) f u n c t i o n. S i n c e t h e r e s p o n s e
h e a d e r s a r e s e n t b e f o r e a n y o f t h e a c t u a l r e s p o n s e d a t a, y o u h a v e t o s e n d t h e s e h e a d e r s b e f o r e
o u t p u t t i n g a n y d a t a. S o, p u t a n y s u c h h e a d e r c a l l s a t t h e t o p o f y o u r s c r i p t.


R e d i r e c t i o n
<?h e a d e r ('L o c a t i o n: h t t p://w w w.p h p.n e t')?>
S e t t i n g a L a s t - M o d i f i e d H e a d e r
<?h e a d e r ('L a s t - M o d i f i e d: '.
g m d a t e ('D, d M Y H:i:s',g e t l a s t m o d ( ) ).' G M T')?>
A v o i d a l l C a c h i n g
<?p h p
H e a d e r ('C a c h e - C o n t r o l: n o - c a c h e, m u s t - r e v a l i d a t e');
H e a d e r ('P r a g m a: n o - c a c h e');
H e a d e r ('E x p i r e s: M o n,2 6 J u l 1 9 8 0 0 5:0 0:0 0 G M T');
?>
- 1 7 -
S l i d e 1 7/6 4 D e c e m b e r 6, 2 0 0 2
C o o k i e s
S e t t i n g a S e s s i o n C o o k i e
<? S e t C o o k i e ('C o o k i e _ N a m e','v a l u e'); ?>
S e t t i n g a P e r s i s t e n t C o o k i e
<? S e t C o o k i e ('C o o k i e _ N a m e','v a l u e',
m k t i m e ( 1 2,0,0,2 2,1 1,2 0 0 2 ) ); ?>
R e a d i n g a C o o k i e
<? e c h o $ C o o k i e _ N a m e; ?>
<? e c h o $ H T T P _ C O O K I E _ V A R S ['C o o k i e _ N a m e']; ?>
D e l e t i n g t h e C o o k i e s
<? S e t C o o k i e ('C o o k i e _ N a m e',''); ?>
<? S e t C o o k i e ('C o o k i e _ N a m e','',
m k t i m e ( 1 2,0,0,2 2,1 1,1 9 7 0 ) ); ?>
O t h e r O p t i o n a l P a r a m t e r s
P a t h, D o m a i n, a n d S e c u r e p a r a m e t e r s c a n a l s o b e s e t t o r e s t r i c t a c o o k i e t o a c e r t a i n p a t h, d o m a i n o r
i n t h e c a s e o f t h e S e c u r e p a r a m e t e r, l i m i t t h e c o o k i e t o o n l y b e s e t i f t h e r e q u e s t c a m e i n o v e r a n S S L
c o n n e c t i o n.


- 1 8 -
S l i d e 1 8/6 4 D e c e m b e r 6, 2 0 0 2
C o o k i e E x p i r y
P r o b l e m
S h o r t e x p i r y c o o k i e s d e p e n d o n u s e r s h a v i n g t h e i r s y s t e m c l o c k s s e t c o r r e c t l y.


S o l u t i o n
D o n't d e p e n d o n t h e u s e r s h a v i n g t h e i r c l o c k s s e t r i g h t. E m b e d t h e t i m e o u t b a s e d o n y o u r s e r v e r's
c l o c k i n t h e c o o k i e.


<?p h p
$ v a l u e = t i m e ( ) + 3 6 0 0 . ':' . $ v a r i a b l e;
S e t C o o k i e ('C o o k i e _ N a m e',$ v a l u e );
?>
T h e n w h e n y o u r e c e i v e t h e c o o k i e, d e c o d e i t a n d d e t e r m i n e i f i t i s s t i l l v a l i d.


<?p h p
l i s t ( $ t s,$ v a r i a b l e ) = e x p l o d e (':',$ C o o k i e _ N a m e,2 );
i f ( $ t s < t i m e ( ) ) {
...
} e l s e {
S e t C o o k i e ('C o o k i e _ N a m e','');
}
?>
- 1 9 -
S l i d e 1 9/6 4 D e c e m b e r 6, 2 0 0 2
G D 1/2
C r e a t i n g a P N G w i t h a T r u e T y p e f o n t
<?
H e a d e r ("C o n t e n t - t y p e: i m a g e/p n g");
$ i m = I m a g e C r e a t e ( 6 3 0,8 0 );
$ b l u e = I m a g e C o l o r A l l o c a t e ( $ i m,0 x 5 B,0 x 6 9,0 x A 6 );
$ w h i t e = I m a g e C o l o r A l l o c a t e ( $ i m,2 5 5,2 5 5,2 5 5 );
$ b l a c k = I m a g e C o l o r A l l o c a t e ( $ i m,0,0,0 );
I m a g e T T F T e x t ( $ i m, 4 5, 0, 1 0, 5 7, $ b l a c k, "C A N D Y", $ t e x t );
I m a g e T T F T e x t ( $ i m, 4 5, 0, 6, 5 4, $ w h i t e, "C A N D Y", $ t e x t );
I m a g e P N G ( $ i m );
?>
< I M G s r c ="t x t.p h p?t e x t = <?e c h o u r l e n c o d e ( $ t e x t )?>">
!
- 2 0 -
S l i d e 2 0/6 4 D e c e m b e r 6, 2 0 0 2
C o l o u r s
C o l o r H a n d l i n g
F o r i m a g e s w i t h a n 8 - b i t i n d e x e d p a l e t t e i t c a n b e t r i c k y t o m a n a g e c o l o r s.


<?
$ i m = I m a g e C r e a t e ( 3 0 0,2 5 6 );
f o r ( $ r = 0; $ r < 2 5 6; $ r + + ) {
$ c o l = I m a g e C o l o r A l l o c a t e ( $ i m,$ r,0,0 );
I m a g e L i n e ( $ i m, 0,$ r, 1 0 0, $ r, $ c o l );
}
f o r ( $ g = 0; $ g < 2 5 6; $ g + + ) {
$ c o l = I m a g e C o l o r A l l o c a t e ( $ i m,0,$ g,0 );
I m a g e L i n e ( $ i m, 1 0 0,2 5 5 - $ g, 2 0 0, 2 5 5 - $ g, $ c o l );
}
f o r ( $ b = 0; $ b < 2 5 6; $ b + + ) {
$ c o l = I m a g e C o l o r A l l o c a t e ( $ i m,0,0,$ b );
I m a g e L i n e ( $ i m, 2 0 0,$ b, 3 0 0, $ b, $ c o l );
}
H e a d e r ('C o n t e n t - T y p e: i m a g e/p n g');
I m a g e P N G ( $ i m );
?>
O u t p u t:
F o r p a l e t t e d i m a g e s t h e f o l l o w i n g f u n c t i o n s c a n b e u s e f u l:
o
I m a g e C o l o r C l o s e s t


o
I m a g e C o l o r E x a c t


o
I m a g e C o l o r D e a l l o c a t e


- 2 1 -
S l i d e 2 1/6 4 D e c e m b e r 6, 2 0 0 2
C o l o u r s
C o l o u r H a n d l i n g
F o r T r u e c o l o r i m a g e s w e h a v e n o s u c h i s s u e s.


<?
$ i m = I m a g e C r e a t e T r u e c o l o r ( 3 0 0,2 5 6 );
f o r ( $ r = 0; $ r < 2 5 6; $ r + + ) {
$ c o l = I m a g e C o l o r A l l o c a t e ( $ i m,$ r,0,0 );
I m a g e L i n e ( $ i m, 0,$ r, 1 0 0, $ r, $ c o l );
}
f o r ( $ g = 0; $ g < 2 5 6; $ g + + ) {
$ c o l = I m a g e C o l o r A l l o c a t e ( $ i m,0,$ g,0 );
I m a g e L i n e ( $ i m, 1 0 0,2 5 5 - $ g, 2 0 0, 2 5 5 - $ g, $ c o l );
}
f o r ( $ b = 0; $ b < 2 5 6; $ b + + ) {
$ c o l = I m a g e C o l o r A l l o c a t e ( $ i m,0,0,$ b );
I m a g e L i n e ( $ i m, 2 0 0,$ b, 3 0 0, $ b, $ c o l );
}
H e a d e r ('C o n t e n t - T y p e: i m a g e/p n g');
I m a g e P N G ( $ i m );
?>
O u t p u t:
- 2 2 -
S l i d e 2 2/6 4 D e c e m b e r 6, 2 0 0 2
T r u e c o l o r C o l o r s
T r u e c o l o r c o l o r h a n d l i n g
F o r T r u e c o l o r i m a g e s t h e c o l o r s a r e a c t u a l l y s i m p l e 3 1 - b i t l o n g s. O r, t h i n k o f t h e m a s b e i n g
c o m p o s e d o f 4 b y t e s a r r a n g e d l i k e t h i s:


T h e h i g h e s t o r l e f t m o s t b i t i n t h e a l p h a c h a n n e l i s n o t u s e d w h i c h m e a n s t h e a l p h a c h a n n e l c a n o n l y
h a v e v a l u e s f r o m 0 t o 1 2 7. Y o u c a n u s e t h e I m a g e C o l o r A l l o c a t e ( ) a s w i t h p a l e t t e d i m a g e s, b u t y o u
c a n a l s o s p e c i f y t h e c o l o r d i r e c t l y.


F o r e x a m p l e:
<?
$ i m = I m a g e C r e a t e T r u e c o l o r ( 4 0 0,3 0 0 );
I m a g e F i l l e d R e c t a n g l e ( $ i m,0,0,3 9 9,2 9 9,0 x 0 0 f f f f f f );
I m a g e F i l l e d E l l i p s e ( $ i m,2 0 0,1 5 0,3 0 0,3 0 0,0 x 0 0 0 0 0 0 0 0 );
I m a g e A l p h a B l e n d i n g ( $ i m,t r u e );
I m a g e F i l l e d R e c t a n g l e ( $ i m,1 0 0,0,4 0 0,1 0 0,0 x 6 0 f f 1 1 1 1 );
I m a g e F i l l e d R e c t a n g l e ( $ i m,1 0 0,1 0 0,4 0 0,2 0 0,0 x 3 0 f f 1 1 1 1 );
I m a g e F i l l e d R e c t a n g l e ( $ i m,1 0 0,2 0 0,4 0 0,3 0 0,0 x 1 0 f f 1 1 1 1 );
H e a d e r ('C o n t e n t - T y p e: i m a g e/p n g');
I m a g e P N G ( $ i m );
?>
O u t p u t:
T h i s e x a m p l e c o u l d a l s o b e w r i t t e n l i k e t h i s:
<?p h p
$ i m = I m a g e C r e a t e T r u e c o l o r ( 4 0 0,3 0 0 );
$ w h i t e = I m a g e C o l o r A l l o c a t e ( $ i m,2 5 5,2 5 5,2 5 5 );
I m a g e F i l l e d R e c t a n g l e ( $ i m,0,0,3 9 9,2 9 9,$ w h i t e );
$ b l a c k = I m a g e C o l o r A l l o c a t e ( $ i m,0,0,0 );
I m a g e F i l l e d E l l i p s e ( $ i m,2 0 0,1 5 0,3 0 0,3 0 0,$ b l a c k );
I m a g e A l p h a B l e n d i n g ( $ i m,t r u e );
$ c o l = I m a g e C o l o r R e s o l v e A l p h a ( $ i m,0 x f f,0 x 1 1,0 x 1 1,0 x 6 0 );