PHP: CONCEITOS ESSENCIAIS PARA IMPLEMENTAÇÃO DE APLICAÇÕES WEB Leonardo L. Alves A, Fabricio R. Bittencout B FUNCESI Fundação Comunitária de Ensino Superior de Itabira FATEC Faculdade Itabirana de Desenvolvimento das Ciências e Tecnologias Emails: leonardo@lacerda.eti.br, fabricio.roulin@funcesi.br Resumo Este trabalho objetiva proporcionar aos graduandos do curso de Sistemas de Informação o conhecimento necessário para otimizar pesquisas e aprendizado sobre o desenvolvimento de aplicações web, através da linguagem de programação PHP, a qual se caracteriza como a alternativa open-source dentre as linguagens interpretadas. São apresentados a estrutura de um programa PHP e os tipos de dados suportados pela linguagem e discutidos os principais operadores e estruturas de controle. É explicado ainda o funcionamento de um servidor www e como se pode programar suas respostas através do desenvolvimento de aplicações remotas embutidas em arquivos HTML. 1.Introdução Em conseqüência da expansão da Internet, interconexão entre diferentes ambientes de redes e reaproveitamento de máquinas e sistemas operacionais antigos, a arquitetura web tem adquirido grande relevância e criado demandas e desafios para o desenvolvimento de programas em Internet e intranets das corporações. As intranets, por sua vez, possuem conceitos idênticos aos da Internet, se utilizando de ferramentas e protocolos de comunicação similares. O seu escopo, porém, diferentemente do que ocorre na Internet, é permitir a troca de dados apenas entre computadores de uma mesma rede local, normalmente, mesmo que esteja ligada a rede pública de computadores, a Internet [6]. A camada multimídia da Internet é a WWW World Wide Web ou simplesmente Web, a qual é fornecida pelo protocolo HTTP Hypertext Transfer Protocol ou Protocolo de Transferência de Hipertexto e permite a troca de documentos, imagens e outros recursos web de forma transparente em relação ao computador-servidor [1]. Um recurso web é acessado por um programa-cliente, isto é, utilizado pelo usuário. O programa-cliente, normalmente conhecido como navegador ou browser (folheador), acessa os recursos através de um esquema de endereçamento uniforme conhecido como URL Uniform Resource Locator no formato protocolo://endereço_ip:porta/diretorios/arquivo [11]. A Bacharelando em Sistemas de Informação pela FATEC/Funcesi. B Mestrando pelo PPGEE - Programa de Pós Graduação em Engenharia Elétrica da PUC-MG, Professor da FATEC e FACCI na FUNCESI.
O servidor é responsável por servir os recursos web e o faz simplesmente enviando os arquivos disponíveis ao programa-cliente, logo que recebe uma requisição, assim como aponta a figura 1.1. Existem porém duas classes de aplicações web. A primeira delas chamada de client-side, ou local, sendo executada no computador-cliente, responsável pela requisição de um recurso web. Na figura 1.1 observa-se um processo client-side sendo executado sem qualquer conexão com sistemas computacionais externos. Figura 1.1: Programa client-side A segunda classe de aplicações web são executadas pelo servidor para o qual foi realizada uma requisição de recurso www. Nesse caso, o recurso é denominado recurso-dinâmico, e o servidor é totalmente responsável pelo processamento de dados e o redirecionamento da saída para o computador-cliente, o qual por sua vez, conforme demonstrado na figura 1.2, não tem acesso aos processos e dados de origem. Figura 1.2: Programa server-side Inúmeros ambientes computacionais foram criados para possibilitar o desenvolvimento de programas dessa segunda classe ou server-side, normalmente em linguagens de programação existentes e interpretadas no momento da requisição. Dentre os mais populares foram
consideradas o VB-Script e ASP.NET, linguagens de programação restritas à arquitetura Microsoft e normalmente implementadas em Visual Basic ou C# [9]; Java Servlets Pages (JSP), criada pela Sun, baseada na linguagem Java e independente de sistema operacional; e PHP, a qual é a única a contar com um interpretador open-source gratuito e com códigofonte aberto suportado por variados sistemas operacionais e servidores http. O PHP, objeto deste trabalho, foi um conjunto de aplicações desenvolvidas em linguagem Perl, por Rasmus Lerdof em 1995, com o simples propósito de criar interações entre usuários de Internet e sites nos quais era instalado. Somente após 1997, através da contribuição de outras pessoas ao projeto, PHP tornou-se uma linguagem de programação, chegando à versão 4 em 2000 com todos os atributos abordados nesse documento, e presente em mais de 20% dos domínios públicos na Internet [8]. O conhecimento prévio da linguagem C++ é desejável, mas o presente artigo deve servir como introdução à PHP mesmo àqueles que não saibam programar nessa linguagem. Este tutorial está organizado sobre a seguinte estrutura: no ítem 2 é exposto o que pode ser feito em PHP, os principais formatos de saída de dados e o suporte a protocolos de rede e extensões. No ítem 3 é apresentada a estrutura de um script e os recursos essenciais para a construção de aplicações web, como os tipos de dados usados, conversões de tipos, uso de variáveis, principais operadores e estruturas de controle, criação de funções e entrada e saída de dados. 2.O que pode ser feito em PHP Por ser uma linguagem interpretada de script no servidor www, criada exclusivamente para a Internet, PHP tem atributos que flexibilizam o desenvolvimento de páginas dinâmicas, com saída de dados em formatos como página de marcação HTML, animação em Flash, imagens, textos formatados em PDF e RTF, geradas dinamicamente através de informações recebidas do computador-cliente, armazenados em disco ou existentes em um banco-de-dados. Figura 2.1: Arquitetura PHP 4
Entre a aplicação e o programa-cliente, um navegador normalmente, além da tradicional troca de informações por meio de formulários HTML, há também o envio e recebimento de cookies C e o recebimento de parâmetros na própria URL em tempo de requisição [11]. Na figura 2.1 observamos a existência de cinco camadas em um servidor de scripts web PHP. A primeira, web server, é a responsável por servir recursos web reais diretamente do disco rígido ou virtuais após processamento de um script. A camada SAPI fornece a interface entre o interpretador e o servidor web. A terceira camada, denominada PHP Core, é o núcleo onde são processados os scripts, a qual, ligada à Zend Core, quarta camada, abre processos de extensões através de uma API, a quinta camada, de extensões externas ao PHP e até mesmo ao computador onde está instalado. A integração a sistemas gerenciadores de banco-de-dados (SGBD) é facilitada por rotinas existentes nas bibliotecas padrões do interpretador, executadas na camada Zend Core via API, com suporte a linguagem SQL e suporte especial aos SGBDs Oracle, MySQL, MiniSQL, MSQL, SQL Server, Interbase, entre outros. Adicionalmente, pela organização distribuída e multiplataforma da Internet, o suporte a outros protocolos também é oferecido através da quinta camada, tornando um programa em PHP capaz de se conectar a servidores de envio e recebimento de e-mails, de bate-papo, www, ftp e outros [8]. 3.Estrutura de um programa PHP Um script PHP é um conjunto de uma ou mais instruções seguidas por ; em um ou mais blocos delimitados por, indicando o início, e, o término do bloco. 3.1Um script PHP No exemplo 3.1.1 é apresentado um código PHP inserido em um arquivo HTML. A requisição deste arquivo, o qual obrigatoriamente deve possuir a extensão.php, faz com que o mesmo seja processado pelo interpretador PHP e resulte o recurso HTML do exemplo 3.1.2, enviado ao programa-cliente, como explicado no ítem 2. Exemplo 3.1.1: Script PHP embutido em código HTML (exemplo.php) <html> <body> <h1>conteúdo em HTML</h1> <p>1ª linha<br> 2ª linha<br> </p> <h1>conteúdo em HTML gerado pelo PHP</h1> <p> // Início do PHP // Comentário: C Pequeno arquivo texto armazenado no computador-cliente e acessado remotamente pela aplicação que o gravou.
// De 1 até 2 contados em $num faça o comando em seguida for ($num = 1; $num <= 2; $num++) echo $num. ª linha<br>\n ; /* Comentário: Imprime o valor de $num, o texto ª linha e uma quebra de linha */ // Fim do PHP </p> </body> </html> Os comentários presentes no script podem ter uma linha, quando iniciados por // ou tamanho intedeterminado quando iniciados por /* e finalizados por */. Ambos são úteis para a documentação do código e não são exibidos no recurso web após o processamento. Exemplo 3.1.2: Recurso HTML gerado após o arquivo exemplo.php ser processado Conteúdo em HTML 1ª linha 2ª linha Conteúdo em HTML gerado pelo PHP 1ª linha 2ª linha O resultado presente no exemplo 3.1.2 seria exibido no programa-cliente sem diferença entre o trecho integralmente escrito em HTML e o produto do script processado. 3.2Tipos de dados A linguagem suporta oito tipos primitivos de dados, compostos por quatro tipos básicos: boolean, para true (verdadeiro) ou false (falso); integer ou int, números inteiros; float, número com ponto-flutuante; string, para um ou mais caracteres. Dois tipos compostos:
array, vetor multidimensional abstrato, através do qual se pode construir listas, filas, pilhas, dicionários e outras construções similares; objeto, o qual sempre carrega a instância de um objeto. Dois tipos especiais: resource, existente a partir da versão 4 da linguagem, usada para referenciar recursos externos; null, o qual é atribuido a toda variável apagada, não carregada ou após uma atribuição da constante null. Um nono tipo mixed é usado em declarações de protótipos, determinando que mais de um tipo de retorno é esperado ou mais de um tipo de parâmetro pode ser usado. A tipagem de identificadores em PHP é realizada dinamicamente, sendo possível atribuir qualquer valor a variáveis previamente alocadas, sendo o interpretador PHP responsável pelas alterações, até mesmo em situações de overflow. Apenas valores do tipo string são identificados de forma diferenciada, devendo ser agrupados entre aspas ( ) ou apóstrofos ( ). Transformação de tipos Conceitualmente, há pelo menos duas formas de conversão de variáveis para tipos diferentes. A primeira delas, chamada coerção, é uma conversão de tipo implícita iniciada pelo interpretador [12]. A segunda, chamada cast, consiste em conversões explícitas de tipo solicitadas pelo programador. A coerção livre presente na PHP também dificulta a identificação de erros, mas favorece o trabalho de programação, sendo o programador dispensado de se preocupar com as conversões, conforme demonstrado no exemplo 3.2.1. Exemplo 3.2.1: Coerção livre $a = 2 + 15 palavras ; /* a variável $a terá o valor 17 */ O typecast, como demonstrado no exemplo 3.2.2 e igualmente ao da linguagem C++, é aplicado através da escrita do tipo antes de uma atribuição, forçando a conversão do tipo do valor atribuido.
Exemplo 3.2.2: Typecast $a = 45.3; /* variável $a recebe 45,3 */ $a = (int) $a; /* variável $a recebe 45 */ No exemplo 3.2.2, a variável $a é convertida para o tipo inteiro, mas para o mesmo trabalho, adicionalmente, há uma função chamada settype, a qual poderia ser usada como no exemplo 3.2.3. Exemplo 3.2.3: Função settype settype($a,integer); Identificadores As variáveis, as quais não precisam ser declaradas, são alocadas simplesmente através da atribuição de um valor ao identificador ainda não usado, sempre antecedido pelo símbolo $. As constantes, todavia, possuem um comportamento diferenciado, devendo ser declaradas pela função define, e sendo referenciadas sem o $, assim como no exemplo 3.2.4. Exemplo 3.2.4: Atribuição e uso de constante define( pi,3.1415); /* pi deve estar entre aspas, mas seu valor numérico não */ $circunferencia = 2 * pi * $raio; /* já como constante, pi é usado sem aspas e $ */ 3.3Operadores Em PHP há inúmeros operadores não tradicionais em outras linguagens de programação, como operadores de controle de erro, execução e de fusão de vetores. No presente tutorial serão tratados apenas os operadores com funções mais comuns. Aritméticos As operações de adição, subtração, divisão, multiplicação e módulo são executadas através dos símbolos +, -, /, * e %, respectivamente, como no exemplo 3.3.1. Exemplo 3.3.1: Operadores em expressões aritméticas
$c = $a + $b; /* soma */ $c = $a - $b; /* subtração */ $c = $a / $b; /* quociente real */ $c = $a * $b; /* produto */ $c = $a % $b; /* resto da divisão */ /* alteração de ordem de precedência através dos parênteses A expressão irá somar, multiplicar e encontrar o resto da divisão, nessa ordem. */ $c = ($a + $b) * $d % 4; Relacionais As comparações entre operandos quaisquer são idênticas às possíveis em C++, realizadas pelos operadores >, >=, ==,!=, <=, <; respectivamente maior que, maior ou igual a, igual a, diferente de, menor ou igual a, menor que. O retorno das expressões será sempre TRUE ou diferente de 0 quando verdadeiras, ou FALSE ou 0, quando falsas. Concatenação A cisão de cadeias de caracteres se dá pelo operador. (ponto) ou.= (ponto e igual), como no exemplo 3.3.2. Exemplo 3.3.2: Concatenação de strings $c = Linguagem. PHP ; /* retorna Linguagem PHP */ $c = Funcesi ; /* Atribui Funcesi à variável $c */ $c.= /Itabira ; /* retorna Funcesi/Itabira e atribui à variável $c */ Atribuição A atribuição é realizada a identificadores com o operador =, podendo ocorrer em qualquer ponto do programa ou mesmo dentro de outras estruturas. Exemplo 3.3.3: Atribuição simples
$c = 4; /* atribui o inteiro 4 */ $c = 2.5; /* atribui o real 2,5 */ $c = texto ; /* atribui a string texto */ Em função de as variáveis serem tipadas dinamicamente, todas as atribuições do exemplo 3.3.3 são possíveis, para o mesmo identificador. Outros operadores de atribuição são +=, -=, *=, /=, %=,.=, para atribuir recursivamente, ou seja, atribuir ao identificador esquerdo o seu conteúdo atual somando com o próximo, subtraindo, multiplicando, dividindo por, obtendo o resto da divisão por, ou concatenando, segundo o operador que anteceder o símbolo =. Algumas dessas operações são mostradas no exemplo 3.3.4. Exemplo 3.3.4: Atribuições combinadas $cont += 1; // Corresponde a $cont = $cont + 1 $multiplo *= 3; // Corresponde a $multiplo = $multiplo * 3 Lógicos Os operadores lógicos são and, &&, or,, xor e!, exibidos no exemplo 3.3.5. Exemplo 3.3.5: Operadores lógicos $a and $b /* verdadeiro se ambos, $a e $b, são verdadeiros */ $a && $b /* idem */ $a or $b /* verdadeiro se $a ou $b é verdadeiro, ou se ambos são verdadeiros */ $a $b /* idem */ $a xor $b /* verdadeiro se $a ou $b é verdadeiro, mas não os dois são verdadeiros */!$a /* verdadeiro quando $a não for verdadeiro */ Incremento e decremento Os populares operadores de incremento e decremento da linguagem C, ++ e --, também foram herdados pelo PHP, com a mesma sintaxe, resultando em um incremento de 1 ou decremento de 1, com ordem de execução priorizada quando pré-fixados. O exemplo 3.3.6 apresenta demonstrações.
Exemplo 3.3.6: Incremento e decremento 0 $a = $cont++; /* $a recebe o valor de $cont, e $cont é incrementada */ $a = ++$cont; /* $cont é incrementada e então $a recebe o novo valor de $cont */ $b = $tarefa--; /* $b recebe o valor de $tarefa, e $tarefa é decrementada */ $b = --$tarefa; /* $tarefa é decrementada e então $b recebe o novo valor de $tarefa */ 3.4Estruturas de controle As estruturas de controle foram mantidas inalteradas em relação às do C/C++, as quais respeitam todas as regras e exceções do padrão ANSI C. Seleção Duas estruturas de seleção são oferecidas. O tradicional if e a estrutura switch-case. Exemplo 3.4.1: Estrutura condicional if if ($i == 0) print 'Minha variável é igual a zero'; elseif ($i == 1) print 'Minha variável é igual a um'; elseif ($i == 2) print 'Minha variável é igual a dois'; else { print 'Minha variável é diferente de '; /* bloco demarcado */ print '0, 1 e 2'; /* por chaves { e } */ } Apresentada no exemplo 3.4.1, a estrutura if sempre avalia sua expressão ($i == 1, por exemplo) como booleano. Em caso de verdadeiro, as instruções seguintes são executadas; caso falso, instrução elseif ou else são procuradas. É interessante notar, entretanto, que falso em PHP pode ser o booleano false, o inteiro 0, o real 0.0, uma string vazia ou 0, um null, uma variável indefinida ou um array ou objeto sem elementos. Qualquer valor diferente dos citados, inclusive o booleano true, equivale ao estado verdadeiro [8]. A estrutura switch-case, com a mesma função, possui sintaxe como no exemplo 3.4.2. Exemplo 3.4.2: Estrutura condicional switch
switch ($i) { case 0: print 'Minha variável é igual a zero'; break; case 1: print 'Minha variável é igual a um'; break; case 2: print 'Minha variável é igual a dois'; break; else: print 'Minha variável é diferente de '; print '0, 1 e 2'; break; /* break força o término do bloco switch */ } 1 Repetição Há quatro estruturas de repetição mais populares em PHP: while, do-while, for e foreach. O while é um laço de repetição lógico, o qual é executado enquanto sua condição é verdadeira, como é demonstrado no exemplo 3.4.3. Exemplo 3.4.3: Exemplo de uma repetição while $i = 1; /* $i é inicializado com valor 1 */ while ($i <=10) /* enquanto $i for menor ou igual a 10 faça */ { print Linha $i++\n ; /* imprima o valor de $i. Incremente em seguida. */ echo <br> ; } /* imprime uma quebra de linha em HTML */ O do-while, diferentemente da estrutura while, executa pelo menos uma iteração, obrigatoriamente, realizando o teste pela primeira vez ao fim da mesma, e repetindo enquanto a condição for verdadeira. O exemplo 3.4.4 demonstra sua construção. Exemplo 3.4.4: Exemplo de uma repetição do... while $i = 0; // $i recebe o valor zero do { // inicia o bloco do {... } while print Linha ++$i\n ; // incrementa $i e imprime o texto echo <br> ; // imprime uma quebra de linha em HTML } while ($i < 10); // faz outra iteração enquanto for verdadeiro O for, por sua vez, possui três parâmetros opcionais: um de inicialização, outro para a condição e o terceiro para execução antes de cada nova iteração. O código é ilustrado no exemplo 3.4.5.
Exemplo 3.4.5: Exemplo de uma repetição for 2 /* $i = 1 é executada no início; $i <= 10 é avaliada no início de cada iteração; $i++ é avaliada ao fim de cada iteração */ for ($i = 1; $i <= 10; $i++) { print Linha $i\n ; /* imprime o texto Linha, a variável $i e quebra a linha */ echo <br> ; /* imprime quebra de linha em HTML */ } A repetição foreach, finalmente, é usada exclusivamente para o trabalho com vetores, objetivando copiar chaves e valores de uma posição do vetor, até o seu fim, para outra variável. Este recurso é útil particularmente em PHP quando se tem um vetor de dimensão variável, suportado apenas a partir de sua versão 4 e demonstrado no exemplo 3.4.6. Exemplo 3.4.6: Exemplo de uma repetição foreach $vetor = array (1,7,18,44,99); /* cria e carrega $vetor */ /* copia o primeiro valor de $vetor para $parte */ foreach ($vetor as $parte) { echo Valor: $parte \n ; /* imprime $parte e retorna até o fim de $vetor*/ } 3.5Funções e procedimentos Por recursos na web serem arquivos isolados, muitas vezes é possível criar programas ou páginas dinâmicas simples, isto é, sem o uso de funções ou procedimentos. Entretanto, o suporte a funções é muito útil na formação de bibliotecas e para a passagem segura de parâmetros dentro de um recurso. Funções são declaradas como no exemplo 3.5.1. Exemplo 3.5.1: Declaração de função function nomedafunc($aluno, $disciplina = 'Compiladores') { echo "O aluno ". $aluno. " estuda ". $disciplina; return "valor de retorno"; } Com suporte a parâmetros padronizados, como é o caso do parâmetro $disciplina, ilustrado em 3.5.1, sempre ao final, e dispensa de declaração do tipo do retorno, dada a coerção livre presente na linguagem, seu funcionamento é idêntico ao de funções ou
procedimentos em outras linguagens e o retorno pode ocorrer dentro de estruturas, saídas, parâmetros de outras funções e mesmo em expressões aritméticas, por exemplo. Ainda, por sua ortogonalidade superior à de linguagens de programação tradicionais, qualquer tipo de dado pode ser retornado de uma função, inclusive vetores e registros. 3 3.6Entrada e saída A saída, possível através das funções echo e print, assim como no exemplo 3.1.1, é redirecionada para o recurso virtual acessado pelo programa-cliente, podendo ser som, imagem, animação, filme, texto ou outro formato. A entrada, seja através de formulário, presente em URL ou até mesmo em um cookie, é realizada de maneira transparente pelo interpretador PHP, que a converte em uma variável global, a qual pode ser alterada sem qualquer prejuízo de tempo, nem a possibilidade de causar danos ao programa responsável pela requisição ou envio de dados. A independência entre os mecanismos de entrada e o programa criam condições satisfatórias para um rápido desenvolvimento, causando entretanto possíveis problemas de segurança e privacidade dos dados trocados, o que, aliado à ortogonalidade da linguagem e a coerção livre, garante uma redução considerável no nível de segurança, possibilitando a execução de instruções prejudiciais e causando erros na transferência de dados de tipo incorreto a servidores de banco-de-dados e outras aplicações de mais baixo nível. 4.Conclusão Pela extensão da linguagem de programação PHP, variantes de versão, diferenciais entre suas estruturas e as de outras linguagens de programação populares, é tarefa complexa concluir um estudo sobre suas características. É conclusivo, porém, que o sucesso do PHP se deve a facilidade de escrita, simplificação da implementação do código, alto grau de ortogonalidade, livre coerção o que dispensa o programador dos constantes tratamentos de entradas e saídas e conversão de tipos (texto para numérico, e vice-versa), muito comuns no ambiente web, integração com linguagens de programação e ou formatação, como o próprio HTML, e especialmente o suporte às mídias e aos serviços mais populares na Internet. Os aspectos custo, minimizado pela distribuição gratuita dos pacotes, código-livre e portabilidade entre as principais arquiteturas de servidores web usadas no mundo, influenciam diretamente em sua escolha por desenvolvedores e administradores de páginas. Todavia, preocupante em toda aplicação onde se obtêm informações digitadas diretamente por usuários on-line, o controle das entradas, quebras em programas e abertura a invasões é possível com facilidade quando o desenvolvedor atribui baixa relevância aos testes e avaliações da segurança.
Por ser uma linguagem de programação exclusivamente interpretada, perde em desempenho para as aplicações CGI compiladas em C, as mais populares, porém garantindo maior facilidade de atualização e reutilização de código entre os módulos ou arquivos do programa, quando em processo de execução/interpretação. Mesmo enfretando a concorrência de novas tecnologias, sua popularidade é garantida por desenvolvedores de extensões, bibliotecas e aplicações open-source para o PHP. Além disso, por sua inclusão em pacotes de distribuição do sistema operacional Linux e servidor web Apache, ambos muito populares na Internet e nos quais o PHP possui melhor desempenho e menor dependência de sistemas adicionais, há resistência em adotar outras ferramentas similares e com menor alcance. A participação do interpretador PHP no desenvolvimento de aplicações tem se mostrado vantajosa em inúmeros aspectos, a tornando ferramenta essencial para qualquer servidor http e eficaz para implementação de aplicações web. 4 5.Referências bibliográficas [1]AMOR, Daniel. A revolução do e-business: vivendo e aprendendo em um mundo interconectado. São Paulo: Makron Books, 2000. 606 p. [2]BAKKEN, Stig Sæther. Introduction to PHP. Internet < www. zend. com / zend / art / intro. php>. 17/Abr/2000. [3]BARRETO, Maurício V.S.; et al. Aplicações web com PHP. Internet: <www. vivas. com. br>, Jun/2000. 104 p. [4]BRUFAU, Marc; CASALS, Xavier; MAS, David. Conceptes avançats de sistemes operatius. Distribució d aplicacions mitjançant web. (apunts de l assignatura en format transparència). Departament d Arquitectura de Computadors. 2001. [5]COX JÚNIOR, Fred. Programando para web com PHP/MySQL. Mar/2001. 2. ed. 72 p. [6]GRALLA, Preston. Como funcionam as intranets. Editora Quark, São Paulo, 1996. 206 p. [7]HALL, Marty. Core Servlets and JavaServer Pages. Sun Microsystems Press. Internet: <javaboutique. internet. com / tutorials / JSP>. [8]LERDOF, Rasmus et al. PHP Manual. Internet: <www. php. net / docs. php>, 08/Out/2002. [9]PAULI, Guinther de Bitencourt. ASP.NET com Delphi: criação de web services no Delphi for.net Preview. Revista Clube Delphi. Ed. 37. Ano IV.
[10]REILLY, George V. ASP best practices. Microsoft Corporation. Internet: <support. microsoft. com / support / activeserver / AspBestPractices. ppt>, 06/03/2003. [11]ROSA, César Augusto Salabert. Internet: história, conceitos e serviços. São Paulo: Érica, 1998. [12]SEBESTA, Robert W. Conceitos de Linguagens de Programação. 4. ed. Porto Alegre: Bookman, 2000. 624 p. 5