1 O PHP e a World Wide Web... 1 1.1 Introdução... 1 1.2 Breve apresentação do PHP... 1 1.3 Acesso a documentos na web... 2 1.4 HTML estático versus HTML dinâmico... 3 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... 19 2.6 PHP, CGI, Perl e ASP... 21 3 O PHP4/Zend... 25 3.1 Utilização do PHP... 25 3.2 A arquitectura do PHP4... 28 3.3 Optimização... 30 3.3.1 O PHP versus ASP... 30 3.4 Novas Funcionalidades... 31 3.4.1 Sessões... 31 3.4.2 Suporte para o protocolo File Transfer Protocol (FTP)... 33 3.4.3 Suporte para Perl Compatible Regular Expressions (PCRE)... 34 3.4.4 Suporte para a linguagem de programação Java... 34 3.4.5 Listagem das funcionalidades do PHP4... 35 3.5 Outras considerações sobre o PHP4... 38 4 Instalação e configuração do PHP... 41 4.1 Instalação do PHP... 41 4.2 Como obter o software PHP... 43 4.3 Instalação em sistemas Windows,,... 44 4.3.1 Instalação do PHP... 45 4.3.2 Apache web server 1.3.x... 47 FCA - EDITORA DE INFORMÁTICA I
Programação com PHP 4.3 4.3.3 OmniHTTPd Pro 2.0... 47 4.3.4 Microsoft IIS (4.x e 5) e PWS 4 (Personal Web Server)... 49 4.3.4.1 Windows e PWS 4... 49 4.3.4.2 Windows NT/2000/XP and IIS 4/5... 50 4.4 Instalação em sistemas LINUX... 53 4.4.1 Apache Web Server 1.3.x / 2.0... 54 4.5 A configuração do PHP... 55 4.5.1 O ficheiro de configuração PHP.INI... 55 4.5.2 Directivas gerais de configuração... 79 4.5.2.1 auto_append_file texto... 79 4.5.2.2 auto_prepend_file texto... 80 4.5.2.3 display_errors lógico... 80 4.5.2.4 doc_root texto... 80 4.5.2.5 error_log texto... 80 4.5.2.6 error_reporting número... 80 4.5.2.7 open_basedir texto... 81 4.5.2.8 gpc_order texto... 81 4.5.2.9 ignore_user_abort texto... 81 4.5.2.10 include_path texto... 81 4.5.2.11 max_execution_time número... 81 4.5.2.12 memory_limit número... 81 4.5.2.13 short_open_tag lógico... 81 4.5.2.14 track_errors lógico... 82 4.5.2.15 track_vars lógico... 82 4.5.2.16 upload_tmp_dir texto... 82 4.5.2.17 user_dir texto... 82 4.5.3 Directivas de configuração do e-mail... 82 4.5.3.1 SMTP texto... 82 4.5.3.2 sendmail_from texto... 82 4.5.3.3 sendmail_path texto... 82 4.5.4 Directivas de configuração em modo seguro... 83 4.5.4.1 safe_mode lógico... 83 4.5.4.2 safe_mode_exec_dir texto... 83 4.5.5 Outras directivas de configuração... 83 4.6 Verificar a actual instalação e configuração... 83 5 A estrutura e sintaxe do PHP... 91 5.1 Semelhanças com outras linguagens... 91 5.2 Introduzir o código PHP no HTML... 91 5.3 Separação de instruções... 93 II
Índice 5.4 Utilização de comentários... 93 5.5 Tipos de dados... 94 5.5.1 Números inteiros... 94 5.5.2 Números de vírgula flutuante... 95 5.5.3 Cadeias de caracteres (Strings)... 95 5.5.3.1 Conversão de strings... 96 5.5.4 Arrays... 96 5.5.4.1 Arrays de uma só dimensão... 97 5.5.4.2 Arrays multidimensionais... 97 5.5.5 Classes e Objectos (programação orientada por objectos)... 98 5.5.5.1 Inicialização de objectos... 98 5.6 Variáveis... 98 5.6.1 Escopo das variáveis... 98 5.6.2 Nomes de variáveis dinâmicas... 100 5.6.3 Variáveis Predefinidas (a partir da versão 4.1.0 do PHP )... 101 5.6.4 Variáveis externas ao PHP... 103 5.6.4.1 Formulários HTML (através de POST e GET)... 103 5.6.5 Variáveis através de cookies... 104 5.6.6 Variáveis de ambiente... 105 5.7 Constantes... 105 5.8 Operadores... 106 5.8.1 Operadores aritméticos... 106 5.8.2 Operadores de cadeias de caracteres... 107 5.8.3 Operadores de atribuição... 107 5.8.4 Operadores de operações com bits... 107 5.8.5 Operadores Lógicos... 108 5.8.6 Operadores de comparação... 108 5.8.7 Precedência dos operadores... 109 5.9 Estruturas de Controlo... 110 5.9.1 if... 110 5.9.2 else... 111 5.9.3 elseif... 112 5.9.4 while... 113 5.9.5 do while... 114 5.9.6 for... 114 5.9.7 break... 115 5.9.8 continue... 116 5.9.9 switch... 116 5.9.10 require... 117 5.9.11 include... 117 FCA - EDITORA DE INFORMÁTICA III
Programação com PHP 4.3 5.9.12 require_once e include_once... 117 5.9.13 class... 118 5.10 Funções... 120 5.10.1 Funções definidas pelo utilizador... 120 5.10.2 Retorno de valores... 120 5.10.3 Argumentos de funções... 121 5.10.4 Passagem de argumentos por referência... 121 5.10.5 Valor por defeito de argumentos... 122 6 Funcionalidades Básicas do PHP... 123 6.1 Algumas funcionalidades do PHP... 123 6.2 Primeiros exemplos... 124 6.3 Imprimir dados no ecrã... 128 6.3.1 A função echo()... 128 6.3.2 A função print()... 129 6.3.3 A função printf()... 129 6.4 Conclusão... 130 7 O PHP e os formulários em HTML... 131 7.1 Introdução... 131 7.2 Usar o PHP para ler valores de um formulário... 131 7.2.1 Formulários simples... 132 7.2.1.1 Imprimir o formulário... 133 7.2.1.2 O processamento do formulário... 134 7.2.1.3 Juntar ambas as partes... 135 7.2.2 Mais um exemplo simples... 138 7.2.3 Um formulário com páginas múltiplas... 141 8 O PHP e as bases de dados... 155 8.1 Introdução... 155 8.2 Interactividade das aplicações web... 155 8.3 MySQL breve introdução... 156 8.4 Utilitários de administração do MySQL... 163 8.5 Ligação a bases de dados em PHP... 169 8.5.1 Principais funções com suporte ao MySQL... 169 8.5.2 Funções PHP de ligação a bases de dados MySQL... 170 8.6 Aplicação de gestão de contactos... 176 8.6.1 Selecção e visualização de registos... 177 8.6.2 Adição de registos... 179 IV
Índice 8.6.3 Edição de registo... 182 8.6.4 Eliminação de registo... 186 8.6.5 Definição da condição de selecção... 190 8.6.5.1 Navegação entre páginas contendo registos... 198 8.6.6 Envio de e-mails e realização de uploads de ficheiros... 203 8.6.6.1 Envio de e-mail... 204 8.6.6.2 Upload de ficheiros e armazenamento em bases de dados... 208 8.6.7 Redireccionamento de páginas... 214 8.7 Autenticação de utilizadores... 216 8.8 Ligação a bases de dados em PHP via ODBC... 225 8.8.1 Funções PHP para ligação a bases de dados via ODBC... 225 8.8.2 Exemplo de aplicação das funções PHP-ODBC... 227 8.9 Interfaces de ligação a bases de dados... 234 8.9.1 Biblioteca ADOdb... 237 9 O PHP e o correio electrónico... 243 9.1 Introdução... 243 9.2 Alguns detalhes sobre o correio electrónico... 244 9.3 Envio de correio electrónico... 245 9.3.1 Programa para enviar correio electrónico... 246 9.3.2 Classe para enviar correio electrónico simples... 250 9.3.3 Classe para enviar correio electrónico composto... 254 9.3.4 Outra forma de enviar correio electrónico no PHP... 264 9.4 Formas de validação de endereços de correio electrónico... 265 9.4.1 Validação simples... 265 9.4.2 Validação complexa... 266 10 Autenticação de utilizadores com PHP... 272 10.1 Introdução... 272 10.2 Autenticação HTTP... 273 10.3 Autenticação com PHP... 274 10.3.1 Validação com ficheiro texto... 278 10.3.2 Validação baseada no.htaccess... 279 10.3.3 Validação com bases de dados... 282 10.4 Vantagens da autenticação com PHP... 285 11 Datas e horas em PHP... 286 11.1 Introdução... 286 11.2 Alguns exemplos úteis de utilização... 291 FCA - EDITORA DE INFORMÁTICA V
Programação com PHP 4.3 11.2.1 Tempo decorrido... 291 11.2.2 Datas em português... 296 12 O PHP e os cookies... 300 12.1 Os cookies e a WWW... 300 13 Criação de gráficos utilizando o PHP... 306 13.1 Os gráficos e o PHP... 306 13.2 Criação dinâmica de gráficos... 306 13.2.1 Gráficos simples quadrados e rectângulos... 307 13.2.2 Gráficos simples círculos... 311 13.2.3 Utilização de texto em gráficos... 314 13.2.4 Biblioteca de gráficos de barras... 317 13.2.5 Criação de imagens a partir de outras... 322 14 A gestão de sessões com o PHP... 327 14.1 A importância da gestão de sessões... 327 14.2 A utilidade das sessões... 328 14.3 Informação complementar... 329 14.4 A configuração das sessões... 329 14.5 Propagação de identificadores de sessão... 330 14.6 Funções para gestão de sessões em PHP... 331 14.7 Inicialização de sessões... 332 14.8 Destruição de sessões... 332 14.9 Nome de sessões... 332 14.10 Informação acerca da path de sessões... 333 14.11 Identificação de sessões... 333 14.12 Associação de dados a uma sessão... 333 14.13 Desassociação de dados a uma sessão... 333 14.14 Verificação de informação de sessão... 333 14.15 Codificação de informação de sessões... 334 14.16 Descodificação de informação de sessões... 334 14.17 Exemplos da utilização da gestão de sessões... 334 14.17.1 Registo de variáveis... 334 14.17.2 Contador de acessos... 335 14.17.3 Cores persistentes... 336 15 O PHP e o sistema de ficheiros... 343 15.1 Manipulação do sistema de ficheiros... 343 VI
Índice 15.2 Utilização de ficheiros no PHP... 343 15.3 Testes sobre os ficheiros... 346 15.4 Navegação nos ficheiros... 346 15.5 A função file()... 353 15.6 A função fpassthru()... 354 15.7 Copiar, apagar e renomear ficheiros... 357 15.8 Trabalhar com directorias... 359 15.9 Upload de ficheiros... 362 15.10 Validação de ficheiros de upload... 365 16 O PHP e a execução de programas externos... 368 16.1 Execução externa de programas... 368 16.2 Funções PHP de execução de programas externos... 368 16.2.1 exec... 369 16.2.2 system... 369 16.3 Exemplos de utilização... 370 17 O PHP e o XML... 376 17.1 XML e a WWW... 376 17.2 XML... 376 17.3 Documentos XML... 378 17.4 DTD Document Type Definitions... 380 17.5 Interpretadores de XML... 382 17.6 Tipos de interpretadores XML... 382 17.7 Integração do interpretador XML Expat... 382 17.8 Funções do PHP para XML... 382 17.9 xml_parser_create... 384 17.10 xml_set_object... 385 17.11 xml_set_element_handler... 385 17.12 xml_set_character_data_handler... 387 17.13 xml_parse... 388 17.14 xml_get_error_code... 388 17.15 xml_error_string... 389 17.16 xml_get_current_line_number... 389 17.17 xml_parser_free... 389 17.18 PHP e XML em funcionamento... 389 18 Desenvolvimento de aplicações WAP com o PHP... 398 18.1 Introdução... 398 FCA - EDITORA DE INFORMÁTICA VII
Programação com PHP 4.3 18.2 Arquitectura PHP-WML... 399 18.3 A linguagem WML... 400 18.3.1 Exemplo de uma aplicação WML... 400 18.4 PHP nos documentos de WML... 404 18.4.1 Enviar correio electrónico através do dispositivos WAP... 409 18.4.2 Listar dados de uma base de dados via WAP... 411 19 Zend e a tecnologia PHP... 415 19.1 Introdução... 415 19.2 Zend Produtos e serviços... 416 19.2.1 Zend Engine... 416 19.2.2 Zend Performance suite... 417 19.2.2.1 Vantagens... 417 19.2.2.2 Requisitos... 418 19.2.3 Zend Encoder... 418 19.2.3.1 Vantagens:... 419 19.2.3.2 Requisitos v3.5:... 419 19.2.4 Zend Studio... 420 19.2.4.1 Como funciona o Studio... 420 19.2.4.2 Vantagens:... 421 19.2.4.3 Requisitos... 422 19.2.4.4 Concorrentes... 422 19.2.5 Zend WinEnabler... 425 19.2.5.1 Como funciona o Zend WinEnabler... 425 19.2.5.2 Requisitos... 425 19.2.6 Zend Support Online... 425 19.3 Zend Technologies... 426 20 Recursos PHP na Internet... 427 20.1 O PHP na WWW... 427 20.2 Recursos PHP na WWW... 427 20.2.1 Php.net... 428 20.2.2 Weberdev.com... 429 20.2.3 PHPBuilder... 430 20.2.4 Developer Shed... 431 20.2.5 PHP Code Exchange... 433 20.2.6 The PHP resource Index... 434 20.2.7 PHP Classes Repository... 435 20.2.8 Hotscripts... 436 VIII
Índice 20.3 Grupos de discussão e /ou canais de IRC... 437 20.3.1 Canal #php no IRC... 437 20.3.2 Listas de distribuição... 438 20.3.3 Grupos de discussão... 439 20.3.4 Lista de perguntas mais frequentes (FAQ)... 440 20.3.5 Lista de problemas e erros (bugs)... 441 21 Desenvolvimento de um site completo na WWW... 443 21.1 Introdução... 443 21.2 O sistema a desenvolver... 444 21.2.1 A infraestrutura técnica do site... 445 21.2.2 A estrutura do site... 445 21.2.3 A base de dados... 446 21.2.4 Concepção da base de dados... 447 21.2.5 Scripts que geram as páginas do site... 451 22 Referências bibliográficas... 486 23 Índice remissivo... 490 FCA - EDITORA DE INFORMÁTICA IX