Sapo Sessions PHP

1,184 views

Published on

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

No Downloads
Views
Total views
1,184
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Sapo Sessions PHP

  1. 1. PHP Full story João Machado
  2. 2. PHP <ul><li>1994 - Personal Home Page </li><ul><li>Desenvolvido em C
  3. 3. Veio substituir um conjunto de scripts em perl </li></ul><li>Hoje - PHP: Hypertext Preprocessor
  4. 4. Engines </li><ul><li>Zend engine
  5. 5. Roadsend - native machine code
  6. 6. Phalanger - .net
  7. 7. Quercus - Java </li></ul></ul>
  8. 8. PHP no SAPO Servers : <ul><ul><li>Fotos - 3
  9. 9. Fama - 1
  10. 10. Cinema - 2
  11. 11. Mobile + meo - 4
  12. 12. Spot - 2
  13. 13. Videos - 4
  14. 14. Homepage - 3
  15. 15. Mail - 13
  16. 16. Mensageiro - 2
  17. 17. Wiki - 2
  18. 18. Farm PHP 4+5 - 7 (215 Vhosts) </li></ul></ul>
  19. 19. PHP no mundo tiobe.com
  20. 20. Porquê PHP? <ul><li>Linguagem de alto nível
  21. 21. Fácil de aprender e desenvolver
  22. 22. Bem documentado
  23. 23. Multi-plataforma
  24. 24. Mod PHP Apache - FCGI
  25. 25. Extensões em C e C++ via módulos, .NET, JAVA
  26. 26. Embutido / Templating
  27. 27. Amplamente utilizado
  28. 28. Grande comunidade de programadores </li></ul>
  29. 29. Contexto <ul><li>Direccionado para a WEB </li></ul><ul><li>C é e será sempre mais rápido! </li></ul><ul><li>WS, Desktop, etc. – Existem linguagens mais apropriadas </li></ul>
  30. 30. Arquitectura ideal
  31. 31. Internacionalização <ul><li>NLS – Native Language Support
  32. 32. Utiliza o GNU gettext </li></ul><ul><li>Ex : </li></ul>setlocale(LC_ALL, 'pt_PT'); bindtextdomain(&quot;myPHPApp&quot;, &quot;/var/www/languageFiles&quot;); echo _(&quot;Welcome to My PHP Application&quot;);
  33. 33. Escalabilidade <ul><li>Share-nothing Architecture </li><ul><li>Como o HTTP, cada pedido é distinto
  34. 34. Shared data apenas ao nível da data-store layer
  35. 35. Sem ”front controllers” - Centralização de pedidos </li></ul></ul><ul><li>Permite </li><ul><li>Distribuir a carga
  36. 36. Invisibilidade de erros entre datacenters
  37. 37. Modularização
  38. 38. Simplicidade de desenvolvimento
  39. 39. Facilita debug / tracing / profiling </li></ul></ul>
  40. 40. Atenção <ul><li>Código em PHP é lento!
  41. 41. Deve ser visto com uma framework rica para a web
  42. 42. É bastante eficiente, utilizando funções nativas
  43. 43. Demasiado código em PHP é contraproducente
  44. 44. Código crítico deve passar a módulo em C
  45. 45. Código específico deve ser um serviço independente </li></ul>
  46. 46. Dicas
  47. 47. Dicas - performance <ul><li>Não assumir, testar!
  48. 48. Performance bottlenecks, raramente estão onde imaginamos
  49. 49. Evitar funções com peso extra desnecessário </li><ul><li>include vs require_once
  50. 50. explode vs preg_split </li></ul><li>Não utilizar ficheiros para sessões -> memcache(d)
  51. 51. Reduzir ciclos, queries, stats, remote requests
  52. 52. Evitar HTMLWriters, HTML deve ser HTML! </li></ul>
  53. 53. Dicas - performance <ul><li>Evitar expressões regulares
  54. 54. Utilizar sistemas de cache (Memória local, memcached)
  55. 55. Evitar mensagens de erro, mesmo warnings, notices , deprecated
  56. 56. URI's de ficheiros sempre absolutos!
  57. 57. Evitar comandos de alto nível $a(); $$b; $c->{$k} </li></ul>
  58. 58. Dicas - Apache <ul><li>directory index – Erro comum </li></ul>stat64(&quot;/var/www/index.html&quot;, 0xbfd279ac) = -1 ENOENT (No such file or directory) stat64(&quot;/var/www/index.cgi&quot;, 0xbfd27afc) = -1 ENOENT (No such file or directory) stat64(&quot;/var/www/index.pl&quot;, 0xbfd27afc) = -1 ENOENT (No such file or directory) stat64(&quot;/var/www/index.php&quot;, {st_mode=S_IFREG|0664, st_size=7198, ...}) = 0 Fix DirectoryIndex <Directory /var/www> #DirectoryIndex index.html index.cgi index.pl index.php DirectoryIndex index.php </Directory>
  59. 59. Dicas -Apache <ul><li>Se não utilizamos o .htaccess -> desligar </li><ul><li>Caso contrário irá fazer um stat a cada pedido </li></ul></ul><Directory> AllowOverride none</Directory> <ul><li>Evitar symlinks </li></ul>
  60. 60. Novidades
  61. 61. Objectos <ul><li>Em PHP4, a cada cópia de um objecto, era feito um clone
  62. 62. Em PHP5 os objects são passados por referência, para efectuar uma cópia temos de pedir explicitamente $copy = clone $object; </li></ul>
  63. 63. Referências function teste(&$a) { $a = 'p'; } $k = &$z;
  64. 64. Namespace
  65. 65. Reflection <ul><li>Reflector
  66. 66. ReflectionClass
  67. 67. ReflectionExtension
  68. 68. ReflectionFunction
  69. 69. ReflectionFunctionAbstract
  70. 70. ReflectionMethod
  71. 71. ReflectionObject
  72. 72. ReflectionParameter
  73. 73. ReflectionProperty </li></ul>jpaulo@jp-laptop:~$ php --rf fopen Function [ <internal:standard> function fopen ] { Parameters [4] { Parameter #0 [ <required> $filename ] Parameter #1 [ <required> $mode ] Parameter #2 [ <optional> $use_include_path ] Parameter #3 [ <optional> $context ] } }
  74. 74. Type Hinting
  75. 75. Late static bindings <ul><li>A B </li></ul>
  76. 76. Interface – Seguir um contrato
  77. 77. Abstract
  78. 78. Final method
  79. 79. Final class
  80. 80. Anonymous functions - Closure
  81. 81. Magic methods __construct, __destruct, __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __set_state, __invoke, __toString, __clone
  82. 82. SPL <ul><li>Standard PHP Library </li><ul><ul><li>Permite estender/criar um conjunto de funcionalidades típicas
  83. 83. Iterators, ArrayAccess, RecursiveFilterIterator, FilesystemIterator, etc
  84. 84. Activo por omissão a partir da versão 5.3 </li></ul></ul></ul>
  85. 85. Iterator
  86. 86. ArrayAccess
  87. 87. Módulos
  88. 88. Solr
  89. 89. Datetime <ul><li>date_default_timezone_set('America/New_York'); </li></ul>
  90. 90. memcache(d) <ul><li>PECL/memcache </li><ul><li>Mature
  91. 91. Standalone
  92. 92. Simples
  93. 93. Serializa dados não escalares
  94. 94. Converte as Keys automaticamente </li></ul><li>PECL/memcached </li><ul><li>Utiliza a libmemcached
  95. 95. Keys não podem ter espaços ou “high characters”
  96. 96. Raw API
  97. 97. Mais funcionalidades
  98. 98. Compatível perl etc. </li></ul></ul>
  99. 99. Memcache (d) <ul><li>Limite de 1Mb
  100. 100. Data de expiração em segundos
  101. 101. Se valor maior que 30 dias, passa a timestamp
  102. 102. Dados não são apagados ao expirar
  103. 103. Items são ”evicted” quando se necessita do espaço </li></ul><ul><li>Existem funções específicas para increment, replace, etc. </li></ul>
  104. 104. SQL - PDO <ul><ul><ul><li>Database Access Layer </li><ul><li>Não faz abstracção de SQL! </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Supor t a </li><ul><li>Oracle, MySQL, MS SQL Server, PostgreSQL , …
  105. 105. Prepared statements
  106. 106. Excepções ou error handling
  107. 107. Transacções
  108. 108. etc. </li></ul></ul></ul></ul></ul>
  109. 109. PDO - Ex1
  110. 110. PDO - Ex2 <ul><li>$db = MyPDO::singleton('ptmail'); </li></ul>
  111. 111. Simple XML
  112. 112. WebServices <ul><li>OAuth
  113. 113. SCA - experimental
  114. 114. SOAP
  115. 115. XML-RPC </li></ul>
  116. 116. SOAP
  117. 117. Streams <ul><li>Retira importância ao Curl
  118. 118. Stream Filters - Ex. encriptar
  119. 119. Stream Contexts – Ex. Headers HTTP
  120. 120. Stream Errors
  121. 121. Stream Wrapper – implementar um protocolo </li></ul>
  122. 122. Streams - Ex
  123. 123. ob_start - output buffering <ul><li>ob_start ()
  124. 124. ob_get_contents()
  125. 125. ob_end_clean()
  126. 126. ob_ flush()
  127. 127. ob_end_flush()
  128. 128. ob_gzhandler()
  129. 129. ob_iconv_handler()
  130. 130. ... </li></ul>
  131. 131. Segurança
  132. 132. Magic quotes <ul><li>PHP 5.3 - Deprecated
  133. 133. PHP 6 - Removed </li></ul>
  134. 134. Filter
  135. 135. Filter - sanitização <ul><ul><li>FILTER_SANITIZE_EMAIL
  136. 136. FILTER_SANITIZE_ENCODED
  137. 137. FILTER_SANITIZE_SPECIAL_CHARS
  138. 138. FILTER_SANITIZE_STRING
  139. 139. FILTER_SANITIZE_URL
  140. 140. FILTER_UNSAFE_RAW </li></ul></ul><ul><ul><li>Algumas validam/corrigem inclusive bugs XSS dos Browsers </li></ul></ul>
  141. 141. Suhosin Patch <ul><li>Encriptação transparente
  142. 142. Desactivar eval()
  143. 143. Desactivar Remote include
  144. 144. Protege multiline mail()
  145. 145. Banir ficheiros binary/executable
  146. 146. Limite de iteração no disco e whitelists
  147. 147. ... </li></ul>
  148. 148. Segurança - sessões <ul><li>Ficheiros / DB / Memcache
  149. 149. Opções </li><ul><ul><li>Cookie HTTP
  150. 150. Desligar trans_sid
  151. 151. Validar Referer
  152. 152. Validar IP (problema farms de proxies)
  153. 153. Regenerate id </li></ul></ul></ul>
  154. 154. Optimização, Debug, Profiling
  155. 155. Zend €€€ <ul><li>Zend Server
  156. 156. Zend Plaform
  157. 157. Zend Guard
  158. 158. Zend Studio - edit/debug/profile </li></ul>
  159. 159. Apc ( op-code cache system )
  160. 160. Inclued
  161. 161. strace <ul><li>%apache2 -X
  162. 162. % strace -p 16367 -o sys1.txt </li><ul><ul><li>Process 16367 attached - interrupt to quit </li></ul></ul></ul><ul><li>(Fazer um pedido ao site) </li></ul><ul><li>Desligar processo </li><ul><ul><li>Process 16367 detached </li></ul></ul></ul><ul><li>% grep stat sys1.txt | grep -v fstat | wc –l </li><ul><ul><li>153 </li></ul></ul></ul>
  163. 163. xdebug <ul><li>zend_extension = /usr/local/.../xdebug.so
  164. 164. xdebug.profiler_enable = 1
  165. 165. xdebug.profiler_aggregate = On
  166. 166. xdebug.profiler_output_dir = /tmp </li></ul><ul><li>% kcachegrind cachegrind.out.aggregate.*
  167. 167. webgrind – Web viewer </li></ul>
  168. 168. Xdebug
  169. 169. webgrind
  170. 170. Outros <ul><li>DBG – Comand Line
  171. 171. Valgrind
  172. 172. APD (Advanced PHP Debugger)
  173. 173. Gdb (GNU Project Debugger) </li></ul>
  174. 174. Boas práticas <ul><li>Tudo em ficheiros de configuração
  175. 175. Class load
  176. 176. Class debug
  177. 177. Class profile
  178. 178. Class log </li></ul><ul><li>Utilitário FirePHP </li></ul>
  179. 179. END [email_address]

×