1 O PHP e a World Wide Web... 1 1.1 Introdução... 1 1.2 Breve apresentação do PHP... 2 1.3 Acesso a documentos na web... 3 1.4 HTML estático versus HTML dinâmico... 4 1.5 PHP, o que é?... 6 1.6 O PHP e o HTML... 7 2 Funcionamento do PHP... 15 2.1 Introdução... 15 2.2 História do PHP... 15 2.3 Arquitectura e funcionamento... 17 2.4 Características do PHP... 19 2.5 Potencialidades do PHP... 20 2.6 PHP, CGI, Perl e ASP... 21 3 O PHP/Zend... 26 3.1 Introdução... 26 3.2 Utilização do PHP... 26 3.3 A arquitectura do PHP... 29 3.4 Optimização... 31 3.4.1 O PHP versus ASP... 32 3.5 Novas Funcionalidades... 32 3.5.1 Novo modelo orientado a objectos (O.O.)... 32 3.5.2 Suporte para a linguagem de programação Java... 34 3.5.3 Alterações gerais no PHP... 35 3.6 Considerações sobre o PHP... 37 4 Instalação e configuração do PHP... 41 4.1 Introdução... 41 4.2 Instalação do PHP... 41 4.3 Como obter o software PHP... 43 4.4 Instalação em sistemas Windows,,,... 45 4.4.1 Instalação do PHP... 45 4.4.2 Apache web server... 47 FCA - EDITORA DE INFORMÁTICA I
Programação com PHP 5 4.4.3 Microsoft IIS (4.x e 5) e PWS 4 (Personal Web Server)... 48 4.4.3.1 Windows e PWS 4... 49 4.4.3.2 Windows NT/2000/XP e IIS 4/5/6... 49 4.5 Instalação em sistemas LINUX... 52 4.5.1 Apache Web Server 1.3.x / 2.0... 53 4.6 A configuração do PHP... 55 4.6.1 O ficheiro de configuração PHP.INI... 55 4.6.2 Directivas gerais de configuração... 55 4.6.2.1 auto_append_file texto... 55 4.6.2.2 auto_prepend_file texto... 56 4.6.2.3 display_errors lógico... 56 4.6.2.4 doc_root texto... 56 4.6.2.5 error_log texto... 56 4.6.2.6 error_reporting número... 56 4.6.2.7 open_basedir texto... 57 4.6.2.8 gpc_order texto... 57 4.6.2.9 ignore_user_abort texto... 57 4.6.2.10 include_path texto... 57 4.6.2.11 max_execution_time número... 57 4.6.2.12 memory_limit número... 57 4.6.2.13 short_open_tag lógico... 58 4.6.2.14 track_errors lógico... 58 4.6.2.15 track_vars lógico... 58 4.6.2.16 upload_tmp_dir texto... 58 4.6.2.17 user_dir texto... 58 4.6.3 Directivas de configuração do e-mail... 58 4.6.3.1 SMTP texto... 58 4.6.3.2 sendmail_from texto... 58 4.6.3.3 sendmail_path texto... 59 4.6.4 Directivas de configuração em modo seguro... 59 4.6.4.1 safe_mode lógico... 59 4.6.4.2 safe_mode_exec_dir texto... 59 4.6.4.3 register_globals texto... 59 4.6.5 Outras directivas de configuração... 59 4.7 Verificar a actual instalação e configuração... 60 5 A estrutura e sintaxe do PHP... 67 5.1 Introdução... 67 5.2 Semelhanças com outras linguagens... 67 5.3 Introduzir o código PHP no HTML... 68 II
Índice 5.4 Separação de instruções... 69 5.5 Utilização de comentários... 69 5.6 Tipos de dados... 70 5.6.1 Valores Lógicos (boolean)... 71 5.6.2 Valores inteiros (integer)... 71 5.6.3 Valores de vírgula flutuante (float)... 72 5.6.4 Cadeias de caracteres (String)... 72 5.6.4.1 Conversão de strings... 73 5.6.5 Arrays... 74 5.6.5.1 Arrays de uma só dimensão... 74 5.6.5.2 Arrays multidimensionais... 76 5.6.6 Classes e Objectos (programação orientada por objectos)... 77 5.6.6.1 Inicialização de objectos... 78 5.6.7 Recursos (Resources)... 78 5.6.8 NULL... 79 5.7 Variáveis... 80 5.7.1 Escopo das variáveis... 80 5.7.2 Nomes de variáveis dinâmicas... 82 5.7.3 Variáveis Predefinidas... 83 5.7.4 Variáveis externas ao PHP... 85 5.7.4.1 Formulários HTML (através de POST e GET)... 85 5.7.5 Variáveis através de cookies... 86 5.7.6 Variáveis de ambiente... 86 5.8 Constantes... 87 5.9 Operadores... 88 5.9.1 Operadores aritméticos... 88 5.9.2 Operadores de cadeias de caracteres... 89 5.9.3 Operadores de atribuição... 89 5.9.4 Operadores de operações com bits... 89 5.9.5 Operadores Lógicos... 90 5.9.6 Operadores de comparação... 90 5.9.7 Precedência dos operadores... 91 5.10 Estruturas de Controlo... 92 5.10.1 if... 92 5.10.2 else... 93 5.10.3 elseif... 94 5.10.4 while... 95 5.10.5 do while... 96 5.10.6 for... 96 5.10.7 break... 97 FCA - EDITORA DE INFORMÁTICA III
Programação com PHP 5 5.10.8 continue... 97 5.10.9 switch... 98 5.10.10 require... 99 5.10.11 include... 99 5.10.12 require_once e include_once... 99 5.10.13 class... 99 5.11 Funções... 102 5.11.1 Funções definidas pelo utilizador... 102 5.11.2 Retorno de valores... 102 5.11.3 Argumentos de funções... 103 5.11.4 Passagem de argumentos por referência... 103 5.11.5 Valor por defeito de argumentos... 104 6 Programação Orientada por Objectos no PHP5... 105 6.1 Introdução... 105 6.2 Zend Engine 2... 106 6.3 Um novo modelo de objectos... 107 6.3.1 Definição de Classes... 107 6.3.2 Visibilidade de Métodos da Classe... 107 6.3.3 Visibilidade dos Métodos da Classe... 109 6.3.4 Variáveis e métodos estáticos... 110 6.3.5 Constantes de uma Classe... 112 6.3.6 Parent e Self... 113 6.3.7 Construtores e Destrutores de Objectos... 113 6.3.7.1 Construtores... 113 6.3.7.2 Destrutores... 116 6.3.8 Classes e Métodos Abstractos... 118 6.3.9 Interfaces... 119 6.3.10 Operador instanceof... 122 6.3.11 Métodos e Classes Finais... 123 6.3.12 Excepções... 125 7 Funcionalidades Básicas do PHP... 129 7.1 Introdução... 129 7.2 Algumas funcionalidades do PHP... 129 7.3 Primeiros exemplos... 130 7.4 Imprimir dados no ecrã... 134 7.4.1 A função echo()... 134 7.4.2 A função print()... 135 IV
Índice 7.4.3 A função printf()... 135 7.5 Conclusão... 136 8 O PHP e os formulários em HTML... 137 8.1 Introdução... 137 8.2 Usar o PHP para ler valores de um formulário... 137 8.2.1 Formulários simples... 138 8.2.1.1 Imprimir o formulário... 139 8.2.1.2 O processamento do formulário... 140 8.2.1.3 Juntar ambas as partes... 141 8.2.2 Mais um exemplo simples... 143 8.2.3 Um formulário com páginas múltiplas... 146 9 O PHP e as bases de dados... 162 9.1 Introdução... 162 9.2 Interactividade das aplicações web... 162 9.3 MySQL breve introdução... 163 9.4 Utilitários de administração do MySQL... 170 9.5 Ligação a bases de dados em PHP... 175 9.5.1 Principais funções com suporte ao MySQL... 176 9.5.2 Funções PHP de ligação a bases de dados MySQL... 177 9.6 Aplicação de gestão de contactos... 183 9.6.1 Selecção e visualização de registos... 183 9.6.2 Adição de registos... 185 9.6.3 Edição/alteração de um registo... 189 9.6.4 Eliminação de registo... 192 9.6.5 Definição da condição de selecção... 195 9.6.5.1 Navegação entre páginas contendo registos... 203 9.6.6 Envio de e-mails e realização de uploads de ficheiros... 208 9.6.6.1 Envio de e-mail... 209 9.6.6.2 Upload de ficheiros e armazenamento em bases de dados... 213 9.6.7 Redireccionamento de páginas... 219 9.7 Autenticação de utilizadores... 221 9.8 Ligação a bases de dados em PHP via ODBC... 230 9.8.1 Funções PHP para ligação a bases de dados via ODBC... 230 9.8.2 Exemplo de aplicação das funções PHP-ODBC... 232 9.9 Interfaces de ligação a bases de dados... 239 9.9.1 Biblioteca ADOdb... 243 9.9.2 PDO: PHP Data Objects... 247 FCA - EDITORA DE INFORMÁTICA V
Programação com PHP 5 10 PHP e o SQLite... 251 10.1 Introdução... 251 10.2 SQLite O que é?... 251 10.2.1 O SQLite e o SQL... 252 10.2.2 SQLite Manager... 254 10.3 PHP e o SQLite... 256 10.4 PHP e SQLite Modo OO... 258 10.4.1 Criar ou abrir uma BD SQLite... 260 10.4.2 Criar tabelas em base de dados SQLite... 261 10.4.3 Listar todos registos de uma tabela... 262 10.4.4 Apagar registos numa tabela... 264 10.4.5 Alterar registos numa tabela... 266 11 O PHP e o correio electrónico... 269 11.1 Introdução... 269 11.2 Alguns detalhes sobre o correio electrónico... 270 11.3 Envio de correio electrónico... 271 11.3.1 Programa para enviar correio electrónico... 272 11.3.2 Classe para enviar correio electrónico simples... 276 11.3.3 Classe para enviar correio electrónico composto... 280 11.3.4 Outra forma de enviar correio electrónico no PHP... 290 11.4 Validação de endereços de correio electrónico... 291 11.4.1 Validação simples... 291 11.4.2 Validação complexa... 292 12 Autenticação de utilizadores com PHP... 299 12.1 Introdução... 299 12.2 Autenticação HTTP... 300 12.3 Autenticação com PHP... 301 12.3.1 Validação com ficheiro texto... 305 12.3.2 Validação baseada no.htaccess... 306 12.3.3 Validação com bases de dados... 309 12.4 Vantagens da autenticação com PHP... 311 13 Datas e horas em PHP... 314 13.1 Introdução... 314 13.2 Alguns exemplos úteis de utilização... 319 13.2.1 Tempo decorrido... 319 13.2.2 Datas em português... 325 VI
Índice 14 O PHP e os cookies... 329 14.1 Introdução... 329 15 Criação de gráficos utilizando o PHP... 335 15.1 Introdução... 335 15.2 Criação dinâmica de gráficos... 335 15.2.1 Gráficos simples quadrados e rectângulos... 336 15.2.2 Gráficos simples círculos... 340 15.2.3 Utilização de texto em gráficos... 343 15.2.4 Biblioteca de gráficos de barras... 346 15.2.5 Criação de imagens a partir de outras... 351 15.3 Formatos de imagem... 355 16 Sessões em PHP... 358 16.1 Introdução... 358 16.2 A utilidade das sessões... 358 16.3 Informação complementar... 359 16.4 A configuração das sessões... 360 16.5 Propagação de identificadores de sessão... 361 16.6 Funções para gestão de sessões em PHP... 362 16.6.1 Inicialização de sessões... 362 16.6.2 Destruição de sessões... 362 16.6.3 Nome de sessões... 363 16.6.4 Informação acerca da path de sessões... 363 16.6.5 Identificação de sessões... 363 16.6.6 Associação de dados a uma sessão... 363 16.6.7 Desassociação de dados a uma sessão... 364 16.6.8 Verificação de informação de sessão... 364 16.6.9 Codificação de informação de sessões... 364 16.6.10 Descodificação de informação de sessões... 364 16.7 Exemplos da utilização da gestão de sessões... 365 16.7.1 Registo de variáveis... 365 16.7.2 Contador de acessos... 366 16.7.3 Cores persistentes... 367 16.7.4 Login e sessões... 373 17 O PHP e o sistema de ficheiros... 380 17.1 Introdução... 380 17.2 Utilização de ficheiros no PHP... 380 FCA - EDITORA DE INFORMÁTICA VII
Programação com PHP 5 17.3 Testes sobre os ficheiros... 383 17.4 Navegação nos ficheiros... 384 17.5 A função file()... 391 17.6 A função fpassthru()... 393 17.7 Copiar, apagar e renomear ficheiros... 395 17.8 Trabalhar com directorias... 398 17.9 Upload de ficheiros... 401 17.10 Validação de ficheiros de upload... 404 18 O PHP e a execução de programas externos... 408 18.1 Introdução... 408 18.2 Funções PHP de execução de programas externos... 408 18.2.1 exec... 409 18.2.2 system... 409 18.3 Exemplos de utilização... 410 19 O PHP o XML e SimpleXML... 416 19.1 Introdução... 416 19.2 XML... 416 19.3 Documentos XML... 418 19.4 DTD Document Type Definitions... 420 19.5 Interpretadores de XML... 422 19.6 Tipos de interpretadores XML... 422 19.7 Integração do interpretador XML Expat... 422 19.8 Funções do PHP para XML... 423 19.9 xml_parser_create... 424 19.10 xml_set_object... 425 19.11 xml_set_element_handler... 425 19.12 xml_set_character_data_handler... 426 19.13 xml_parse... 428 19.14 xml_get_error_code... 428 19.15 xml_error_string... 428 19.16 xml_get_current_line_number... 429 19.17 xml_parser_free... 429 19.18 PHP e XML em funcionamento... 429 19.19 Análise ao XML... 437 19.20 SimpleXML... 437 19.20.1 Criar um objecto SimpleXML... 438 19.20.2 Navegação nos objectos SimpleXML... 439 VIII
Índice 19.20.3 Armazenar objectos SimpleXML... 441 20 PHP e o PDF... 444 20.1 Introdução... 444 20.2 FPDF O que é?... 444 20.3 Instalação... 445 20.4 Criação de um documento PDF... 445 20.5 Cabeçalhos, rodapés e imagens... 450 20.6 Geração de documentos PDF a partir de bases de dados... 455 20.7 Conversão de HTML para PDF... 463 21 Desenvolvimento de aplicações WAP com o PHP... 466 21.1 Introdução... 466 21.2 Arquitectura PHP-WML... 467 21.3 A linguagem WML... 468 21.3.1 Exemplo de uma aplicação WML... 468 21.4 PHP nos documentos de WML... 472 21.4.1 Enviar correio electrónico através do dispositivos WAP... 477 21.4.2 Listar dados de uma base de dados via WAP... 479 21.5 Conclusão... 481 22 Desenvolvimento de Web-Services em PHP... 482 22.1 Introdução... 482 22.2 Web-Services... 483 22.2.1 SOAP - Simple Object Access Protocol... 486 22.2.2 WSDL Web Services Description Language... 487 22.2.3 UDDI Universal Description, Discovery and Integration... 487 22.3 A biblioteca NuSOAP... 488 22.4 Desenvolvimento de WS com PHP... 488 22.4.1 Exemplo de WS com o NuSOAP... 498 22.4.2 Definição e desenvolvimento do WS... 501 22.4.3 Desenvolvimento do cliente do WS em PHP... 517 22.4.3.1 Menu Principal... 518 22.4.3.2 Registo de Novos Utilizadores... 519 22.4.3.3 Ver informação do Título... 522 22.4.3.4 Ver cotação do Título... 525 22.4.3.5 Comprar Título... 528 22.4.3.6 Vender Título... 531 22.4.4 Desenvolvimento de um cliente do WS em C#... 534 FCA - EDITORA DE INFORMÁTICA IX
Programação com PHP 5 22.5 Suporte nativo PHP5 para Web-Services... 543 22.5.1 Consumir WS disponíveis... 543 22.5.2 Definir e criar WS com o suporte nativo PHP... 555 22.6 Conclusão... 569 23 Zend e a tecnologia PHP... 570 23.1 Introdução... 570 23.2 Zend Technologies Produtos e serviços... 571 23.2.1 Zend Platform... 572 23.2.2 Zend Engine... 573 23.2.3 Zend Guard... 573 23.2.3.1 Vantagens:... 575 23.2.3.2 Requisitos:... 575 23.2.4 Zend Studio... 576 23.2.4.1 Como funciona o Studio... 577 23.2.4.2 Vantagens:... 578 23.2.4.3 Requisitos... 578 23.2.4.4 Concorrentes... 579 23.2.5 Zend Consulting services... 581 23.3 Zend Education... 581 23.4 Frameworks PHP e Zend... 582 24 Recursos PHP na Internet... 585 24.1 O PHP na WWW... 585 24.2 Recursos PHP na WWW... 585 24.2.1 Php.net... 586 24.2.2 Weberdev.com... 587 24.2.3 PHPBuilder... 588 24.2.4 Developer Shed... 589 24.2.5 PHP Code Exchange... 591 24.2.6 The PHP Resource Index... 592 24.2.7 PHP Classes Repository... 593 24.2.8 Hotscripts... 594 24.3 Grupos de discussão e /ou canais de IRC... 595 24.3.1 Canal #php no IRC... 595 24.3.2 Listas de distribuição... 596 24.3.3 Grupos de discussão... 597 24.3.4 Lista de perguntas mais frequentes (FAQ)... 598 24.3.5 Lista de problemas e erros (bugs)... 599 X
Índice 25 Desenvolvimento de um site completo na WWW... 601 25.1 Introdução... 601 25.2 O sistema a desenvolver... 602 25.2.1 A infraestrutura técnica do site... 603 25.2.2 A estrutura do site... 603 25.2.3 A base de dados... 604 25.2.4 Concepção da base de dados... 605 25.2.5 Scripts que geram as páginas do site... 610 26 Referências bibliográficas... 645 27 Índice remissivo... 649 FCA - EDITORA DE INFORMÁTICA XI