If you can't read please download the document
Upload
joao-machado
View
1.203
Download
0
Embed Size (px)
Citation preview
PHP
PHP
Full story
Joo Machado
PHP
1994 - Personal Home PageDesenvolvido em C
Veio substituir um conjunto de scripts em perl
Hoje - PHP: Hypertext Preprocessor
Engines Zend engine
Roadsend - native machine code
Phalanger - .net
Quercus - Java
PHP no SAPO
Servers :
Fotos - 3
Fama - 1
Cinema - 2
Mobile + meo - 4
Spot - 2
Videos - 4
Homepage - 3
Mail - 13
Mensageiro - 2
Wiki - 2
Farm PHP 4+5 - 7 (215 Vhosts)
PHP no mundo
tiobe.com
Porqu PHP?
Linguagem de alto nvel
Fcil de aprender e desenvolver
Bem documentado
Multi-plataforma
Mod PHP Apache - FCGI
Extenses em C e C++ via mdulos, .NET, JAVA
Embutido / Templating
Amplamente utilizado
Grande comunidade de programadores
Contexto
Direccionado para a WEB
C e ser sempre mais rpido!
WS, Desktop, etc. Existem linguagens mais apropriadas
Arquitectura ideal
Internacionalizao
NLS Native Language Support
Utiliza o GNU gettext
Ex :
setlocale(LC_ALL, 'pt_PT');
bindtextdomain("myPHPApp", "/var/www/languageFiles");echo _("Welcome to My PHP Application");
Escalabilidade
Share-nothing ArchitectureComo o HTTP, cada pedido distinto
Shared data apenas ao nvel da data-store layer
Sem front controllers - Centralizao de pedidos
PermiteDistribuir a carga
Invisibilidade de erros entre datacenters
Modularizao
Simplicidade de desenvolvimento
Facilita debug / tracing / profiling
Ateno
Cdigo em PHP lento!
Deve ser visto com uma framework rica para a web
bastante eficiente, utilizando funes nativas
Demasiado cdigo em PHP contraproducente
Cdigo crtico deve passar a mdulo em C
Cdigo especfico deve ser um servio independente
Dicas
Dicas - performance
No assumir, testar!
Performance bottlenecks, raramente esto onde imaginamos
Evitar funes com peso extra desnecessrioinclude vs require_once
explode vs preg_split
No utilizar ficheiros para sesses -> memcache(d)
Reduzir ciclos, queries, stats, remote requests
Evitar HTMLWriters, HTML deve ser HTML!
Dicas - performance
Evitar expresses regulares
Utilizar sistemas de cache (Memria local, memcached)
Evitar mensagens de erro, mesmo warnings, notices, deprecated
URI's de ficheiros sempre absolutos!
Evitar comandos de alto nvel $a(); $$b; $c->{$k}
Dicas - Apache
directory index Erro comum
stat64("/var/www/index.html", 0xbfd279ac) = -1 ENOENT (No such file or directory)stat64("/var/www/index.cgi", 0xbfd27afc) = -1 ENOENT (No such file or directory)stat64("/var/www/index.pl", 0xbfd27afc) = -1 ENOENT (No such file or directory)stat64("/var/www/index.php", {st_mode=S_IFREG|0664, st_size=7198, ...}) = 0
Fix DirectoryIndex
#DirectoryIndex index.html index.cgi index.pl index.php DirectoryIndex index.php
Dicas -Apache
Se no utilizamos o .htaccess desligarCaso contrrio ir fazer um stat a cada pedido
AllowOverride none
Evitar symlinks
Novidades
Objectos
Em PHP4, a cada cpia de um objecto, era feito um clone
Em PHP5 os objects so passados por referncia, para efectuar uma cpia temos de pedir explicitamente $copy = clone $object;
Referncias
function teste(&$a){$a = 'p';}
$k = &$z;
Namespace
Reflection
Reflector
ReflectionClass
ReflectionExtension
ReflectionFunction
ReflectionFunctionAbstract
ReflectionMethod
ReflectionObject
ReflectionParameter
ReflectionProperty
jpaulo@jp-laptop:~$ php --rf fopenFunction [ function fopen ] { Parameters [4] { Parameter #0 [ $filename ] Parameter #1 [ $mode ] Parameter #2 [ $use_include_path ] Parameter #3 [ $context ] }}
Type Hinting
Late static bindings
A B
Interface Seguir um contrato
Abstract
Final method
Final class
Anonymous functions - Closure
Magic methods
__construct, __destruct, __call, __callStatic,__get, __set, __isset, __unset, __sleep, __wakeup, __set_state, __invoke, __toString, __clone
SPL
Standard PHP Library Permite estender/criar um conjunto de funcionalidades tpicas
Iterators, ArrayAccess, RecursiveFilterIterator, FilesystemIterator, etc
Activo por omisso a partir da verso 5.3
Iterator
ArrayAccess
Mdulos
Solr
Datetime
date_default_timezone_set('America/New_York');
memcache(d)
PECL/memcacheMature
Standalone
Simples
Serializa dados no escalares
Converte as Keys automaticamente
PECL/memcachedUtiliza a libmemcached
Keys no podem ter espaos ou high characters
Raw API
Mais funcionalidades
Compatvel perl etc.
Memcache (d)
Limite de 1Mb
Data de expirao em segundos
Se valor maior que 30 dias, passa a timestamp
Dados no so apagados ao expirar
Items so evicted quando se necessita do espao
Existem funes especficas para increment, replace, etc.
SQL - PDO
Database Access LayerNo faz abstraco de SQL!
SuportaOracle, MySQL, MS SQL Server, PostgreSQL,
Prepared statements
Excepes ou error handling
Transaces
etc.
PDO - Ex1
PDO - Ex2
$db = MyPDO::singleton('ptmail');
Simple XML
WebServices
OAuth
SCA - experimental
SOAP
XML-RPC
SOAP
Streams
Retira importncia ao Curl
Stream Filters - Ex. encriptar
Stream Contexts Ex. Headers HTTP
Stream Errors
Stream Wrapper implementar um protocolo
Streams - Ex
ob_start - output buffering
ob_start ()
ob_get_contents()
ob_end_clean()
ob_ flush()
ob_end_flush()
ob_gzhandler()
ob_iconv_handler()
...
Segurana
Magic quotes
PHP 5.3 - Deprecated
PHP 6 - Removed
Filter
Filter - sanitizao
FILTER_SANITIZE_EMAIL
FILTER_SANITIZE_ENCODED
FILTER_SANITIZE_SPECIAL_CHARS
FILTER_SANITIZE_STRING
FILTER_SANITIZE_URL
FILTER_UNSAFE_RAW
Algumas validam/corrigem inclusive bugs XSS dos Browsers
Suhosin Patch
Encriptao transparente
Desactivar eval()
Desactivar Remote include
Protege multiline mail()
Banir ficheiros binary/executable
Limite de iterao no disco e whitelists
...
Segurana - sesses
Ficheiros / DB / Memcache
Opes Cookie HTTP
Desligar trans_sid
Validar Referer
Validar IP (problema farms de proxies)
Regenerate id
Optimizao, Debug, Profiling
Zend
Zend Server
Zend Plaform
Zend Guard
Zend Studio - edit/debug/profile
Apc ( op-code cache system )
Inclued
strace
%apache2 -X
% strace -p 16367 -o sys1.txtProcess 16367 attached - interrupt to quit
(Fazer um pedido ao site)
Desligar processoProcess 16367 detached
% grep stat sys1.txt | grep -v fstat | wc l153
xdebug
zend_extension = /usr/local/.../xdebug.so
xdebug.profiler_enable = 1
xdebug.profiler_aggregate = On
xdebug.profiler_output_dir = /tmp
% kcachegrind cachegrind.out.aggregate.*
webgrind Web viewer
Xdebug
webgrind
Outros
DBG Comand Line
Valgrind
APD (Advanced PHP Debugger)
Gdb (GNU Project Debugger)
Boas prticas
Tudo em ficheiros de configurao
Class load
Class debug
Class profile
Class log
Utilitrio FirePHP
END