150 Redes

Fazer download em doc, pdf ou txt
Fazer download em doc, pdf ou txt
Você está na página 1de 69

Redes de computador

Um dos assuntos mais importantes em relação a redes locais é protocolos. São os protocolos
que definem como a rede irá funcionar de verdade, pois são eles que definem como os dados
enviados por programas serão transferidos pela rede. Portanto, para entendermos a fundo
como as redes locais funcionam, devemos dominar com clareza esse assunto.
 
Protocolo é a "linguagem" usada pelos dispositivos de uma rede de modo que eles consigam se
entender, isto é, trocar informações entre si. Para que todos os dispositivos de uma rede
consigam conversar entre si, todos eles deverão estar usando uma mesma linguagem, isto é,
um mesmo protocolo.
 
Uma rede pode usar diversos protocolos, como o TCP/IP, o NetBEUI e o IPX/SPX, entre outros,
mas neste artigo daremos ênfase ao protocolo TCP/IP, que será explicado seu funcionamento
de maneira ampla.
 
Embora cada um destes protocolos funcione de uma forma particular, eles tem algumas
similaridades, que existem porque, na verdade, todos os protocolos tem um mesmo objetivo
que é a transmissão de dados em uma rede.
 
Para entender melhor como os protocolos funcionam, considere as seguintes premissas:

 »  A maioria das transmissões de dados em redes locais é do tipo half-duplex;


 »  Mesmo em redes que utilizem hubs, onde cada micro é conectado à rede usando um cabo
individual, esse componente na verdade funciona apenas como um repetidor, enviando para todas
as máquinas da rede as informações que recebe, ao mesmo tempo;
 »  Se uma transmissão está sendo feita entre dois dispositivos, nenhuma outra transmissão poderá
ser feitas ao mesmo tempo, mesmo que seja entre outros dois componentes diferentes que não
estejam participando da transmissão em curso;
 »  Se um arquivo grande tiver de ser transmitido, os demais dispositivos da rede terão de esperar
muito tempo para começarem a transmitir, pois o arquivo é grande e demora algum tempo para
ser transmitido;
 »  Poderão ocorrer interferências de algum tipo no meio do caminho e o dado pode não chegar
corretamente ao seu destino.

Os protocolos são justamente uma solução para todos estes problemas. Primeiro, o protocolo
pega os dados que devem ser transmitidos na rede e divide ele em pequenos pedaços de
tamanho fixo chamados pacotes ou quadros. Isto significa que um arquivo não é transmitido na
rede de uma só vez. Dentro de cada pacote há uma informação de endereçamento que informa
a origem e o destino do pacote. As placas de rede dos computadores possuem um endereço
fixo, que é gravado em hardware. Dessa forma, o computador de destino sabe que o pacote
atualmente transmitido é para ele, porque há o endereço de sua placa de rede no cabeçalho de
destino do pacote e da mesma forma, os demais computadores sabem que aquele pacote não é
para eles.
 
O uso de pacotes de dados otimiza enormemente o uso da rede, já que, em vez de uma única
transmissão de um dado grande, existirão várias transmissões de dados menores. Com isso,
estatisticamente haverá uma maior probabilidade de um outro dispositivo que queira transmitir
um dado encontrar espaço para iniciar uma nova transmissão. Dessa forma é possível que
vários dispositivos se comuniquem "ao mesmo tempo" em uma rede. Fisicamente, essas
transmissões não são efetuadas simultaneamente, mas intercalando os vários pacotes de
dados. A velocidade de transmissão de dados em uma rede é altamente dependente do número
de transmissões simultâneas efetuadas.
 
Finalizando, a placa de rede, ao colocar um pacote de dados no cabo da rede, cria uma conta
chamada checksum ou CRC (Cyclical Redudancy Check). Essa conta consiste em somar todos
os bytes presentes no pacote de dados e enviar o resultado dentro do próprio pacote. A placa
de rede do dispositivo receptor irá refazer esta conta e verificar se o resultado calculado
corresponde ao valor enviado pelo dispositivo transmissor. Se os valores forem iguais, significa
que o pacote chegou íntegro ao seu destino. Caso contrário, significa que houve algo de errado
na transmissão (uma interferência no cabo, por exemplo) e os dados recebidos são diferentes
dos originalmente enviados, ou seja, os dados chegaram corrompidos ao destino. Neste caso, o
dispositivo receptor pede ao transmissor uma retransmissão do pacote defeituoso. Essa é outra
vantagem de se trabalhar com pequenos pacotes em vez de transmitir diretamente o arquivo.

 Figura 1

Modelo OSI
 
Quando as redes de computadores surgiram, as soluções eram, em sua maioria, proprietárias,
isto é, uma determinada tecnologia só era suportada por seu fabricante. Não havia a
possibilidade de se misturar soluções de fabricantes diferentes. Dessa forma, um mesmo
fabricante era responsável por construir praticamente tudo na rede.
 
"Para facilitar a interconexão de sistemas de computadores, a ISO (International Standards
Organization) desenvolveu um modelo de referência chamado OSI (Open Systems
Interconnection), para que os fabricantes pudessem criar seus protocolos a partir desse
modelo."
 
Interessante notar que a maioria dos protocolos existentes, principalmente o TCP/IP, que como
dito anteriormente, será explicado de maneira mais ampla e completa, não segue esse modelo
de referência ao pé da letra, só corresponde a partes do padrão OSI. Todavia, o estudo deste
modelo é extremamente didático, pois através dele há como entender como deveria ser um
"Protocolo ideal", bem como facilita muito a comparação do funcionamento de protocolos
criados por diferentes fabricantes.
 
O modelo de protocolos OSI é um modelo de sete camadas, apresentados na figura abaixo:

 Figura 2

Na transmissão de um dado, cada camada pega as informações passadas pela camada


superior, acrescenta informações pelas quais ela seja responsável e passa os dados para a
camada imediatamente inferior, como representado na figura 05. Esse processo é conhecido
como encapsulamento. Na camada 4, Transporte, o dado enviado pelo aplicativo é dividido em
pacotes. Na camada 2, Link de Dados, o pacote é dividido em quadros. Na recepção de um
dado, o processo é inverso.
 
Um usuário que pede para o seu programa de e-mail baixar seus e-mails, na verdade está
fazendo com que o seu programa de e-mail inicie uma transmissão de dados com a camada 7 -
Aplicação - do protocolo usado, pedindo para baixar os e-mails do servidor de e-mails. Essa
camada processa esse pedido, acrescenta informações de sua competência, e passa os dados
para a camada imediatamente inferior, a camada 6 (Apresentação). Esse processo continua até
a camada 1 (Física) enviar o quadro de dados para o cabeamento da rede, quando, então,
atingirá o dispositivo receptor, que fará o processo inverso, até a sua aplicação - no nosso
exemplo, um programa servidor de e-mail.
 
A comunicação estudada na figura 3 é a comunicação real, ou seja, como funciona a
transmissão de um dado através de uma rede. Na prática, acabamos simplificando e falando
que uma determinada camada do transmissor comunica-se diretamente com a mesma camada
do dispositivo receptor. Por exemplo, a camada 4, Transporte, do dispositivo transmissor
comunica-se diretamente com a camada 4 do dispositivo receptor e simplesmente ignoramos as
comunicações efetuadas pelas camadas inferiores existentes, e assim por diante.
 
Essa comunicação virtual, ilustrada na figura 4, é possível porque cada camada, durante a
criação do pacote que será enviado através da rede, acrescentou seu próprio cabeçalho, como
ilustrado na figura 3.

 Figura 3  Funcionamento da comunicação entre as


camadas OSI.

Por exemplo, na prática simplesmente falamos que um programa cliente de e-mail está
requisitando dados de um programa servidor de e-mail, e não nos preocupamos muito como
isto é feito. O mesmo ocorre na comunicação virtual do modelo OSI. Quando analisamos a
comunicação de uma camada do transmissor com a mesma camada no receptor, normalmente
não estamos nos preocupando (ou não precisamos saber) como está ocorrendo a comunicação
nas camadas inferiores àquela estudada.
 
A maioria dos protocolos, em especial o TCP/IP, também trabalha com o conceito de camadas,
porém essas camadas não necessariamente possuem o mesmo nome e função das
apresentadas no modelo OSI. Muitas vezes, para cada uma dessas camadas há um protocolo
envolvido. Dessa forma, muitos protocolos são, na verdade, um conjunto de protocolos, cada
um com seu papel específico em sua estrutura de camadas.
 Figura 4  Comunicação virtual do modelo OSI.

As camadas do modelo OSI podem ser divididas em três grupos: aplicação, transporte e rede,
como conferimos na figura 5. As camadas de rede se preocupam com a transmissão e recepção
dos dados através da rede e, portanto, são camadas de baixo nível. A camada de transporte é
responsável por pegar os dados recebidos pela rede e repassá-los para as camadas de
aplicação de uma forma compreensível, isto é, ele pega os pacotes de dados e transforma-os
em dados quase prontos para serem usados pela aplicação. As camadas de aplicação, que são
camadas de alto nível, colocam o dado recebido em um padrão que seja compreensível pelo
programa (aplicação) que fará uso deste dado.

 Figura
Grupos das camadas do modelo OSI.

Pacotes e quadros, até então, eram usados como sinônimos, mas estes termos se referem a
duas coisas distintas.
 
Um quadro é um conjunto de dados enviado através da rede, de forma mais "bruta" ou, melhor
dizendo, de mais baixo nível. Dentro de um quadro encontramos informações de
endereçamento físico, como, por exemplo, o endereço real de uma placa de rede. Logo, um
quadro está associado às camadas mais baixas (1 e 2) do modelo OSI.
 
Um pacote de dados de refere a um conjunto de dados manipulados nas camadas (3 e 4) do
modelo OSI. No pacote há informações de endereçamento virtual. Por exemplo, a camada 4
cria um pacote de dados para ser enviado pela rede e a camada 2 divide esse pacote em vários
quadros que serão efetivamente enviados através do cabo da rede. Um pacote, portanto,
contém a informação proveniente de vários quadros.
 
Para dar um exemplo real e elucidar de uma vez essa diferença, em uma rede usando o
protocolo TCP/IP, a camada IP adiciona informações de endereçamento de um pacote (número
de endereço IP da máquina destino), que é um endereçamento virtual. Já a camada de controle
de acesso ao meio (MAC) - que corresponde a camada 2 do modelo OSI - transformará esse
pacote em um ou mais quadros e esses quadros terão o endereço da placa de rede de destino
(endereço real, físico) que corresponda ao número IP fornecido. Este protocolo será explicado
de maneira mais ampla, deixando assim essa idéia mais clara e lúcida.
 
Serão explicadas agora, cada uma das camadas do modelo OSI e suas funções. Explicações
definidas usando a transmissão de um dado do computador A para o computador B e o
processo de recepção é o inverso do descrito.

1) Camada 7 - Aplicação
A camada de aplicação faz a interface entre o protocolo de comunicação e o aplicativo que pediu ou
receberá a informação através da rede. Por exemplo, ao solicitar a recepção de e-mails através do
 
aplicativo de e-mail, este entrará em contato com a camada de Aplicação do protocolo de rede
efetuando tal solicitação.
2) Camada 6 - Apresentação
A camada de Apresentação, também chamada camada de Tradução, converte o formato do dado
recebido pela camada de Aplicação em um formato comum a ser usado na transmissão desse dado,
ou seja, um formato entendido pelo protocolo usado. Pode ter outros usos, como compressão e
criptografia.
 
A compressão de dados pega os dados recebidos da camada 7 e os comprime e a camada 6 do
 
dispositivo receptor fica responsável por descompactar esses dados. A transmissão dos dados torna-
se mais rápida devido a existência de um número menor de dados a serem transmitidos, pois, os
dados recebidos da camada 7 foram comprimidos e enviados a camada 5.
 
Para aumentar a segurança, pode-se usar criptografia neste nível, sendo que os dados só serão
decodificados na camada 6 do dispositivo receptor.
3) Camada 5 - Sessão
A camada de Sessão permite que duas aplicações em computadores diferentes estabeleçam uma
sessão de comunicação. Nesta sessão, essas aplicações definem como será feita a transmissão de
  dados e coloca marcações nos dados que estão sendo transmitidos. Se por ventura a rede falhar, os
computadores reiniciam a transmissão dos dados a partir da última marcação recebida pelo
computador receptor.
4) Camada 4 - Transporte
A camada de Transporte é responsável por pegar os dados enviados pela camada de Sessão e dividi-
los em pacotes que serão transmitidos pela rede, ou melhor dizendo, repassados para a camada de
Rede. No receptor, a camada de Transporte é responsável por pegar os pacotes recebidos da camada
de Rede e remontar o dado original para enviá-lo à camada de Sessão.
 
Isso inclui controle de fluxo (colocar os pacotes recebido em ordem, caso eles tenham chego fora de
ordem) e correção de erros, tipicamente enviando para o transmissor uma informação de
 
recebimento (acknowledge), informando que o pacote foi recebido com sucesso.
 
A camada de Transporte separa as camadas de nível de aplicação (camadas 5 a 7) das camadas de
nível físico (camadas de 1 a 3). As camadas de 1 a 3 estão preocupadas com a maneira com que os
dados serão transmitidos pela rede. Já as camadas de 5 a 7 estão preocupados com os dados
contidos nos pacotes de dados, para serem enviados ou recebidos para a aplicação responsável pelos
dados. A camada 4, Transporte, faz a ligação entre esses dois grupos.
5) Camada 3 - Rede
A camada de Rede é responsável pelo endereçamento dos pacotes, convertendo endereços lógicos
em endereços físicos, de forma que os pacotes consigam chegar corretamente ao destino. Essa
camada também determina a rota que os pacotes irão seguir para atingir o destino, baseada em
  fatores como condições de tráfego da rede e prioridades.
 
Essa camada é usada quando a rede possui mais de um segmento e, com isso, há mais de um
caminho para um pacote de dados trafegar da origem ao destino.
6) Camada 2 - Link de dados
  A camada de Link de Dados (também chamada de camada de Enlace) pega os pacotes de dados
recebidos da camada de Rede e os transforma em quadros que serão trafegados pela rede,
adicionando informações como o endereçamento da placa de rede de origem, o endereçamento da
placa de rede de destino, dados de controle, os dados em si e o CRC. A estrutura do pacote de dados
criadas por esta camada é a representada na figura 3.
 
O quadro criado pela camada Link de Dados é enviado para a camada Física, que converte esse
quadro em sinais elétricos para serem enviados através do cabo de rede.
 
Quando o receptor recebe um quadro, a sua camada Link de Dados confere se o dado chegou
íntegro, refazendo o CRC. Se os dados estão corretos, ele envia uma confirmação de recebimento
(chamada de acknowledge ou ack). Caso essa confirmação não seja recebida, a camada Link de
Dados do transmissor reenvia o quadro, já que ele não chegou até o receptor ou então chegou com
os dados corrompidos.
7) Camada 1 - Física
A camada Física pega os quadros enviados pela camada Link de Dados e os transforma em sinais
compatíveis com o meio onde deverão ser transmitidos. Se o meio for elétrico, essa camada converte
os 0s e 1s dos quadros em sinais elétricos a serem transmitidos pelo cabo. Se o meio for óptico (fibra
óptica), essa camada converte os 0s e 1s dos quadros em sinais luminosos e assim por diante,
dependo do meio de transmissão.
 
Essa camada especifica portanto, a maneira com que os 0s e 1s dos quadros serão enviados para a
rede (ou recebidos da rede, no caso da recepção de dados). Ela não sabe o significado dos 0s e 1s
que está recebendo ou transmitindo. No caso da recepção de um quadro, a cama física converte os
sinais do cabo em 0s e 1s e envia essa informações para a camada Link de Dados, que montará o
 
quadro e verificará se ele foi recebido corretamente.
 
O papel dessa camada é efetuado pela placa de rede dos dispositivos conectados em rede. A camada
física não inclui o meio onde os dados circulam, ta somente são necessários os tipos de conectores e
cabos de rede usados para transmissão e recepção para que os 0s e 1s sejam convertidos
corretamente no tipo de sinal requerido, mas o cabo em si não é responsabilidade da camada.
 
Existe ainda o padrão de protocolos IEEE 802 em suas versões IEEE 802.3 (Ethernet) e IEEE 802.5
(Token Ring) com suas camadas Física, Controle de Acesso ao Meio (MAC) e Controle do Link Lógico
(LLC). Mas estes não serão neste artigo explicados.

NDIS e ODI
 
Criado pela Microsoft e pela 3Com, o NDIS (Network Driver Interface Specification) é um driver
instalado no sistema operacional que permite que uma única placa de rede possa utilizar mais
de um protocolo de rede ao mesmo tempo.
 
O driver NDIS possui duas partes. A primeira é chamada driver MAC NDIS, que é o driver da
placa de rede (que deve ser escrito usando o padrão NDIS). A segunda parte é chamada
vector. Essa camada é que permite que uma mesma placa de rede possa usar mais de um
protocolo, já que o driver da placa de rede (driver MAC NDIS) só permite uma única conexão.
 
Quando um quadro é recebido pelo driver da placa de rede, ele o passa para a camada vector,
que o envia para o primeiro protocolo, que poderá aceitar ou rejeitar o pacote. Caso primeiro
protocolo rejeite o quadro, a camada vector entrega o quadro ao segundo protocolo. Esse
processo continua até que um dos protocolos instalados aceite o quadro ou então todos o
tenha rejeitado.
 
Outra finalidade da especificação NDIS é possibilitar a existência de mais de uma placa de rede
em um mesmo micro. Muitas vezes esse procedimento é necessário para ligar um mesmo micro
a dois segmentos de rede diferentes.
 
Em princípio, sem o NDIS, com duas placas de rede em um mesmo micro seriam necessárias
duas pilhas de protocolos completas, uma para cada placa de rede (isto é, seguindo o modelo
OSI seriam necessários protocolos completos com sete camadas para cada placa de rede
instalada). Com o NDIS, um única pilha de protocolos é compartilhada (isto é, as camadas 4, 5,
6 e 7 do modelo OSI) com todas as placas de rede instaladas, já que o que existir acima da
camada vector poderá ser compartilhado por todas as placas de rede.
 
O ODI (Open Datalink Interface) é um driver com o mesmo objetivo que o NDIS, criado pela
Novell e pela Apple para os seus sistemas operacionais, só que com um funcionamento um
pouco mais complexo e mais completo. A grande diferença entre o NDIS e o ODI é o uso da
camada Controle de Link Lógico (LLC) que não é usada no NDIS. No NDIS há a camada vector,
que possui funcionamento similar, porém funciona de maneira diferente. No modelo ODI essa
camada é chamada Camada de Suporte ao Link (Link Support Layer).
 
Neste modelo são adicionadas duas interfaces, uma chamada interface para Múltiplos
Protocolos (MPI - Multi Protocol Interface), que faz a interface entre a Camada de Suporte ao
Link e os drivers das placas de rede instaladas. Os drivers da placa de rede compatíveis com o
padrão ODI são chamados MLID ou Multiple Link Interface Driver.
 
A principal diferença entre o NDIS e o ODI é que, como a camada de Controle do Link Lógico
ou Camada de Suporte ao Link, como chamada no ODI, possui um campo de endereçamento
de protocolos, tanto o transmissor quanto o receptor sabem qual é o protocolo que está sendo
usado no dado que foi encapsulado dentro do quadro.
 
Com isso, ao receber um quadro, a interface de múltiplos protocolos (MPI) entrega diretamente
os dados para o protocolo responsável. No NDIS, quando um quadro chega, a camada vector
tenta encaminhar o quadro para cada um dos protocolos instalados, até um deles aceitar (ou
todos rejeitarem), já que não há o campo do endereçamento.
 
A existência da Interface para Múltiplos Links (MLI) permite a instalação de mais de uma placa
de rede na máquina, tendo as vantagens que já foram explicadas no NDIS, isto é, as duas
placas de rede podem compartilhar os protocolos existentes acima desta camada.  

Banco de dados
Manipulando Banco de Dados via Internet
com ferramentas gratuitas

Artigo Original formato RTF compactado bdweb.zip 118k

UNIVERSIDADE REGIONAL INTEGRADA DO ALTO URUGUAI E DAS MISSÕES


URI – CAMPUS DE ERECHIM

DEPARTAMENTO DE ENGENHARIAS E CIÊNCIA DA COMPUTAÇÃO


CURSO DE GRADUAÇÃO EM INFORMÁTICA

Lucas Lopes dos Santos


Ronaldo do Amaral

Prof. Jacques Duílio Brancher


ORIENTADOR

ERECHIM/RS, JULHO DE 2000

MANIPULANDO BANCO DE DADOS VIA INTERNET COM FERRAMENTAS


GRATUITAS

Trabalho apresentado como requisito à obtenção do grau de Bacharel em


Informática pela Universidade Regional Integrada do Alto Uruguai e das Missões –
URI, Campus de Erechim sob orientação do Professor Jacques Duílio Brancher
ERECHIM/RS, JULHO DE 2000

SUMÁRIO
SUMÁRIO III
RESUMO VI
ABSTRACT VII
LISTA DE ABREVIATURAS VIII
ÍNDICE DE FIGURAS IX
ÍNDICE DE TABELAS X
INTRODUÇÃO 11
1. LINUX 13
1.1. UM BREVE HISTÓRICO DO LINUX 13
1.2. DISTRIBUIÇÕES DO LINUX 14
1.3. INSTALAÇÃO DO LINUX 15
2. MYSQL 17
2.1. O QUE É MYSQL? 17
2.2. BREVE HISTÓRICO 17
2.3. POR QUE MYSQL? 18
2.4. PRINCIPAIS CARACTERÍSTICAS 18
2.5. POLÍTICA DE USO NA WEB 19
U$ 40 19
U$ 25 19
2.6. INFORMAÇÕES BÁSICAS SOBRE INSTALAÇÃO. 20
2.7. COMPATIBILIDADE DO BANCO MYSQL COM A LINGUAGEM SQL 21
2.8. TRANSAÇÕES 22
2.9. STORE PROCEDURES E TRIGGERS 23
2.10. SEGURANÇA E PRIVILÉGIOS DE ACESSO 23
2.10.1. User names e password 23
2.11. COMO FUNCIONA A CONEXÃO AO MYSQL 25
2.12. PRINCIPAIS FERRAMENTAS PARA UTILIZAÇÃO DO MYSQL 26
2.12.1. MySQL 26
2.12.2. Mysqladmin 26
3. PERSONAL HOME PAGE(PHP) 29
3.1. O QUE É PHP ? 29
3.2. HISTÓRICO 30
3.3. BANCOS DE DADOS 31
3.4. INSTALAÇÃO EM SISTEMAS UNIX 32
3.5. CONFIGURAÇÃO 34
3.6. SINTAXE BÁSICA 35
3.6.1. Delimitadores 35
3.6.2. Separador de Instruções 36
3.6.3. Definição de Variáveis 36
3.6.4. Comentários 36
3.7. EXEMPLOS 37
3.7.1. Um exemplo simples 37
3.7.2. Exemplo de PHP com formulários HTML 38
3.7.3. Exemplo do PHP acessando uma base de dados 39
4. APACHE WEB SERVER 41
4.1. O QUE É UM SERVIDOR WEB 41
4.2. O SERVIDOR APACHE 41
4.3. BREVE HISTÓRICO 42
4.4. INSTALAÇÃO 42
4.4.1. Os módulos do Apache 43
4.4.1.1. O módulo PHP 43
4.5. CONFIGURAÇÃO 44
4.5.1. Arquivos de configuração 44
4.5.1.1. Httpd.conf 44
4.5.1.2. Srm.conf 44
4.5.1.3. Access.conf 45
4.6. PROTOCOLO SSL (SECURE SOCKET LAYER) 45
5. IMPLEMENTAÇÃO 47
5.1. FLUXOGRAMA 48
5.1.1. Descrição detalhada dos módulos 49
5.1.1.1. Módulo 1 – Fazer Prova Virtual 49
5.1.1.2. Módulo 2 – Busca Rápida 50
5.1.1.3. Módulo 3 – Consultar Questões 50
5.1.2. Descrição do Fluxograma 51
5.2. MODELAGEM DOS DADOS 52
5.2.1. Descrição das Tabelas 52
5.2.2. Modelo E-R (Entidade - Relacionamento) 53
5.2.3. Dicionário de Dados 54
5.3. SINTAXE SQL PARA CRIAÇÃO DAS TABELAS 54
5.4. DESCRIÇÃO DAS FUNÇÕES PHP UTILIZADAS 55
5.5. IMPLEMENTAÇÃO PHP E HTML 57
5.5.1. Index.html – Home Page 57
5.5.2. Prova.html 58
5.5.3. Consulta.html 59
5.5.4. Prova.php3 60
5.5.4.1. Concatenação das variáveis 63
5.5.5. Consulta.php3 64
5.5.6. Corrige.php3 67
5.5.7. Buscarap.php3 68
CONCLUSÕES 70
REFERÊNCIAS BIBLIOGRÁFICAS 72

Resumo

O presente trabalho tem como objetivo primordial definir um conjunto de


ferramentas gratuitas para plataforma Linux que possam cobrir todas as etapas do
desenvolvimento de um Web Site com manipulação de uma base de dados. Partiu-
se inicialmente para o estudo de quais seriam as ferramentas necessárias e
disponíveis para a instalação de um servidor Web. A partir disto foi implementado
um Site para simulação de prova de vestibular. Este site tem como característica a
possibilidade de um usuário consultar questões, gerar provas virtuais, fazer busca
por palavra-chave, em um banco de dados armazenado no servidor.

Sendo o desenvolvimento prático de um site o objetivo final do trabalho bem como


a simulação de um servidor Web, iniciou-se o processo de definição dos tipos de
ferramentas e a escolha entre as opções disponíveis. Seguiu-se então o estudo das
ferramentas escolhidas: sistema operacional Linux, banco de dados MySQL,
servidor Apache Web Server e a linguagem de programação PHP. Após concluído o
estudo, começou a criação do servidor Web com a instalação e configuração em
forma padrão das ferramentas acima citadas em um computador pessoal. Com o
servidor Web devidamente configurado, vieram os testes do funcionamento da
linguagem de programação PHP para acesso à base de dados MySQL. O próximo
passo foi a implementação do site baseada na construção da base de dados,
definição da estrutura do site, implementação dos scripts PHP que geram as
páginas HTML através das consultas ao banco de 
dados, e também as páginas HTML simples.

Com esse estudo teórico e prático, observou-se a grande utilidade de bancos de


dados em um Web Site. Pois permite a implementação de várias soluções que
dinamizam o conteúdo de um site, facilitam sua administração, possibilita a criação
de aplicações cliente-servidor completas, comércio eletrônico e todas as facilidades
que uma base de dados pode oferecer. Mesmo sendo uma solução gratuita,
mostrou-se bastante eficiente e capaz de ser solução para quase todos os tipos de
Web Site.
Palavras-chaves: Internet, PHP, MySQL, Linux, Apache, Site.

Abstract

The present work has as its primordial objective to define a set free tools for the
Linux platform  that can cover all the stages of development of a Web Site with the
manipulation of a database. It was initially started the study of which tools were
necerrary and available for the installation of a Web Server. From that, a Site to
simulate college entrance exams was implemented. This site has as its
characteristics the possibility of a user to consult tasks, generate virtual tests and
search for keywords in a database loaded in the server.

Being the practical development of a site the final objective of the work, as well as
the simulation of a Web Server, the process to define the kind of tools and the
choice among the available options was started. Following that, the study of the
chosen tools: Linux operational system, MySQL database, Apache Web Server and
PHP programming language. After the conclusion of the study, the creation of the
Web Server with the installation and configuration in pattern form of the tools
aforementioned in a personal computer. With the Web Server appropriately
configured, the tests for the functioning of PHP programming language were made
for the access to MySQL database. The next step was the implementation of the
site based in the construction of the database, definition of the site structure,
implementation of PHP scripts that generate HTML pages, through consultation of
the database and simple HTML pages as well.

It was observed the great utility of database in a Web Site with this theoretical and
pratical study, as they allow the implementation of several solutions that make the
content of a site dynamic, make its management easier, make possible the creation
of complete client-server applications, e-commerce  and all the facilities that a
database can ofter. Even being a free solution, it has shown to be quite efficient
and capable to be the solution for almost all kinds of Web Sites.

Keywords: Internet, PHP, MySQL, Linux Apache, Site.

Lista de Abreviaturas

API – Interface de programação de aplicativos


ASP – Active Server Page
CGI – Common Gateway Interface
FTP – File Transfer Protocol
HTML – Hyper Text Markup Language
HTTP – Hyper Text Transfer Protocol
HTTPs – Hyper Text Transfer Protocol Secure
NCSA – Centro Nacional de Aplicações para Supercomputação
PHP – Personal Home Page
PHP/FI – Personal Home Page/Form Interpret
RPM – RedHat Package Manager
SQL – Structured Query Language
SSL – Secure Socket Layer
URL – Uniform Resource Locator
WWW – World Wide Web

Índice de Figuras

FIGURA 3.1 - EXEMPLO DE CÓDIGO PHP EMBUTIDO EM UM CÓDIGO HTML. 29


FIGURA 3.2 - EXEMPLO DE ALTERNÂNCIA ENTRE OS MODOS PHP E HTML 30
FIGURA 3.3 - PASSOS PARA INSTALAÇÃO DO PHP EM SISTEMAS UNIX 32
FIGURA 3.4 - EXEMPLO DE COMENTÁRIO DE UMA LINHA EM PHP 37
FIGURA 3.5 - EXEMPLO DE COMENTÁRIO DE MAIS DE UMA LINHA EM PHP 37
FIGURA 4.1 - GRÁFICO COMPARATIVO DA UTILIZAÇÃO DO APACHE NO MUNDO 42
FIGURA 4.2 - COMPARAÇÃO ENTRE PHP COMO UM CGI E UM MÓDULO APACHE 43
FIGURA 5.1 - FLUXOGRAMA DA SEQÜÊNCIA DE AÇÕES EXECUTADAS DURANTE O
PROCESSO DE 
VISITA DE UM USUÁRIO À HOME PAGE IMPLEMENTADA 48
FIGURA 5.2 - MODELO E-R. 53

Índice de Tabelas

TABELA 2.1 - POLÍTICA DE USO DO MYSQL NA WEB 19


TABELA 2.2 - TIPOS DE VARIÁVEIS SUPORTADAS PELO MYSQL 22
TABELA 2.3 - TABELA USER DO MYSQL 24
TABELA 2.4 - TAREFAS SENDO EXECUTADAS NO SERVIDOR 27
TABELA 3.1 - HABILITAÇÃO DO BANCO DE DADOS DURANTE A INSTALAÇÃO DO
PHP. 33
TABELA 3.2 - EXEMPLOS DE CONFIGURAÇÃO DO PHP. 35
TABELA 5.1 - DESCRIÇÃO DOS CAMPOS DA TABELA QUESTÕES. 53
TABELA 5.2 - DESCRIÇÃO DOS CAMPOS DA TABELA RESPOSTA. 53
TABELA 5.3 - DICIONÁRIO DE DADOS DA TABELA QUESTÕES. 54
TABELA 5.4 - DICIONÁRIO DE DADOS DA TABELA RESPOSTA. 54

Introdução

A Internet, a grande rede mundial de computadores, é hoje a maior força


propulsora em quase todos os segmentos da informática, uma revolução nos meios
de informação sem limites e em plena expansão.

Nos dias de hoje é possível compartilhar informações de todos os tipos , desde


simples textos a imagens tridimensionais, de sons a vídeos de última geração com
um simples clique, seja do mais remoto lugar aos grandes centros, tudo isso graças
a Internet.

Atualmente esse processo de compartilhamento de informações vem criando novas


formas de negociação, remodelando completamente o sistema de logística das
empresas, estreitando ligações comerciais e pessoais. Todas essas informações e
interação entre as partes envolvidas pode-se dar através de bancos de dados,
independente de plataforma de hardware, sistema operacional, topologia de rede,
aplicativo ou localização geográfica. Pode-se por exemplo estreitar a ligação de um
representante de uma industria, fazendo um pedido via internet, inserindo os dados
do pedido automaticamente no banco de dados da empresa, disponibilizando
informações para a área de produção e esta para a expedição, transferindo parte
da cadeia de produção para a internet.

Esse processo de utilização dos conceitos cliente-servidor, só era possível dentro de


um espaço físico pequeno, ou com recursos tecnológicos avançados e caros. Hoje
desenvolvem-se aplicativos inteiros que utilizam a Web como interface para acesso
a banco de dados. Dentre os inúmeros sistemas pode-se citar o PHP, o ASP e o
Cold Fusion.

Tendo em vista a crescente evolução destas ferramentas e sobretudo a sua


especialização, optou-se neste trabalho por um segmento que ainda possui muito a
ser desenvolvido que é o software gratuito. Assim, buscou-se identificar as partes
componentes do sistema, que são:
a) Sistema Operacional - Linux
b) Servidor - Apache Web Server
c) Banco de Dados - MySQL
d) Linguagem de Programação - PHP

A motivação inicial para a escolha das ferramentas acima citadas foi o custo, que é
nulo. 
Percebeu-se com o desenvolvimento uma série de outras facilidades que vieram a
corroborar a idéia inicial que se tinha.

Com o objetivo de exemplificar a utilização das ferramentas, desenvolveu-se um


ambiente de servidor de páginas Web. Nesse ambiente, implementou-se um site
que permite ao usuário realizar provas virtuais de concurso vestibular, bem como
consultas às questões cadastradas em um banco de dados.

Assim, o presente trabalho busca apresentar uma solução eficiente, completa e


barata para um servidor Web que interprete scripts PHP que acessam o servidor
MySQL. Para este fim, foi dividido da seguinte maneira:

No primeiro capítulo é apresentado o sistema operacional utilizado, o Linux,


incluindo um breve histórico, as distribuições existentes e algumas dicas de
instalação.

O servidor  de banco de dados MySQL está no segundo capítulo do trabalho, que


contém suas principais características, as bases da instalação, sua utilização na
Web, suas ferramentas clientes e alguns conceitos da linguagem SQL.

O terceiro capítulo do trabalho trata da linguagem de programação PHP,


conceituando-o, apresentando os processos de instalação e configuração,
descrevendo uma idéia básica da sintaxe da linguagem e citando alguns exemplos.

No quarto capítulo discorre o servidor Apache Web Server, mostrando o


funcionamento básico de um servidor Web, os processos de instalação e
configuração básica e descrevendo também sobre o protocolo SSL.

No quinto e último capítulo está documentada a implementação realizada neste


trabalho. 
Abordando todo o seu processo de desenvolvimento desde a sua esquematização,
passando pela modelagem dos dados, e chegando até a codificação em PHP e
HTML.

1. Linux

Neste capítulo será abordado o sistema operacional Linux, iniciando com um breve
histórico, passando pela descrição e comentários de algumas das principais
distribuições e finalizando com algumas dicas e características do processo de
instalação do mesmo.

1.1. Um breve histórico do Linux

"O sistema operacional Linux é uma versão gratuita distribuida do primeiro UNIX
desenvolvido por Linus Torvalds na Universidade de Helsinque na Finlândia. O UNIX
é um dos sistemas operacionais mais populares do mundo por causa de sua grande
base de suporte e distribuição" [JAM 99]. O desenvolvimento do Linux contou com
a participação de vários programadores UNIX e especialistas em Internet, dando a
qualquer um que possuísse algum conhecimento e experiência necessários a
possibilidade de desenvolver e até mesmo alterar o sistema.

Foi inicialmente desenvolvido como um passatempo para Linus. Foi inspirado no


Minix, um pequeno sistema UNIX desenvolvido por Andy Tannenbaum.

Em agosto de 1991 a versão 0.01 ficou pronta, mas nenhuma publicação foi feita
para esta versão, suas fontes não foram nem sequer executadas. 

Dois meses depois, em 5 de outubro de 1991, Linus lançou a primeira versão oficial
do Linux, a versão 0.02, porém pouco acrescentava em relação à versão anterior.
Depois da versão 0.03, Linus desenvolveu o sistema até a versão 0.10, quando
mais pessoas começaram a trabalhar no desenvolvimento. Dando seguimento ao
sistema, Linus elevou o número da versão para 0.95, e segundo ele, logo estaria
pronto para o lançamento de uma versão oficial.

Duas importantes fontes de software para o desenvolvimento do Linux foram o


projeto GNU da Free Software Fundation (Fundação de Software Livre), uma
organização de porte internacional que suporta a apóia projetos diversos ligados ao
código livre, e os trabalhos em curso na Universidade de Berkeley. Destas duas
fontes saíram diversos dos atuais utilitários e aplicativos do Linux, como o
compilador C e os servidores de rede, entre outros.

Após passar por várias versões, o Linux é hoje um clone do UNIX completo.
Possuindo compatibilidade com praticamente todos os grandes pacotes gratuitos de
software. As versões disponíveis estão em vários idiomas, possuindo as variadas
aplicações, processadores de texto, suportando redes e gerenciadores de banco de
dados, e outras.

1.2. Distribuições do Linux

Sendo o Linux um software gratuito, a sua distribuição não é controlada por


nenhuma organização ou entidade. Por isso, qualquer cidadão está apto à distribui-
lo. Mas existem algumas empresas que cobram pela mídia.

Isso ocorre porque uma empresa pode obter gratuitamente o núcleo do Linux,
trabalhar em cima desse núcleo, adicionar interfaces gráficas, aplicações,
documentar e vender este pacote. Assim foi o surgimento das versões comerciais.

A característica de ser um software gratuito onde qualquer pessoa pode manipulá-


lo, torna o Linux um sistema operacional de muitas distribuições. As distribuições
disponíveis podem variar das mais completas, que vêm com todo o software que
você precisa e mais alguns aplicativos, até as mais "enxutas", que são indicadas
para usuários que não dispõem de muito espaço em disco. Essas versões "enxutas"
possuem apenas o básico necessário para o seu funcionamento.

A seguir serão apresentadas e comentadas algumas distribuições do Linux


disponíveis atualmente:
a) Red Hat:  Esta distribuição tem anexada ao núcleo do sistema recursos de
programas de configuração de recursos de sistema, interfaces gráficas,
especializações para cliente e servidor, entre outras. A característica forte dessa
distribuição é a facilidade de instalação. "O processo de instalação é feito através
do pacote RPM (Red Hat Package Manager), com ele toda a estrutura de
funcionamento do software é transferida para o disco, nos locais apropriados,
facilitando a atualização do sistema. Junto com a distribuição Red Hat são
fornecidas as interfaces gráficas X-Windows e KDE" [JAM 99].
b) Slackware: É uma versão que apesar de não suportar os pacotes da Red Hat,
traz consigo um conversor que permite trabalhar com eles. O Slackware possui
opções de segurança, como por exemplo, o de avisar que uma função de
inicialização do sistema (script) foi alterada e que isto poderá trazer problemas.
Possui a interface gráfica X-Windows e o gerenciador de janelas fvwm95.
c) Caldera: É uma versão voltada para uso empresarial. Possui uma série de
drivers, ferramentas e recursos para interligação do Linux em rede, como servidor.
Esta versão vem com uma licença de um módulo de  desenvolvimento do banco de
dados Sybase e o ambiente gráfico KDE, incorpora também compatibilidade com o
mecanismo RPM da Red Hat.
d) Debian: É a versão indicada para programadores mais experientes. Possui a sua
própria estrutura de pacotes, o formato DEB, que é utilizado para instalação do
sistema e dos aplicativos. Os especialistas o consideram a ferramenta de instalação
mais versátil do mercado.
e) Conectiva: A distribuição Conectiva é um trabalho feito em cima da versão Red
Hat, incluindo traduções de mensagens e textos de apoio para o português e
definições de hardware que normalmente são usados no Brasil, como placas de
controle, monitores, impressoras, mouses, etc.

1.3. Instalação do Linux

O objetivo de se instalar um sistema operacional é a de possibilitar dar inicio ao uso


do computador. Instalar um sistema é transferir para uma unidade de disco uma
parte deste sistema.

A instalação do Linux, por ele ser um sistema complexo, abrangente e escrito por
diversas pessoas, não é 
considerada umas das tarefas mais simples. Ele difere-se do sistema operacional
Windows, por exemplo, por possuir diversas formas de instalação, isso ocorre
devido à duas peculiaridades do Linux:
a) Possui variadas fontes de instalação, podendo ser instalado a partir de um ou
dois CDs, utilizando-se ou não um disquete de inicialização. Uma outra forma é via
Internet ou via FTP (File Transfer Protocol). Ou ainda poderá ter seu conteúdo de
instalação copiado para uma unidade de disco de um computador e a partir dali ser
instalado.
b) Possui diferentes distribuições. Como cada distribuição tem suas características e
finalidades, o processo de instalação de cada uma delas poderá ter seqüência,
duração e procedimentos diversos.

A seguir serão descritos alguns recursos mínimos de máquina necessários para a


instalação do Linux, e algumas características de dispositivos que seria importante
o usuário ter conhecimento antes de iniciar o processo de instalação:
a) Processador: Processadores da Intel igual ou superior aos 386, processadores
não-Intel como: Alpha, SPARC, Power PC, são suportados pelo Linux.
b) Memória: O Linux requer no mínimo 2 MegaBytes de memória, no caso de
servidores de rede recomenda-se no mínimo 16 MegaBytes.
c) Discos e Controladoras:  O Linux requer uma configuração especial para
computadores que possuam 
controladoras SCSI, caso contrário, com discos normais será necessário criar uma
partição para a instalação. 
Isso significa que o Linux poderá ser instalado no mesmo disco do DOS ou
Windows, só que em partição 
diferente. O espaço da partição recomendável dependerá da quantidade de pacotes
que serão instalados, a versão mínima do Linux requer pelo menos 20 MegaBytes,
mas instalando-se aplicativos, editores de texto, ambientes gráficos esse valor
poderá chegar a 200 MegaBytes.
d) Monitor de Vídeo: A configuração do monitor de vídeo requer o conhecimento de
que placa de vídeo e monitor estão instalados no computador. Além de modelo e
fabricante, deve-se também passar como parâmetro no momento da instalação a
quantidade de memória de vídeo que se possui, freqüências usadas pelo monitor,
tipos de recursos, etc.

2. MySQL

2.1. O que é MySQL?

MySQL é um banco de dados relacional,  desenvolvido para plataformas Linux –


like, OS/2, Windows [YAR 99]. Sendo um software de livre distribuição para
plataformas não-Windows que o utilizam em um servidor Web.

MySQL é um servidor multiusuário, multitarefa, compatível com o padrão SQL


(Structured Query language – Linguagem de Consulta estruturada), linguagem essa
amplamente utilizada para manipulação de dados em RDBMS (Banco de dados
Relacionais), sendo considerada um ferramenta de  manipulação de base de dados
de tamanho moderado.

As principais características que destacam MySQL são: sua velocidade


proporcionada pela sua implementação leve que não inclui na totalidade o suporte
as instruções SQL; sua natureza de distribuição gratuita; facilidade de integração
com servidor Web e linguagens de programação de desenvolvimento de sites
dinâmicos, especialmente a linguagem PHP.

2.2. Breve Histórico

"O MySQL foi criado por Michael Widenius na companhia suíça TcX. Por volta de
1979 Michael desenvolveu um banco de dados chamado UNIREG, sendo rescritos
em várias linguagens desde então" [YAR 99]. Em 1994, a empresa TcX começou o
desenvolvimento de aplicações baseadas na Web, tendo como base o banco
UNIREG, porém esse banco possuía muito "overhead" para obter sucesso em uma
aplicação para geração de páginas dinâmicas na Web. Então a empresa TcX
começou a procurar por outro banco o mSQL, uma ferramenta baseada em SQL
mas com características pobres não possuindo por exemplo suporte a índices, e
com desempenho inferior ao UNIREG.

Foi então que o desenvolvedor do banco UNIREG contatou o David Hughes criador
do mSQL, para saber do interesse dele em unir os dois bancos. Sendo positivo o
interesse de David , a empresa TcX resolveu desenvolver um novo banco, mas
mantendo ao máximo a compatibilidade com mSQL. TcX foi esperta o suficiente
para não reinventar o que já estava bem feito, ela construiu seu servidor baseado
na estrutura que já estava montada do UNIREG e utilizou grande número de
utilitários escritas para mSQL e fez API's para o novo servidor praticamente iguais
ao mSQL. Como resultado usuários do mSQL que decidissem mudar para o novo
servidor da TcX, teriam apenas que fazer pequenas e simples mudanças nos
códigos existentes.

Então foi me maio de 1995 que, definitivamente, a primeira versão do MySQL foi
lançada. Um dos parceiros da TcX sugeriu a distribuição do servidor na Internet, o
objetivo disso era a utilização de um modelo pioneiro desenvolvido por Aladdin
Peter Deutsch. O resultado foi um maior flexibilidade em sem "copyright", que fez
do MySQL mais difundido gratuitamente do que mSQL.

2.3. Por que MySQL?


Sendo a concepção inicial do trabalho a utilização de ferramentas de livre
distribuição para plataforma Linux-GNU, e o desenvolvimento de uma aplicação de
banco de dados utilizando a Web como interface, fez-se necessário a escolha de um
banco de dados que permitisse explorar as características básicas para
implementação de uma aplicação cliente-servidor.

Entre as possibilidades encontradas surgiram três bancos de dados: MySQL,


PostgreSQL e Interbase. O servidor PostgreSQL destacou-se por suas
características de banco de dados objeto-relacional, permitindo explorar todas as
possibilidades dos bancos relacionais, porém estendendo funções como classes,
herança. 

No processos de instalação foram encontradas dificuldades no que diz respeito a


integração com o servidor Web, não sendo possível o acesso pela linguagem PHP.

O MySQL foi o banco de dados escolhido por apresentar extensa documentação,


atualmente mais de 10 livros, milhares de sites na internet, mas principalmente
pela sua fácil instalação e integração com o servidor Web. 

Sua instalação através de RPM (RedHat Package Manager – Gerenciados de pacotes


RedHat), é um processo simplificado, sendo criado toda a estrutura interna de
arquivos no sistema operacional, bem como execução de scripts de inicialização e
ajustes em arquivos de inicialização no servidor Web e módulo PHP.

2.4. Principais características

a) MySQL é um banco de dados multiprocessado, significando que pode utilizar


vários processadores ao mesmo tempo.
b) Possui API's para C, C++, Java,  Perl, PHP, Phyton e TCL.
c) Foi desenvolvido para várias plataformas incluindo ambientes Unix, OS/2 e
Windows.
d) Permite operações e funções nas cláusulas select e where,  bem como suporte as
funções SQL(group by , order by ), além de funções de grupo como:  Count(),
avg(), sum(), std(), max(), min().
e) Permite a seleção de diferentes tabelas de diferentes bases de dados em uma
mesma query.
f) Suas características de privilégio de password são bastante flexíveis, permitindo
inclusive a 
validação por "host".
g) Possui algoritmos de criptografia de password, fornecendo assim segurança aos
dados gravados nas tabelas.
h) Permite a utilização de até 16 índices por tabela.
i) Capacidade para manipular bancos com até 50 milhões de registros.
j) MySQL foi escrito em C e C++
k) Permite conexões via TCP/IP
l) Permite acesso via ODBC.
m) Possui instruções para extração de informações relativas a tabelas, bancos,
índices.

2.5. Política de uso na Web

A utilização de MySQL em sistemas operacionais não-Windows é gratuita se


utilizada com um servidor WEB, não necessitando assim  de licença para uso. Isso é
válido mesmo que as aplicações Web que utilizem o banco sejam para fins
comerciais, excluindo-se a comercialização do MySQL.
O suporte para MySQL pode ser contratado, no entanto para isso existem contratos
de manutenção,  sendo esses restritos as áreas de cobertura da equipe.

Apesar de ser distribuído livremente para uso na Web e em outras várias situações,
que não cabem aqui serem mencionadas, existem vários tipos de utilização no qual
se faz necessário a aquisição de licenças de uso, para citar alguns exemplos de
valores, segue tabela 2.1 .

Número de licenças    Valor por cópia

1    U$ 200

10    U$ 150

50    U$ 120

100-999    U$ 40

1000-2499    U$ 25

Tabela 2.1  - Política de uso do MySQL na Web


Valores extraídos da documentação oficial – Fev/2000

2.6. Informações básicas sobre instalação.

O MySQL possui diversas versões, possuindo dois métodos de instalação: um


através da compilação da distribuição dos fontes, a outra através da instalação dos
binários.

No desenvolvimento deste trabalho foi utilizada a versão 3.22.25 de distribuição


binária. 
Normalmente o MySQL possui um versão beta, a última a estar disponível, porém
nem sempre é a versão mais estável, sendo assim, a melhor escolha deve ser
sempre  a da última versão estável.

Para obter um cópia do servidor MySQL é possível utilizar vários sites ao redor do
mundo, que possuem as versões disponíveis para download, ou a utilização dos
pacotes que acompanham a maioria das distribuições Linux.

Neste trabalho foi explorada apenas o processo de instalação sobre distribuição


binária com a utilização de pacotes RPM(RedHat Package Manager). O processo de
instalação para plataformas Linux, baseadas na distribuição RedHat, incluindo a
distribuição brasileira Conectiva, é um processo bastante simplificado, pois todo o
trabalho de criação de diretórios, execução de scripts de instalação, configuração
de arquivos, reinicialização de processos, criação de links simbólicos, entre outros
ficam invisíveis durante a instalação.

A utilização de pacotes possui como principal  vantagem essa simplificação na


instalação, por outro lado, por utilizar processos bastante automatizados, não
permite que a instalação seja customizadas por usuários mais experientes e que
necessitem adequar a instalação em seu sistema.
Os pacotes que devem ser utilizados na instalação são os que seguem abaixo:
a) Principal: MySQL-versão.i386.rpm . Este pacote  possui o  próprio servidor de
Banco de Dados MySQL, deve ser instalado.
b) Programas Cliente Standart: MySQL-Cliente-versão.i386.rpm. Este pacote possui
as ferramentas básicas para gerenciamento, criação e manutenção dos bancos
criados.
c) Teste e Benchmark: MySQL-bench-versão.i386.rpm. Esse pacote permite que se
façam testes de performance das estruturas criadas no Banco.

Em uma shell de um Linux baseado em RedHat, com RPM instalado e os pacotes já


copiados, executa-se os comandos abaixo:

shell> rpm –i MySQL-versao.i386.rpm MySQL-Client-i386.rpm <enter>

Esse processo instalará  o servidor e as ferramentas clientes básicas, permitindo


assim seu funcionamento e criação dos bancos de dados. Durante esse processo  o
banco de dados será copiado com as permissões padrões. Ocorrerá a criação de
entradas em sbin/rc.d para que se possa iniciar o servidor automaticamente, bem
como os arquivos de executáveis e extensões dos aplicativos para os diretórios
padrão.

Caso o processo ocorra sem erros já é possível testar instalação executando em


uma shell o comando mysql, o qual iniciará a principal ferramenta cliente para
interpretação de comandos SQL.

OBS: A Instalação através dos fontes do MySQL, requer algumas ferramentas no


seu ambiente operacional: um compilador C++ compatível com ANSI, um
programa make, um descompactador, entre outros. De forma simplificada será
necessário compilar os fontes, e passar alguns parâmetros de instalação. Esse
processo exige um conhecimento mais aprofundado das caraterísticas as
ferramentas envolvidas.

2.7. Compatibilidade do Banco MySQL com a linguagem SQL

O banco de dados MySQL é compatível com boa parte dos comandos da


padronização SQL 92, possuindo um conjunto não muito extenso de instruções
porém com as funções mais utilizadas [YAR 99]. Além disso, possui extensões com
funções bastante úteis, entre elas o auto_increment que permite a geração de
números seqüências para registros em cada nova inserção executada em uma
tabela. Alguns comandos próprios do MySQL não funcionarão com outros bancos,
mas podem ser comentados de forma que durante um processo de importação
sejam ignorados, mantendo assim a portabilidade de suas instruções.

Também não suporta a utilização de subselects, ficando assim deficiente em


algumas situações de consulta. Não tem suporte também a commit e rollback
conforme será discutido no próximo capítulo. 

O MySQL suporta uma grande extensão de tipos numéricos, caracteres, caracteres de


tamanho variável, tipos enumerados, sendo os mais comuns e mais compatíveis os que
seguem a seguir:

Tipo Descrição
Int Valor inteiro
Real Valor de ponto flutuante
Char(tamanho) Caracter de tamanho fixo
Date Campo de data padrão
Time Campo de tempo padrão
Text(tamanho) Caracter de tamanho variável

Tabela 2.2 - Tipos de variáveis suportadas pelo MySQL


  

2.8. Transações

Transações não são suportadas, até sua última versão. O objetivo segundo a
equipe desenvolvedora é a 
implementação de suporte a transações atômicas, o que seria equivalente a
transações sem a utilização de rollback(recurso para desfazer alterações). O
finalidade de operações atômicas é permitir que se execute um grupo de instruções
SQL, por exemplo vários comandos de atualização (UPDATE) e que haja garantia
que nenhum outro processo interfira nos valores, tornado os dados inconsistentes.

A utilização de transações em bancos de dados permite garantir a integridade e a


consistência das informações, e tem como característica a utilização de Commit e
RollBack, ou seja, pode-se executar um conjunto de instruções e ter a garantia que
todas elas serão executadas (Commit), ou no caso de alguma falha de Hardware ou
de Software as alterações são desfeitas e retornam ao seu estado inicial antes das
alterações(RollBack).

Por não utilizar esse conceito de transação em sua estrutura, o banco MySQL
consegue uma grande melhoria no seu desempenho, por manter um conjunto de
instruções menos complexas, sendo atualmente um dos bancos de dados mais
rápidos para consultas.

Sendo assim, a sua utilização deve ser muito criteriosa, pois ao envolver processos
de manipulação de informações que não podem ficar inconsistentes de forma
alguma, o banco não oferece os recursos de segurança commit e rollback. Para
contornar esse problema, utiliza-se o conceito de travamento e destravamento de
tabelas.

O processo de travamento e destravamento de tabelas visa garantir a consistência


da informação lida, porém o travamento deve ser invocado explicitamente na
programação exigindo um controle rigoroso na programação. A seguir segue um
exemplo do processo de travamento de tabela:

Instruções:

a) lock tables trans read, clientes write


b) select sum(value) from trans where cliente_id=10
c) update cliente set saldo = soma anterior where cliente_id = 10
d) unlock tables

Caso a tabelas não fossem travadas, existiria a possibilidade de outro processo


inserir um novo registro na tabela trans, entre a execução do select e do update
tornando assim a informação incorreta.

2.9. Store procedures e Triggers

O banco de dados MySQL suporta a utilização de procedures e triggers.  A utilização


de procedures possibilita que vários processos de programação sejam efetuados no
próprio banco de dados, permitindo assim a diminuição do tráfego cliente-servidor
bem como benefícios no que diz respeito a independência de aplicativos, pois os
processos implementados no banco ficam transparentes para a aplicação que
acessa os dados.

Pode-se definir trigger como sendo um ou vários procedimentos armazenados que


são executados quando determinado evento ocorre, por exemplo, a cada vez que
um  registro é atualizado dispara-se a execução de certos procedimentos.

2.10. Segurança e privilégios de acesso 

A função primária do sistema de privilégios do MySQL, é validar a conexão de um


usuário de uma determinada estação e definir quais os privilégios o usuário tem
com as instruções Select, insert, update, delete em um determinado banco de
dados.

Além dessas instruções, são definidos quais os privilégios administrativos como


criação de usuários, definição de permissões, possibilidade de iniciar e parar o
servidor entre outras.

2.10.1. User names e password

O processo de acesso ao MySQL se faz através de nome de usuário e senha, sendo


a senha opcional. Os nomes e senhas utilizados na autenticação não possuem
qualquer ligação com os nomes utilizados e senhas utilizados no ambiente
operacional (Linux).

Para que possa haver segurança no acesso aos dados do banco, deve-se utilizar a
política de senhas para todos os usuários, caso contrário um usuário poderá
acessar informações facilmente, além de facilitar a invasão ao banco por pessoas
não autorizadas.

Algumas características importantes a serem citadas sobre a utilização de nomes e


senhas:
a) Nomes de usuários podem conter até 16 caracteres alfanuméricos
b) Não existe ligação entre nomes do ambiente operacional e do banco.
c) MySQL criptografa o password usando um algoritmo diferente do que o usado
em uma seção Linux.
d) Possui as funções Password('suasenha') e Encrypt('suasenha'), sendo que a
primeira utiliza um algoritmo do próprio MySQL e a segunda faz uma chamada ao
sistema de criptografia do sistema Linux.

Todas as informações referentes à controle de acessos e privilégios ficam armazenas e


um banco de dados dentro do MySQL chamado mysql , com as informações sobre
usuários especificadas dentro de uma tabela com o nome de user. Esta tabela possui a
seguinte estrutura de dados assim explicada:

Campo Tipo Funçao


Host Char(60) Host a qual se dará o acesso ao banco
User Char(16) Nome do usuário
Password Char(16) Senha do usuário (Campo pode ser criptografado)
Select_priv Enum(‘n’,’y ‘) Possibilidade de executar o comando select
Insert_priv Enum(‘n’,’y ‘) Possibilidade de executar o comando insert
Update_priv Enum(‘n’,’y ‘) Possibilidade de executar o comando update
Delete_priv Enum(‘n’,’y ‘) Possibilidade de executar o comando delet
Create_priv Enum(‘n’,’y ‘) Possibilidade criar banco de dados
Drop_priv Enum(‘n’,’y ‘) Possibilidade de apagar banco de dados
Reload_priv Enum(‘n’,’y ‘) Possibilidade de atualizar os privilégios definidos
Shutdown_priv Enum(‘n’,’y ‘) Possibilidade de finalizar o servidor
Process_priv Enum(‘n’,’y ‘) Possibilidade de gerenciar tarefas em execução
File_priv Enum(‘n’,’y ‘) Possibilidade de usar comandos que executam sobre arquivos
Grant_priv Enum(‘n’,’y ‘) Possibilidade de definir privilégios para outros usuários
Index_priv Enum(‘n’,’y ‘) Possibilidade de criar e apagar índices
Alter_priv Enum(‘n’,’y ‘) Possibilidade de executar o comando ALTER TABLE

Tabela 2.3 - Tabela user do MySQL

Outras tabelas completam o controle total de permissões e privilégios:


DB – esta tabela possui as informações de qual usuário pode executar quais
comandos, de determinada máquina, exatamente sobre um banco de dados
específico. Esta tabela se faz necessária, pois a tabela user não possui qualquer
referência sobre quais bancos de dados eram definidos os privilégios, assim com a
tabela db pode ter um controle mais específico.

Host – esta tabela tem por objetivo controlar o acesso a banco levando em
consideração em qual máquina esta sendo efetuada a conexão, assim se a tabela
db não identificar o host para um banco de dados e usuário, a tabela host  define se
o banco de dados em questão pode ser acessado de determinado host.

2.11. Como funciona a conexão ao MySQL

O processo de conexão com o banco requer que alguns parâmetros sejam passados
ao servidor MySQL: 

a) Hostname – Qual computador deseja efetuar a conexão.


b) usuário – O nome do usuário que deseja conectar
c) A senha – Senha do usuário que requisitou a conexão.

Esses dados são passados para o servidor através da aplicação cliente, por exemplo
um página desenvolvida em PHP ou um módulo de administração.

No caso de omissão de algum parâmetro, a requisição de conexão assume os


seguintes valores como padrão:
a) Hostname :  LocalHost
b) Nome do usuário : Nome do usuário conectado no ambiente operacional
c) Password: Não passa nenhuma informação se omitido

Abaixo o exemplo de uma conexão através da linguagem PHP embutida em uma


página HTML:
a) $conexão = mysql_conect('localhost','joao','xxxyyy');
b) mysql_select_db('conexão','teste');

Com a função nº 1 nativa da linguagem PHP, solicita-se uma conexão ao servidor


MySQL, sendo o lugar da conexão o próprio computador(localhost), o usuário (joao)
e a sua senha(xxxyyy). Caso executado com sucesso a função, a variável $conexão
recebe a validação da conexão.

A segunda função seleciona qual o banco de dados que a conexão acima realizada
deseja conectar, nesse caso foi conectado ao banco de dados teste.

2.12. Principais ferramentas para utilização do MySQL

2.12.1. MySQL

Talvez uma das mais importantes ferramentas para criação de banco de dados em
MySQL seja a mysql, pois através dela cria-se uma conexão direta com o servidor
MySQL, permitindo executar todos os comandos SQL disponíveis desde a criação de
bancos até a definição de privilégios para o servidor. Com a execução do comando
inicia-se a utilização do MySQL:

Shell> mysql –u joao –p teste

Com esse comando cria-se um conexão com o servidor MySQL para o usuário joao
ao banco de dados teste, sendo solicitada sua senha.

Assim   inicia-se a conexão comum prompt como esse: (mysql>)  que permite a
execução dos comandos SQL.

2.12.2. Mysqladmin

Mysqladmin é a ferramenta principal para administração de bancos de dados


rodando em MySQL Server. Usando esta ferramenta pode-se criar, destruir e
monitorar servidores de bancos de dados.

Para criar um banco dados pode-se utilizar esta ferramenta como segue exemplo:
Shell> mysqladmin – p create nomedobanco

A opção –p fala ao MySQL para solicitar  ao usuário a senha de root que deve estar
definida previamente. Caso o comando seja executado com sucesso, o servidor
criará um novo banco, vazio e com o nome definido.

Para excluir um banco de dados utiliza-se o seguinte comando:


Shell > mysqladmin – p drop nomedobanco

Com esse comando apaga-se todos os arquivos referentes a banco de dados com o
nome nomedobanco.

A ferramenta mysqladmin fornece um grande número de comandos que permitem


monitorar o servidor MySQL. Um dos mais importantes é comando:
  Shell > mysqladmin status

Através dele, pode-se analisar um grande variedade de informações sobre o


Servidor, conforme abaixo:
a) Uptime – o tempo em que o servidor esta rodando
b) Threads – o número de tarefas que estão atualmente interagindo com o
servidor. Pelo menos uma tarefa sempre estará sendo executada, é a tarefa que
conta quantas outras tarefas estão sendo executadas
c) Questions – o número de queries que foram enviadas desde que o banco foi
iniciado
d) Slow queries – o número de queries que levaram mais tempo do que o tempo
padrão configurado.
e) Opens  - o número de tabelas que foram abertas desde que o banco foi iniciado
f) Open tables – o número de tabelas atualmente abertas. Por ser multitarefa uma
tabela pode estar aberta por mais de um processo, assim o número de tabelas
abertas pode ser maior que o número de tabelas existentes no servidor.

Outro comando que contém informações sobre o servidor, mas de uma forma mais
geral é o mysqladmin version, através dele pode-se saber: qual a versão do
servidor, a versão do protocolo, o método pelo qual você está conectado ao
servidor, por exemplo via socket unix, o nome do arquivo que está sendo usado
para se comunicar com o servidor. Um exemplo de saída para este comando:
Server version 3.22.25
Protocol version 10
Connecton estacao1 via Unix socket
Unix Socket /tmp/mysql.sock
Uptime 50 min  10 sec

O comando mysqladmin processlist permite o monitoramento dos processos sendo


executados.

Abaixo um exemplo de uma saída desse comando:

ID User Host Db Command Time State Info


562 Joao Sleep 0
Teste
985 Root Localhost
0  

Tabela 2.4 - Tarefas sendo executadas no servidor

Esta tabela demonstra exatamente o que cada tarefa executada no servidor está
fazendo.

ID : Possui o valor interno que identifica a tarefa executada, não possui relação
com o número de processos do sistema operacional. É possível utilizar este número
para finalizar a tarefa executando o comando mysqladmin kill. 
User: O usuário que está executando essa tarefa.
Host:  O computador do qual o usuário está conectado.
Db : Qual o banco de dados o usuário está conectado.
Command: O tipo de comando que está sendo executado pela tarefa, podem ser  :

a) Sleep – Tarefa esperando por entrada.


b) Quit – Tarefa sendo finalizada.
c) Init DB – Preparando-se para selecionar banco para conexão.
d) Query – Executando uma query, por serem comandos executados muito
rapidamente, 
raramente aparecem na lista de processos.
e) CreateDB – Criando um novo banco de dados.
f) Drop – Apagando um banco de dados
g) Reload – Recarregando as tabelas com informações de acesso ao banco.
h) Shutdown – Tarefa finalizando todos as outras tarefas e parando o servidor
i) Statistics – Tarefa gerando estatísticas.
j) Processes – Tarefa examinado outras tarefas.
k) Connect - Negociando um conexão. 
l) Kill – Tarefa finalizando outra tarefa

Como pode-se observar, o comando mysqladmin processlist permite fazer uma


análise detalhada de todas as tarefas que estão sendo executadas, dando a
possibilidade do administrador avaliar a necessidade de encerramento de tarefas
em casos de falhas.

O processo de finalização do banco de dados se da através do comando:


Sheel> mysqldamin –p shutdown

3. Personal Home Page(PHP)


Neste capítulo serão apresentadas noções básicas da Linguagem PHP, incluindo
uma breve definição, um histórico, algumas dicas de instalação e configuração em
plataforma UNIX, além de noções sobre a sintaxe do mesmo e finalizando com 
exemplos.

3.1. O que é PHP ?

"PHP é uma linguagem que permite criar Web sites dinâmicos, possibilitando uma
interação com o usuário através de formulários, parâmetros da URL e links. A
diferença de PHP com relação a linguagens semelhantes a Javascript é que o código
PHP é executado no servidor, sendo enviado para o cliente apenas HTML(Hyper
Text Markup Language) puro. Desta maneira é possível interagir com bancos de
dados e aplicações existentes no servidor, com  a vantagem de não expor o código
fonte para o cliente. Isso pode ser útil quando o programa está lidando com senhas
ou qualquer tipo de informação confidencial" [BAR 99].

Para interagir com o Banco de Dados, é possível se inserir dentro do código HTML,
além da linguagem de 
programação C, a linguagem para manipulação de Banco de Dados SQL (Structured
Query Language).

Uma característica desta linguagem é a possibilidade de inserir o código PHP dentro


do código HTML, o que não acontece em outros scripts CGI como o Perl ou o C, por
exemplo.

Para simplificar tem-se o exemplo a seguir, onde a frase "Exemplo de código PHP" é
simplesmente impressa na tela:

<html>
<body>
<?php
print“Exemplo de código PHP”;
?>
</body>
</html>

Figura 3.1 - Exemplo de código PHP embutido em um código HTML.

O código PHP permite ainda que durante a execução haja uma alternância entre o seu
modo e o modo HTML.

<html>
<body>
<?php
print“Modo PHP”;
?>
<hr>
<center><b>ModoHTML</b></center>
</hr>
<?php
print “Modo PHP denovo”;
?>
</body>
</html>
Figura 3.2 - Exemplo de alternância entre os modos PHP e HTML

O que o distingue de outros CGI cliente-servidor é que o código é executado no


servidor. Se o servidor tem um script rodando, o cliente terá que  receber o
resultado da execução daquele script. Para isso o servidor deve estar configurado
para processar todos os seus arquivos HTML com o PHP embutido nele.

Muito do PHP é uma combinação das Linguagens Perl, Java, C e C++. Sendo que a
sintaxe é originada do C, tornado o seu aprendizado muito fácil até mesmo para
programadores novatos. Possui ainda a capacidade de realizar sofisticados cálculos
matemáticos, fornecer informações em rede,  e muito mais. Atualmente está
disponível para as plataformas Unix (FreeBSD, Linux, etc) e Windows (9x e NT).

3.2. Histórico

O desenvolvimento do PHP começou em meados de 1994 por Rasmus Lerdorf  que


lançou uma versão apenas para teste e demonstração, e utilizado pelo seu criador
para o desenvolvimento de uma Home Page visando divulgar e aplicar testes
práticos à nova ferramenta.

A primeira versão à ser usada por outros programadores só foi  disponibilizada em


1995 e foi chamada de "Personal  Home Page Tools". Essa versão foi considerada
apenas como uma revisão da anterior, tanto que não foi muito utilizada. Não foram
feitos muitos trabalhos com ela, apenas alguns utilitários já bastante comuns para
as  Home Pages da época, um guestbook, um contador de visitas e algumas outras
aplicações pequenas. Esta versão foi revisada e refeita em meados de 1995 e
nomeada de PHP/FI 2.0. O FI era a indicação de um outro pacote que Rasmus
havia criado para permitir a interpretação de comandos HTML, o Form Interpret. Ele
combinou os scripts da Personal Home Page Tools com o Form Interpret e adicionou
suporte ao mSQL, estava criado o PHP/FI. A partir daí o PHP/FI deu um grande
passo em seu desenvolvimento, e pessoas alheias ao seu projeto começaram a
contribuir em seu código fonte.

É difícil apontar estatísticas precisas, mas estimasse que em 1996 cerca de 15.000
sites em todo o mundo utilizavam o PHP/FI, já em meados de 1997 este número
subiu para algo em torno de 50.000. Em 1997 houve outra grande mudança no
PHP, o seu criador Rasmus Lerdorf anunciou que devido ao grande número de
projetos que havia recebido de outras pessoas iria a partir dali montar um grande
time para tratar do desenvolvimento e administração do PHP. Então iniciou-se o
desenvolvimento de uma nova versão, o PHP 3.0. Nesta versão uma parte do
código do PHP/FI foi portada no PHP 3.0 e a outra foi completamente rescrita [BAK
99].

Em 1999 estimava-se que o número de sites que utilizam o PHP tanto a versão
PHP/FI 2.0 como a PHP 3.0, gira em torno de 1.000.000 em todo o mundo [BAK
99].

3.3. Bancos de Dados

"Conectar um Banco de Dados via Internet nunca foi uma das tarefas mais simples.
Talvez a mais forte e mais significante característica do PHP em se tratando de
acesso a Banco de  Dados via Internet, é o vasto número de Banco de Dados à que
ele dá suporte".[FIS 99] Os Bancos de Dados a seguir são os suportados pelo PHP:
a) Adabas D
b) Interbase
c) Solid
d) DBase
e) MSQL
f) Sybase
g) Empress
h) MySQL
i) Velocis
j) FilePro
k) Oracle
l) Unix dbm
m) Informix
n) PostgreSQL

3.4. Instalação em Sistemas UNIX

Para instalar o PHP existem alguns pré-requisitos. A configuração inicial é:

a) Habilidade básica em Sistemas UNIX – ser capaz de operar o comando "make"


b) Um Compilador da Linguagem de Programação C
c) Um Servidor Web

Tendo essas ferramentas instaladas e possuindo o devido conhecimento para


operá-las, o PHP já pode ser instalado.
Por se tratar de  uma Linguagem nativa do Apache Web Server, então
primeiramente deve-se instalar o Servidor Web e logo em seguida o PHP como
sendo seu módulo.

1. gunzip apache_1.3.x.tar.gz
2. tar xvf apache_1.3.x.tar
3. gunzip php-3.0.x.tar.gz
4. tar xvf php-3.0.x.tar
5. cd apache_1.3.x
6. ./configure –prefix=/www
7. cd ../php-3.0.x
8. ./configure –with-mysql –with-apache=../apache_1.3.x –enable-track-vars
9. make
10. make install
11. cd ../apache_1.3.x
12. ./configure –prefix=/www –activate-module=scr/modules/php3/libphp3.a
13. make
14. make install

Figura 3.3 - Passos para instalação do PHP em sistemas UNIX

Feita a instalação do Apache Web Server e do PHP respectivamente o próximo


passo é tratar da configuração, mas isso será visto mais adiante. Agora mostra-se
como se faz, para no momento da instalação dar suporte aos Bancos de Dados
suportados pelo PHP.

No momento da instalação, na linha 8 da figura 3.3, o Banco de Dados MySQL foi


configurado como o Banco de Dados que será suportado pelo PHP durante a sua
execução. Mas como foi feito com o MySQL pode-se configurar outros Bancos de
Dados também, e não apenas um mas quantos forem necessários, desde que, é claro,
seja um Banco de Dados suportado. A maneira como isso será feito é a seguinte:

Bancos de Diretivas Descrição


Dados

Adabas D -with-adabas=DIR Sendo que o parâmetro a ser passado é o diretório onde o


Banco de Dados Adabas D será instalado, tendo como
default é o diretório /usr/local/adabasd.

Dbase -with-dbase Suporte para Dbase, o qual é habilitado por default.

FilePro -with-filepro Suporte para Filepro, o qual é habilitado por default.

MSQL -with-msql=DIR Adiciona suporte ao mSQL. DIR corresponde ao diretório


para instalação, sendo default o diretório /usr/local/Hughes.

MySQL -with-mysql=DIR Adiciona o MySQL com DIR sendo o diretório para


instalação, tendo como default o diretório /usr/local.

Oracle -with-oracle=DIR Suporte para Oracle 7.0 até 7.3

PostgreSQL -with-pgsql=DIR O parâmetro é o diretório de instalação do PostgreSQL,


tendo como default o diretório /usr/local/pgsql.

Solid -with-solid=DIR O diretório default para instalação é o , /usr/local/solid.

Sybase -with-sybase=DIR O parâmetro é o diretório de instalação do Sybase, tendo


como default o diretório /home/sybase.

Sybase-CT -with-sybase-ct=DIR Adiciona suporte ao Sybase-CT. O diretório default para


instalação é o /home/sybase.

Velocis -with-velocis=DIR O diretório default é o /usr/local/velocis.

Tabela 3.1 - Habilitação do Banco de Dados durante a instalação do PHP.

Existe uma outra forma de instalar o PHP, através dos pacotes RPMs (RedHat
Package Manager). "Os pacotes RPMs são um recurso que contém todos os
arquivos que são necessários para instalação em um único pacote, permitindo que
tudo seja feito automaticamente. Isso evita a necessidade de descompactar e
compilar arquivos como foi feito na instalação anterior" [JAM 99]. No caso do PHP,
a instalação utilizando pacotes RPMs pode não ser muito recomendável, tendo em
vista que o PHP possui algumas configurações que são específicas no código.
Instalando o PHP dessa forma o Apache Web Server inicialmente não processará as
páginas em formato PHP, sendo necessário alguns ajustes nos arquivos de
configuração do Apache Web Server.

3.5. Configuração

A configuração do PHP é toda ela baseada em um arquivo, o php3.ini, que é o


arquivo que será lido sempre que as páginas em PHP forem executadas no servidor.
Ele possibilita a configuração de todos os diretórios e seus respectivos caminhos
envolvidos na execução do PHP, bem como de todos os Bancos de Dados
suportados, além da segurança e do limite de memória que será disponibilizada
para a execução dos arquivos PHP. A seguir tem-se alguns exemplos de
configuração:

Configuração
Descrição

doc_root string
É o diretório de root no servidor, em modo de segurança nenhum arquivo que
estiver fora deste diretório ficará disponível para usuários comuns.

include_path string
Especifica onde devem ser armazenados os arquivos em PHP para serem
processados e exibidos.

user_dir string
Diretório destinado para uso dos usuários de arquivos PHP.

mysql.allow_persistent boolean
Define se é permitido insistência à conexão ao Banco de Dados.

mysql.max_persistent integer
Se for permitido, informar o máximo de insistências permitidas por processo.

mysql.max_links integer
O número máximo de conexões ao Banco de Dados permitidas por processo,
incluindo as insistências.

Tabela 3.2 - Exemplos de configuração do PHP.

Mas, dependendo da forma como o PHP foi instalado será necessário mais algumas
configurações. Se a instalação foi utilizando pacotes RPM então devemos também
configurar o arquivo do Apache Web Server httpd.conf.

Assumindo que a instalação foi toda ela com RPM, algumas linhas do arquivo
httpd.conf deverão ser descomentadas ou até mesmo adicionadas:

#Extra Modules
AddModule mod_php.c
AddModule mod_php3.c
AddModule mod_perl.c

#Extra Modules
LoadModule php_module modules/mod_php.so
LoadModule php3_module modules/libphp3.so
LoadModule perl_module modules/libperl.so

E deve-se adicionar a linha:


AddType applications/x-httpd-php3.php3

Feito isso o Apache Web Server está apto para executar arquivos em formato PHP.

3.6. Sintaxe Básica

A seguir será dada uma idéia geral a respeito da sintaxe do PHP.


3.6.1. Delimitadores

Existem quatro formas de se delimitar um conjunto de código PHP dentro de um


código HTML.

O interpretador reconhece um código PHP pelas seguintes tags:

<?
[código]
?>
Esta é a forma mais utilizada.

<?php
[código]
?>
Forma também bastante comum e utilizada pelos programadores.

<script language="php">
[código]
</script>
Este caso é utilizado em editores HTML que não reconhecem o PHP como uma tag.
Se as outras formas forem utilizadas o editor poderá acusar erro no HTML.

<%
[código]
%>
É uma forma que está sendo eliminada para futuras versões do PHP.

3.6.2. Separador de Instruções

Assim como nas linguagens de programação mais conhecidas, como o C e o Perl


por exemplo, no PHP é necessário separar cada instrução do conjunto de código por
ponto-e-vírgula.

3.6.3. Definição de Variáveis

Todas as variáveis são definidas através de um "$"  seguido de uma string que
deve iniciar por uma letra ou o caracter "_".

O PHP é case sensitive, ou seja, diferencia maiúscula de minúscula, a variável


$nome é diferente da variável $NOME. Como o PHP já possui algumas variáveis
pré-definidas cujos nomes são formados por letras maiúsculas, é aconselhável
evitar-se usar variáveis com letras maiúsculas.

3.6.4. Comentários

A forma de comentário do PHP é semelhante ao das linguagens C e C++ e com os


comentários do UNIX shell.

Pode-se fazer comentários de duas formas:

a) Comentando uma linha:


É feito utilizando-se o caracter "#" ou duas barras (//).

<?php Print “Correto”; #esta é uma forma ?>


<?php Print “Correto”; //esta é outra forma ?>

Figura 3.4 - Exemplo de comentário de uma linha em PHP

b) Comentando mais de uma linha:


É aplicado utilizando-se os caracteres "/*" para o início do comentário e "*/" para
finalizar o mesmo.

<?php Print “Correta”; /* Comentando mais de uma linha em PHP.

*/

?>

Figura 3.5 - Exemplo de comentário de mais de uma linha em PHP

3.7. Exemplos

3.7.1. Um exemplo simples

Após a realização dos processos de instalação e configuração, é importante se fazer


um exemplo para certificar-se de que tudo está correto. O script a seguir trata-se
de um exemplo simples onde será produzida apenas uma saída.

<html>
<head><title>Testando o PHP</title></head>
<body>

<?php
print "Meu primeiro script em PHP";
?>

</body>
</html>

Exemplo de um script simples em PHP.

Feito isso deve-se salvar o arquivo, como "exemplo.php3" por exemplo, dentro do
diretório dos documentos doApache Web Server (html). Em seguida na janela do
navegador digite o endereço: "http://localhost/exemplo.php3".
Se a página exibida no navegador contiver apenas a saída especificada no código
PHP é sinal que tudo estáfuncionado corretamente. Exibindo-se o código fonte da
página, teremos o seguinte:

<html>
<head><title>Testando o PHP</title></head>
<body>

Meu primeiro script em PHP

</body>
</html>
Exemplo – Código fonte do que será exibido no navegador.

Este código permite mostrar como o PHP funciona, o script foi executado no
servidor deixando disponível ao usuário apenas o resultado em forma de código
HTML.

3.7.2. Exemplo de PHP com formulários HTML

O próximo exemplo mostra como o PHP trabalha com formulários HTML. Sempre
que se pressiona o "Submit" em um HTML alguma informação é enviada ao servidor
para que se produza uma resposta que satisfaça a solicitação feita no formulário,
para isso o PHP trata essas informações como variáveis.

<html>
<head><title>Testando o PHP</title></head>
<body>

<?php
if ($texto != "")
  print "Você digitou "$texto"<br><br>";
?>

<form method=post action="<? print $PATH_INFO; ?>">


<input type="text" name="texto" value="" size=10>
<br>
<input type="submit" name="sub" value="Enviar!">
</form>

</body>
</html>
Exemplo de um PHP com formulário HTML.

Salvando esse arquivo e carregando-o no navegador ele inicialmente será apenas


um formulário para digitar um texto. Digitando o texto pela primeira vez, a variável
$texto deixará de ser vazia e conterá o texto digitado, então a partir daí o PHP
exibirá antes do formulário o conteúdo da variável $texto.

3.7.3. Exemplo do PHP acessando uma base de dados

Para interagir com uma base de dados SQL existem três comandos básicos que
devem ser utilizados: um que faz a conexão com o servidor de banco de dados, um
que seleciona a base de dados a ser utilizada e um terceiro que executa uma query
SQL.[BAR 99]

O banco de dados utilizado neste exemplo será o Banco de Dados MySQL, que pode
ser copiado gratuitamente no endereço http://www.mysql.org

a) Conectando ao servidor de banco de dados:


Para conectar-se ao servidor de banco de dados o comando é mysql_connect, a sua
sintaxe é a seguinte:
Int mysql_connect(string [hostname[:port][:/path/to/socket]], string[usuário],
string[senha]);

Abre uma conexão a um servidor MySQL, retorna id_link se tiver sucesso, caso
contrário, retorna False.[FIS 99]
Os parâmetros exigidos neste comando são o endereço do servidor (hostname), o
nome do usuário (usuário) e a senha para conectar-se ao servidor.

$conectou = mysql_connect("localhost", "root", "pwdphp");


Exemplo de conexão ao servidor de banco de dados.

b) Selecionado o Banco de Dados


Após feita a conexão deve-se selecionar qual banco de dados será utilizado, para
isso usa-se o comando
mysql_select_db, que possui a sintaxe:
Int mysql_select_db(string nome_bd, int [id_link]);

Os parâmetros são o nome do banco de dados a ser selecionado e um identificador


de conexão.

$conecbd = mysql_select_db ("vestiba", $conexao);


Exemplo de conexão a um banco de dados.

c) Executando queries em SQL no banco de dados


Tendo conectado ao servidor e selecionado o banco de dados, pode-se manipular
praticamente todo o banco de dados utilizando-se SQL. Para se escrever comandos
SQL no PHP utiliza-se o comando mysql_query, que possui a seguinte sintaxe:
Int mysql_query (string consulta, int [id_link]);

Envia uma consulta ao servidor MySQL, retorna True se tiver sucesso, caso
contrário, retorna False.[FIS 99].

O exemplo a seguir demonstra a criação de uma tabela com SQL:

$Criatable = mysql_query("CREATE TABLE nomes (codigo INT AUTO_INCREMENT


PRIMARY KEY, nome CHAR(40), email CHAR(50))", $conexao);
Exemplo de escrita SQL em um código PHP.

Assim como no exemplo acima foi executado o comando SQL create table, qualquer
comando de escrita SQL poderia ter sido executado.

4. Apache Web Server

4.1. O que é um servidor Web

Um servidor Web é o responsável pelo controle de distribuição de páginas na


Internet. Sua função é aguardar por requisições de páginas de um cliente
(browser), e ao receber uma requisição ele retorna dados ao cliente, normalmente
paginas HTML com imagens. Ao receber os dados enviados pelo servidor, o browser
apresenta os dados para o  usuário. Os servidores são em conceito muito simples,
fazendo basicamente esse processos de resposta à requisições.

O processos de comunicação entre o cliente e o servidor são feitos através do


protocolo de transferencia de Hyper Texto (HTTP - HyperText Transfer Protocol ),
protocolo esse que padroniza o modo de envio e recebimento de dados, tendo
como característica principal  a sua independência total quanto a plataforma,
podendo por exemplo, estabelecer comunicação entre um servidor Linux, e um
cliente Macintosh sem qualquer problema.
"As informações que  trafegam pela Internet são na sua grande maioria feitos com
a Linguagem de marcação de Hyper Texto (HTML -  Hypertext Markup Language).
Essa linguagem é a base principal de um ambiente Web, permitindo que exista essa
grande  gama de dados disponíveis para toda a Internet" [KAB 98].

Atualmente existem no mercado cerca de 500 servidores Web, disponíveis nas mais
diversas plataformas, de distribuição gratuita até valores que chegam a milhares de
dólares, dependendo dos recursos envolvidos na ferramenta [KAB 98]. Algumas das
características principais a serem observados em um servidor Web são as
seguintes: tipo de distribuição (gratuita ou paga), processo de instalação,
facilidades de customização, performance e consumo de recursos, suporte técnico e
módulos disponíveis são as principais informações a se levar em consideração.

4.2. O servidor Apache

O servidor Apache é uma das mais de 500 ferramentas disponíveis nesse


segmento. Ele está disponível para as plataformas ,Unix Like, Solaris, Sun ,
Windows entre outras. Sendo um software de livre distribuição. Atualmente Apache
é o servidor mais utilizado na Internet tendo aproximadamente 35% de todo o
mercado, segundo a pesquisa do Site http://www.netcraft.com/survey/ . vide
gráfico comparativo (figura 4.1). Algumas das características que o destacam é o
fácil processo de instalação que possui e  uma configuração de arquivos bem
funcional, permitindo que sejam feitos ajustes nas configurações, sem que seja
necessário reiniciar o servidor. O suporte à utilização de protocolos de transferência
de arquivos
com segurança, também tem outra característica importante implementada através
de módulos no servidor.

O Apache é implementado como um conjunto de módulos, sendo grande partes


desse módulos desenvolvidos por terceiros. Com a utilização desse módulos
consegue-se uma grande flexibilidade na sua utilização, trazendo incontáveis
funcionalidades para o servidor.

Figura 4.1 - Gráfico comparativo da utilização do Apache no mundo

4.3. Breve Histórico

Apache foi criado em 1995 quando um grupo de desenvolvedores chamados The


Apache Team - Equipe Apache, consolidaram uma série de patches - remendos-
que eles havia feito para o HTTP daemon do Centro Nacional de Aplicações para
Supercomputação (NCSA). Um ano depois, Apache já era o mais popular servidor
na Web.
4.4. Instalação

O processo de instalação do servidor Apache, no trabalho desenvolvido, visaza


apenas criar um ambiente com configurações padrões, sendo apenas utilizadas
configurações específicas para o uso do módulo PHP. Sendo assim, foi instalado um
pacote RPM da distribuição brasileira da conectiva. Esse processo é bastante
simplificado, não permitindo configurações específicas, porém sua instalação é
bastante eficiente permitindo já ao seu término a inserção de arquivos HTML para
serem processados.

Em um ambiente Linux, no diretório que contém o pacote Apache digita-se:


Shell>rpm –i apache-versão.i386.rpm
Com esse processo os módulos padrões, bem como as configurações, os scripts, os
diretórios default e os diretórios padrões serão configurados sem intervenção do
usuário.

4.4.1. Os módulos do Apache

Módulo é um componente de software que adiciona funcionalidade para o servidor


Apache. Através deles, define-se quais as características estendidas serão usadas
no servidor. Um exemplo de definição de um módulo à ser usado, seria algo como:
Add module mod_php3.c

Esta linha no arquivo de configuração do apache, httpd.conf, permite a utilização do


interpretador PHP caso este tenha sido instalado. Existe uma série de módulos que
são instalados na configuração padrão, sendo que cada um dos módulos necessita
mais memória e espaço do arquivo executácel apache. Assim, com a configuração
dos arquivos pode-se escolher quais módulos serão usados permitindo assim
melhor a rapidez do servidor e criar configurações de acordo com a necessidade do
usuário.

4.4.1.1. O módulo PHP

O interpretador PHP pode ser compilado tanto como um interpretado CGI isolado do
Apache ou como um módulo do Apache.

Se configurado como interpretador CGI, toda vez que um script PHP precisa ser
interpretado o servidor Web lança uma instância do PHP, isso obviamente causará
diminuição de performance, pois serão dois processos sendo executados, vide
figura abaixo:

Figura 4.2 - Comparação entre PHP como um CGI e um Módulo Apache


"Quando compilado como módulo do Apache o PHP roda no mesmo espaço de
memória do processo do servidor Apache, causando aumento da performance.
Além disto, características como conexões persistentes ao banco de dados e
permissão de uma segurança adicional somente estão disponíveis no PHP como
módulo" [CAS 00].

4.5. Configuração

4.5.1. Arquivos de configuração

Os três principais arquivos de configuração do servidor apache são:

a) Httpd.conf
b) Access.conf
c) Srm.conf

Estes três arquivos são textos puro, que são usados na inicialização do servidor
para dizer como  o servidor deve
rodar. Neles existem dois tipos de informação: diretivas do servidor e comentários
opcionais.

Uma diretiva é como um comando para o servidor, dizendo à ele qual tarefa deve
executar.

4.5.1.1. Httpd.conf

Este tem dezenas de diretivas, que definem várias características de inicialização.


Como por exemplo:

a) A porta Linux na qual o servidor receberá as requisições


b) Arquivos de log
c) Com que usuário o servidor estará rodando
d) E-mail do administrador
e) Diretórios de configuração
f) Erros e log
g) Nome do servidor
h) Tempo limite entre recebimento e envio de informação
i) Número máximo de requisições de páginas

Estas e outras diretivas definem a "espinha dorsal" do servidor.

4.5.1.2. Srm.conf

Este arquivo é o que define a configuração dos recursos disponíveis. Ele diz quais
recursos serão oferecidos pelo Web Site, e quando e onde eles serão oferecidos.
Algumas diretivas ficam incluidas neste arquivo:

a) Diretório onde ficarão os documentos


b) Arquivo padrão de inicialização do diretório
c) Quais ícones devem ser mostrados para os diferentes tipos de arquivos
d) A linguagem que um documento pode usar, por exemplo o português
e) Os álias utilizados para os diretórios
f) Os diretórios dos scripts para utilização de CGI's
g) Mensagens customizadas de erros
A explicação destas e de outras diretivas contidas neste arquivo poderiam tomar
várias páginas, porém de forma global observa-se que este arquivo define
características de estrutura interna de diretórios, links simbólicos, definição de
diretórios para usuários, imagens e mensagens de erros exibidas no browser, entre
outros.

4.5.1.3. Access.conf

Este é usado para definir as permissões de acesso e ítens como: arquivos,


diretórios e scripts do Web Site. Algumas diretivas importantes:

a) Cada diretório que o apache faz acesso pode ser configurado com respeito à
quais características estão
habilitadas ou desabilitadas
b) O nome dos diretórios e sub-diretórios que podem ter links simbólicos
c) Opções para arquivos padrões e diretório, por exemplo, se um dirtório não
possue uma página índice pode-se definir neste arquivo qual página será exibida

4.6. Protocolo SSL (Secure Socket Layer)

Usar um servidor com suporte SSL é uma boa maneira de providenciar segurança
para um Web Site sem a
necessidade de nenhuma mudança nos códigos das páginas. O que o SSL faz é usar
criptografia para proteger o fluxo de informação entre o servidor e o browser. Este
protocolo não somente encriptografa a informação que trafega na Internet mas,
também garante autencidade tanto do servidor quanto do cliente, ou seja, um
usuário de um Site com o protocolo SSL tem certeza da origem dos dados.

O SSL usa uma técnica de encriptação chamada criptografia de chave-pública, onde


o servidor envia uma chave-pública para o cliente criptografando informações na
qual somente o servidor poderá descriptografar com uma chave-privada. O cliente
usa a chave-pública para encriptografar e enviar ao servidor sua própria chave
identificando ela somente para o servidor e prevenindo um ataque no meio da
comunicação dos dados.

HTTP seguro (HTTPs) se distingue de conexões regulares servindo informações


numa porta diferente da 80, normalmente na porta 443. Clientes que solicitam uma
URL com HTTPs automaticamente são direcionados para a porta 443, tornando fácil
para o servidor responder as requisições para os diferentes protocolos.

Existem muitas soluções para implementar SSL com Apache, incluindo Apache-SSL
e as implementações
comerciais StrongHold e Raven SSL.

5. Implementação

O presente capítulo tem por objetivo apresentar e descrever o sistema


implementado neste trabalho. A parte referente à modelagem dos dados para a
construção da base de dados também está descrita neste capítulo incluindo
descrição das tabelas, modelo e-r, dicionário de dados e a sintaxe SQL utilizada
para a criação das tabelas no banco de dados.

As ferramentas utilizadas foram:


a) Sistema Operacional – Linux (Capítulo 1) – versão Conectiva 4.2
b) Banco de Dados – MySQL (Capítulo 2) – versão 3.22.25
c) Linguagem de Programação – PHP (Capítulo 3) – versão 3.0
d) Servidor Web – Apache Web Server (Capítulo 4) – versão 1.3.9

De posse e tendo o conhecimento necessário das ferramentas mencionadas acima,


foi desenvolvida uma Home Page onde usuários podem realizar provas virtuais de
concursos vestibulares onde, além disto, pode-se consultar as questões
cadastradas no banco de dados.

A prova virtual possibilita que o usuário teste seus conhecimentos nas diversas
matérias que compõem um concurso vestibular durante o processo de preparação
do candidato. Essas matérias são: Matemática, Português, Física, História, Química,
Geografia e Biologia. Para a realização da prova o usuário tem a possibilidade de
escolher alguns critérios das questões que serão aplicadas na prova virtual. Por
exemplo, além da matéria que se deseja, pode-se também classificar as questões
pelo ano em que elas foram aplicadas e o local de onde elas fizeram parte, ou seja,
em qual universidade ela foi aplicada. Outros critérios possíveis são o número de
questões que se quer na prova e o nível de dificuldade da mesma, que pode ser
fácil, intermediário, difícil ou aleatório. Com todos esses parâmetros passados já é
possível realizar a prova virtual. Após a elaboração e realização da mesma, ou seja,
depois que o usuário já tiver
respondido todas as questões, é possível se fazer a correção retornando as
respostas corretas confrontadas com as respostas dadas pelo usuário.

Para a realização da consulta ao banco de dados, igualmente à prova, deve-se


passar parâmetros, que são matéria, local e ano. Um diferencial é a possibilidade
de se consultar por texto, isso significa que através de uma palavra-chave digitada
num campo disponível, tem-se retornado um resultado de consulta com questões
referentes àquela palavra-chave. Isto é possível passando-se ou não os outros
parâmetros, ou seja, pode-se realizar somente a consulta por palavra-chave. 

Com a apresentação de uma breve descrição da implementação, onde deu-se uma


idéia do funcionamento e do objetivo da mesma, o capítulo segue com uma
descrição detalhada do processo de construção da Home Page para explicação da
implementação de todos os itens que aqui foram citados. Primeiramente será
apresentado um fluxograma com a descrição dos seus módulos para compreensão
mais aprofundada, em seguida todo o processo de modelagem dos dados passando
para as funções PHP que foram utilizadas e finalizando com a implementação de
todos os arquivos PHP e HTML que compõem a Home Page.

5.1. Fluxograma

A figura 5.1 representa o fluxograma do sistema implementado neste trabalho.


Figura 5.1 - Fluxograma da seqüência de ações executadas durante o
processo de visita de um usuário à
Home Page

5.1.1. Descrição detalhada dos módulos

A seguir tem-se uma descrição detalhada de cada módulo do fluxograma


representado na figura 5.1.

5.1.1.1. Módulo 1 – Fazer Prova Virtual


Aqui está representado o principal ponto da implementação, é onde se dá a partida
para que o usuário realize a prova. Tem os seguintes passos:

a) 1.1 – Selecionar Matéria: uma matéria entre as cadastradas no banco de dados


deve ser selecionada.

b) 1.2 – Selecionar Local: seleciona-se um local de onde a prova é originada, ou


seja, onde ela foi aplicada em determinada ocasião.

c) 1.3 – Selecionar Ano: é onde escolhe-se o ano na qual as questões que


formularão a prova foram aplicadas.

d) 1.4 – Quant. de Questões: representa a quantidade de questões que se deseja


na prova.

e) 1.5 – Nível de dificuldade: é o nível de dificuldade da prova que será formulada,


ele pode ser: fácil, intermediário, difícil ou aleatório. Este último formula a prova
com um misto dos outros três níveis.

f) 1.6 – Acessar BD/Realizar Consultas: após todos os parâmetros acima terem sido
selecionados, o usuário requisita a formulação da prova e o arquivo prova.php3 se
encarregará de acessar o banco de dados e de posse dos parâmetros realizar as
consultas SQL de modo a satisfazer as necessidades do usuário.

g) 1.7 – Retornar arquivo HTML do Servidor: realizando as consultas todos os


resultados da mesma são retornados do servidor na forma de um arquivo HTML,
que será exibido ao usuário.

h) 1.8 – Corrigir Prova no Servidor: com a prova à sua disposição e após responde-
la, o próximo passo é tratar da correção da mesma. Isso é feito através do arquivo
corrige.php3, que enviará ao servidor de banco de dados as respostas dadas pelo
usuário e comparará as suas respostas com as corretas.

i) 1.9 – Retornar Resultados: feita a correção no servidor, os resultados retornarão


até o usuário em forma de um arquivo HTML.

5.1.1.2. Módulo 2 – Busca Rápida

A busca rápida dá a opção de pesquisa no banco de dados por palavras chave, ou


seja, basta digitar uma palavra para se buscar questões no banco que contenham
de alguma forma esta palavra.

a) 2.1 – Digitar Palavra: é o campo onde a palavra que se deseja será digitada.

b) 2.2 – Acessar BD/Realizar Consulta: após digitar a palavra e fazer a requisição


da consulta, o arquivo buscarap.php3 acessa o banco de dados e realiza consulta
SQL em busca das questões que satisfaçam a condição.

c) 2.3 – Retornar arquivo HTML do Servidor: ao realizar-se as consultas no servidor


um arquivo HTML com os resultados é retornado do servidor.

d) 2.4 – Mostrar Resultado da Consulta: o arquivo HTML retornado do servidor é


exibido ao usuário com o resultado da consulta por ele solicitada.

5.1.1.3. Módulo 3 – Consultar Questões


Neste módulo está representada a possibilidade de se fazer uma consulta mais
aprofundada às questões que estão cadastradas no banco de dados.

a) 3.1 – Selecionar Matéria: seleciona-se a matéria que se deseja passar como


parâmetro para realizar a consulta.

b) 3.2 – Selecionar Ano: consultar questões referentes à determinado ano.

c) 3.3 – Selecionar Local: consultar questões referentes à determinado local onde a


questão foi aplicada.

d) 3.4 – Digitar Palavra: caso deseja-se consultar as questões também por uma
palavra chave, basta digita-la no campo disponível.

e) 3.5 – Quant. Questões: aqui deve-se selecionar a quantidade de questões que se


deseja ser exibida por página no resultado da consulta.

f) 3.6 – Acessar BD/Realizar Consultas: com todos os parâmetros selecionados, o


arquivo consulta.php3 acessará o banco de dados e processará a consulta conforme
os dados passados pelo usuário.

g) 3.7 – Retornar arquivo HTML do Servidor: após realizar as consultas um arquivo


HTML é enviado do servidor contendo as informações resultantes da consulta.

h) 3.8 – Mostrar Resultados da Consulta: o arquivo HTML que retorna do servidor é


mostrado ao usuário com o resultado da consulta.

5.1.2. Descrição do Fluxograma

Inicialmente, tem-se as opções de realizar a prova virtual, consultar questões por


palavras e consultar questões por outros campos.

Para a realização da prova virtual, o processo se seguirá com a escolha dos campos
a serem requisitados no Banco de Dados para a formulação da prova, são eles:
matéria, local, ano, quantidade de questões da prova e nível de dificuldade. Feita a
escolha dos campos, pode-se ainda recusar a formulação da prova retornando para
a página inicial do Web Site. Por outro lado se houver prosseguimento ao processo
realizando a formulação da prova, todos os parâmetros selecionados são enviados
ao Banco de Dados em forma de consulta SQL por um arquivo .php3.
Este arquivo, por sua vez, realiza no Banco de Dados em questão, MySQL, todos o
processos de consulta e seleção requisitados anteriormente retornando um arquivo
em formato HTML que será exibido na tela com o resultado da sua consulta. Tendo-
se a prova formulada à disposição, pode-se ainda reformular uma outra prova não
respondendo-a e retornando à página onde se tem todos os campos à serem
preenchidos. Se a prova for respondida, após isso ocorrerá o processo de correção
da mesma no servidor e finalmente retornando um arquivo HTML com os
resultados.

Na opção de consultar questões por palavras, deve-se simplesmente digitar no


campo a palavra que se deseja consultar nas questões armazenadas no Banco de
Dados. Com isso o arquivo .php3 irá buscar no Banco de Dados todas as questões
que contém a palavra especificada, retornando um arquivo HTML do servidor com o
resultado encontrado e exibindo na tela as questões selecionadas através deste
critério.
Optando-se por fazer uma consulta um pouco mais criteriosa, deve-se realizar a
busca por outros campos além da palavra. A maneira como isso funciona é a
seguinte: após escolher esta opção, deve-se selecionar os campos matéria, ano e
local de acordo com as necessidades. Em seguida, existe a alternativa de, além de
se buscar por esses critérios já selecionados, consultar também por uma palavra
que deseja-se estar presente entre as questões cadastradas no Banco de Dados.
Se for decidido fazer a busca desta forma, simplesmente deve-se digitar a palavra
no campo e prosseguir com a consulta. Se, por outro lado, a busca por palavras
não for utilizada, o processo de consulta segue normalmente com a seleção da
quantidade de questões que se deseja por página na exibição da consulta. Com os
campos necessários para a realização da consulta devidamente preenchidos ou
selecionados, o processo pode ser interrompido recusando-se a consulta e
retornando à página inicial do Web Site. Entretanto, se for dado seguimento, a
consulta é estruturada em forma de SQL e enviada ao Banco de Dados para ser
processada e retornar do servidor um arquivo em HTML que será exibido na tela
com o resultado final da consulta.

5.2. Modelagem dos Dados

Agora será relatado como realizou-se todo o processo da modelagem dos dados
envolvidos na implementação desenvolvida neste trabalho. Começando com uma
descrição das tabelas, passando após para um Modelo E-R, seguindo com um
dicionário dos dados e finalizando com a sintaxe SQL utilizada para a criação das
tabelas no Banco de Dados utilizado, o MySQL.

5.2.1. Descrição das Tabelas

No banco de dados vestiba da implementação tem-se as seguintes tabelas:

a) Questões
b) Resposta

A tabela questões contém as informações sobre a questão que será aplicada na prova
virtual, ou simplesmente exibida como resultado de uma consulta. Seus campos são:

Campo Descrição
numquest Indica o número da questão no banco de dados. (código)
questao  Contém a descrição da questão que está armazenada, qual é a pergunta.
Campo reservado para eventual necessidade da questão conter alguma imagem. 
imagem 
Só é utilizado se necessário.
materia  Armazena à qual matéria a questão se refere.
ano  Indica em que ano a questão foi aplicada no vestibular.
local  É o local onde a questão foi aplicada.
certas  Determina a quantidade de usuários que acertaram a questão.
erradas  Determina a quantidade de usuários que erraram a questão.

Tabela 5.1 - Descrição dos campos da tabela Questões.

A tabela resposta contém os dados das respostas das questões. Seus campos são:

Campo Descrição
numresp É o número da reposta da questão.
numquestSe refere à qual questão da tabela questões a resposta corresponde.
descricao Contém a descrição da resposta.
imagem É um campo utilizado quando a resposta contém alguma imagem, só quando
necessário.
certa Indica se a resposta descrita é a verdadeira ou não.
Tabela 5.2 - Descrição dos campos da tabela resposta.

5.2.2. Modelo E-R (Entidade - Relacionamento)

As tabelas envolvidas no trabalho tem uma relação entre si, que é representada por
um modelo e-r. Enquanto a tabela questões contém apenas as suas informações, a
tabela resposta, por sua vez, necessita da informação de qual questão determinada
resposta faz parte, essa informação é buscada na tabela questões através do
campo numquest que corresponde ao número da questão.

Figura 5.2 - Modelo E-R.

5.2.3. Dicionário de Dados

As tabelas 5.3 e 5.4 representam o dicionário de dados das tabelas questões e


resposta
respectivamente. Serão apresentados juntamente com todos seus campos as
propriedades de cada
um, como tipo, tamanho, etc.

Campo
Tipo
Tamanho
Not Null
Extra
Ch. Primária
numquest
Mediumint
 
X
Auto_increment
*
questao
Text
 
X
 
 
imagem
Varchar
80
 
 
 
materia
Varchar
25
X
 
 
ano
Varchar
4
X
 
 
local
Varchar
20
 
 
 
certas
Float
10,2
 
 
 
erradas
Float
10,2
 
 
 

Tabela 5.3 - Dicionário de Dados da tabela questões.

Campo
Tipo
Tamanho
Not Null
Ch. Primária
numquest
Int
11
X
*
numresp
Char
1
X
*
descricao
Blob
 
X
 
imagem
Varchar
80
 
 
certa
Char
1
X
 

Tabela 5.4 - Dicionário de Dados da tabela resposta.

5.3. Sintaxe SQL para criação das tabelas

Todas as tabelas da implementação foram criadas utilizando-se comandos SQL. A


seguir será mostrado a sintaxe desses comandos durante a criação das tabelas
questões e resposta.

a) Tabela questões
CREATE TABLE questoes (
numquest mediumint NOT NULL auto_increment,
questao text NOT NULL,
imagem varchar(80),
materia varchar(25) NOT NULL,
ano varchar(4) NOT NULL,
local varchar(30),
certas float(10,2),
erradas float(10,2)
PRIMARY KEY (numquest));

b) Tabela resposta
CREATE TABLE resposta (
numquest int(11) NOT NULL,
numresp char(1) NOT NULL,
descricao blob NOT NULL,
imagem varchar (80),
certa char(1) NOT NULL,
PRIMARY KEY(numquest,numresp),
FOREIGN KEY(numquest));

5.4. Descrição das funções PHP utilizadas

No decorrer deste trabalho, houveram várias situações onde funções nativas do


PHP tiveram que ser utilizadas, dentre as quais pode-se citar a necessidade de se
gerar números aleatórios para formular a prova aleatória, e para o tratamento das
strings na implementação da busca rápida e na busca por texto.

Entre as funções que foram utilizadas deve-se dar destaque também às que se
relacionam a banco de dados, mais especificamente ao MySQL, que permitem que
se conecte à ele, realize consultas SQL no servidor, entre outras finalidades. Elas
serão aqui apresentadas e comentadas uma a uma. As outras funções também
receberão um comentário individual, apresentando inclusive a sua sintaxe.

a) Função: trim
Sintaxe: trim(string str);
Comentário: apaga os espaços em branco do início e fim de uma string.

b) Função: explode
Sintaxe: explode(string separador, string str);
Comentário: retorna um array contendo as partes da string com valores separaos
por um separador.

c) Função: count
Sintaxe: count(mixed matriz);
Comentário: retorna o número de elementos de um array. Retorna 1 se a variável
não for um array e 0 se a variável não estiver definida.

d) Função: strlen
Sintaxe: strlen(string str);
Comentário: retorna o comprimento de uma string.

e) Função: ceil
Sintaxe: ceil(float número);
Comentário: retorna o próximo número inteiro maior ou igual ao número
especificado.

f) Função: range
Sintaxe: range(int lim_inferior, int lim_superior);
Comentário: retorna um array contendo um seqüência de números inteiros no
intervalo especificado.
g) Função: srand
Sintaxe: srand(int semente);
Comentário: altera a semente do gerador de números aleatórios para a função
rand();

h) Função: rand
Sintaxe: rand([int limite_inf], [lim_sup]);
Comentário: retorna um número aleatório dentro do intervalo especificado.

i) Função: shuffle
Sintaxe: shuffle(array matriz);
Comentário: embaralha os elementos de um array.

j) Função: mysql_connect
Sintaxe: mysql_connect(string[hostname],[usuário], [senha]);
Comentário: abre uma conexão a um servidor MySQL, retorna id_link se tiver
sucesso, caso contrário retorna false.

k) Função: mysql_select_db
Sintaxe: mysql_select_db(string nome_banco_dados);
Comentário: depois de estabelecer conexão ao servidor de banco de dados, esta
função faz conexão com o banco de dados requerido na função.

l) Função: mysql_query
Sintaxe: mysql_query(string consulta);
Comentário: trabalha enviando consultas em SQL ao servidor MySQL. Retorna true
se tiver sucesso, caso contrário retorna false.

m) Função: mysql_fetch_array
Sintaxe: mysql_fetch_array(int resultado);
Comentário: retorna um array que indica o próximo registro do resultado da
consulta ou false se não houver mais registros no array.

n) Função: mysql_data_seek
Sintaxe: mysql_data_seek(int id_resultado, int num_linha);
Comentário: durante a verificação dos registros resultantes da consulta SQL esta
função move o ponteiro interno dos resultados. Retorna true se tiver sucesso, caso
contrário retorna false.

o) Função: mysql_num_rows
Sintaxe: mysql_num_rows(int resultado);
Comentário: retorna o número de registros contidos em um resultado de consulta
SQL enviada ao servidor.

5.5. Implementação PHP e HTML

O presente item tem por objetivo apresentar a implementação de todos os arquivos


.php3 inclusos no estudo de caso, bem como uma breve descrição dos arquivos
HTML. Os arquivos serão explicados um a um em suas principais características de
implementação.

5.5.1. Index.html – Home Page


O objetivo desse arquivo é ser ponto de partida para as páginas que permitem
fazer prova virtual e consulta a questão do banco de dados. Também é possível
efetuar uma consulta rápida, através de palavras chaves digitadas pelo usuário.

A chamada ao arquivo que executa a consulta rápida é assim codificada no arquivo


index.html:

<form action=buscarap.php3 method=get>


<input type=text name=buscar>
<input type=submit value=busca>
</form>

Ao ser solicitada a consulta pelo usuário, é  requerida a execução do arquivo


buscarap.php3 no servidor, sendo enviada as palavras do formulário como
parâmetro para o arquivo PHP. Após execução é retornada a página HTML com as
questões que satisfazem as palavras chaves.

Os outros dois links existentes na página servem respectivamente para solicitar a


página de prova virtual e consulta de questões. Sua codificação fica assim:

<a href="consulta.html">Consulta</a>
<a href="prova.html">Prova virtual</a>

Sendo assim essas duas páginas não utilizam nenhuma implementação PHP, sendo
arquivos de HTML puro.

5.5.2. Prova.html

Este arquivo é o ponto principal da Home Page, pois será através dele que todos os
parâmetros para execução da prova virtual serão enviados ao arquivo prova.php3
que criará a prova virtual.

Nesta página o usuário poderá optar pelos seguintes parâmetros para formulação
da prova:
a) Matéria – através de um menu cascata será possível escolher entre as matérias
disponíveis, somente uma será selecionada, sendo sua escolha obrigatória.

b) Local  - através de um menu cascata o usuário poderá selecionar, um dos locais


das quais se originam as questões, ou seja qual universidade  a questão foi
aplicada. Sua escolha é opcional, caso não seja escolhido nenhum local , a criação
da prova se baseará em todas as provas dos locais cadastrados .

c) Ano – através de um menu  cascata pode-se selecionar o ano que as questões


foram aplicadas. Sua seleção também é opcional.

d) Quantidade de questões – nesse menu cascata escolhe-se o número de questões


da prova, ou seja dentro das questões encontradas com os parâmetros
selecionados, será apresentada para o usuário uma prova com cinco, dez, quinze ,
ou vinte questões. A  seleção da quantidade de questões é o obrigatória sendo a
padrão cinco.

e) Nível Dificuldade  - nesse menu cascata deve-se escolher qual o nível de


dificuldade da prova a ser criada. As opções são: fácil, intermediário, difícil e
aleatório. O processo de formulação da prova baseia-se nos critério acima
mencionados, assim quando o total de questões encontradas com os parâmetros
fornecidos pelo usuário é retornada, o sistema avalia dentro de todas as questões,
quais as se encaixam no nível de dificuldade solicitado.
Esse critério de dificuldade é baseado em dois campos do banco de dados, que
contem a informação da quantidade  de vezes em que a questão foi acertada ou
errada. Essas informações de  acerto e erro são alimentadas para o banco a cada
vez em que uma prova virtual é corrigida, assim as questões aumentam o numero
de erro ou acerto em uma unidade.
Para elucidar melhor o processo de criação da prova, segue o exemplo: Suponha
que o usuário tenha escolhido o nível fácil. Quando forem encontradas as questões
com os parâmetros enviados, o sistema avaliara a porcentagem de acertos de cada
questão, assim dentro das questões serão escolhidas as  N questões com maior
percentual de acertos, sendo essas enviadas para o usuário.

A chamada ao arquivo .php3 que executa o processo de criação da prova, é assim


codificado no arquivo prova.html:
<form action=prova.php3 method=get>
... menus de seleção dos parâmetros...
</form>

5.5.3. Consulta.html

Este arquivo é o responsável pelas consultas que são realizadas ao banco de dados,
é nele que se passa todos os parâmetros necessários para a realização da mesma,
ele os envia para o arquivo consulta.php3 que se encarrega de processar as
consultas em forma de SQL. 

Os parâmetros requisitados neste arquivo são:


a) Matéria – um menu cascata existe à disposição do usuário para que se escolha
entre as matérias disponíveis qual é a desejada, a opção por uma matéria é
opcional. Caso nenhuma matéria seja selecionada, o resultado da consulta abordará
todas as matérias cadastradas no banco de dados.
b) Ano – a escolha do ano à que se refere a questão também é opcional e é feita
através de um menu cascata. Se nenhum ano for selecionado, todos os cadastrados
estarão incluídos na pesquisa.
c) Local – refere-se ao local onde a questão foi aplicada, também é opcional e em
forma de menu cascata. Se nenhum local for selecionado, a consulta se baseará em
todos os locais cadastrados.
d) Busca por texto – aqui o usuário pode, além de todos os parâmetros
mencionados acima, optar por fazer uma busca por uma palavra-chave. Para isto
basta digita-la no campo disponível, com isso a consulta será processada
considerando a palavra-chave, e somente serão retornadas questões que de
alguma maneira contenham a palavra digitada. 
e) Número de Questões – em um menu cascata deve-se selecionar a quantidade de
questões que se deseja por página para o resultado da consulta. Pode-se optar por
cinco ou dez questões por página.

Com todos estes parâmetros devidamente selecionados, de acordo com a


necessidade do usuário, pode-se dar prosseguimento à consulta com a chamada do
arquivo consulta.php3 que está assim codificado:
<form action=consulta.php3 method=get>
... menus de seleção dos parâmetros...
</form>

5.5.4. Prova.php3
O objetivo deste arquivo é gerar uma página html que contenha uma prova virtual
com questões que atendam aos parâmetros escolhidos pelo usuário. Esse script
receberá cinco variáveis oriundas da página prova.html, essas variáveis são
geradas automaticamente quando o script é chamado, assim ficam disponíveis para
utilização na formulação da prova virtual.
As variáveis são:
a) matéria
b) local de origem da questão
c) ano que a questão foi aplicada
d) número de questões da prova
e) nível de dificuldade

Das variáveis acima, a matéria, o número de questões e o nível de dificuldade são


de seleção obrigatória, sendo o ano e o local opcionais. Caso o ano e o local não
sejam escolhidos, a consulta se baseará em todos os anos e locais cadastrados.

Com toda as variáveis passadas, o script segue-se o processo de geração do código


SQL para consulta das questões. A cada variável existe um processo que determina
o trecho SQL que deve ser criado, assim ao final de todos os processos tem-se uma
string completa com todo o código para ser executado no banco de dados. Somente
o número de questões não influenciará na geração do código SQL, servindo apenas
para controle das questões que serão exibidas.

Tratamento da variável matéria:

$par1 ="materia ='$materia'";


A variável $par1 recebe por exemplo a string materia = historia, caso seja esta a
seleção feita pelo usuário na página prova.html.

Tratamento da variável local:

if ($local <> 'np')


     {
       $par2 ="AND local = '$local'";
     }
Caso o parâmetro local tenha sido selecionado pelo usuário, ou seja, diferente de
np, a variável $par2 receberá a string and local = URI, por exemplo.

Tratamento da variável ano:

if ($ano <> 'np')


     {
       $par3="AND ano = '$ano'";
     }
Caso o parâmetro ano tenha sido selecionado pelo usuário, ou seja, diferente de
np, a variável $par3 receberá a string and ano = 2000, por exemplo.

Tratamento da variável nível de dificuldade:

Fácil (1)
if (($nivel == 1) || ($nivel == 2))
 {
       $par4=" order by porcen desc";
       $cont=0;
       }
Das questões selecionadas, será agregada ao código SQL a cláusula order, que
ordenará de forma decrescente as questões pelo campo porcen. Campo este que
contém o cálculo dos campos certas e erradas, resultando na porcentagem de
pessoas que acertaram a questão.

Intermediário(2)
if (($nivel == 2) and ($numreg>$numques))
 {
      $cont=Ceil(($numreg - $numques)/2);
       } 

Como visto no trecho anterior, caso o nível seja o 2 também será incluida a
cláusula order descrita acima. Porém, dentre as questões selecionadas, e se estas
superarem o número de questões escolhidas pelo usuário, a variável $cont receberá
a posição onde começa a leitura sequencial dos registros.

Difícil(3)
if ($nivel == 3)
  {
      $par4=" order by porcen asc";
       }

Das questões selecionadas, será agregada ao código SQL a cláusula order, que
ordenará de forma crescente as questões pelo campo porcen. Assim, serão
selecionados por primeiro as questões mais difíceis, ou seja, com menor
porcentagem de acerto.

Aleatório(4)
if ($nivel == 4)
{
$numbers = range(1,$numreg-1); //gera uma sequencia de //numeros inteiros do
intervalo especificado
srand(time()); // incia semente aleatoria atraves do tempo shuffle($numbers);
//embaralha os  numeros contidos no array
$cont = $numbers[0]; //primeira posicao do vetor aleatorio   
}

// trecho do código que implementa a seleção e impressão das questões em código


HTML.

if ($nivel == 4)
{
       mysql_data_seek($sqlresult,$numbers[$x]);
       $x++;
}

No primeiro trecho de código, é gerado um vetor com números aleatórios de 1 até


a quantidade de registros encontrados utilizando as funções srand(), shuffle() e
range(). Ao final do trecho que gera uma questão HTML, é testado o segundo
trecho de código descrito acima, que escolhe a próxima questão à  ser impressa
através da posição seguinte do vetor aleatório. Por exemplo, suponha-se que
tenham sido encontrados 30 registros sendo esses numerados de 1 à 30. A posição
1 do vetor tem o valor 10, então com a função mysql_data_seek posiciona-se um
ponteiro para o registro 10, e no próximo laço outro registro será selecionado pelo
valor aleatório do vetor seguinte..
5.5.4.1. Concatenação das variáveis

Com todas os parâmetros devidamente passados pelo usuário e tratados pelo


programa, é formulada a sintaxe da consulta SQL. Isto acontece com a
concatenação de todas as variáveis $parx.
$partodos = $par0.$par1.$par2.$par3.$par4;

O valor de cada variável $parx é o seguinte:


a) $par0 - Select * from questoes where
b) $par1 – materia = $materia
c) $par2 – and local = $local
d) $par3 – and ano = $ano
e) $par4 – order by porcen asc(desc)

Após estar formado o código SQL, segue-se os passos:


a) conexão com o servidor MySQL
Através da função: mysql_connect (localhost,usuário,senha) o script faz a
conexão com o servidor MySQl.

b) conexão com a base de dados vestiba


Através da função: mysql_select_db (vestiba) é feita a seleção do banco de dados a
ser usado, nesse caso o banco vestiba

c) execução da query da variável $partodos


Através da função: $sqlresult = mysql_query ("$partodos"), é executada a
instrução SQL contida na variável $partodos no banco vestiba, retornando um
conjunto de registros, que ficam armazenados em forma de vetor na variável
$sqlresult.

d) posicionamento do ponteiro para o registro inicial


O objetivo da função: mysql_data_seek($sqlresult,$cont); é posicinar o ponteiro
para a posição $cont(variavel essa definida pela escolha do nível de
dificuldade),dentro do conjunto de registros na varivel $sqlresult.

e) impressão das questões e respostas


Através de um laço é executada as funções que imprimem o número de questões
selecionadas pelo usuário ou  as que forem encontradas caso esse número seja
inferior ao das questões solicitadas. Seguem-se os passos:

a) Imprime cabeçalho da questão


b) Calcula as porcentagens de erro e acerto da questão através dos campos certas
e erradas desse registro.
c) Identifica através de código HTML a questão para futura correção.
d) Imprime os gráficos em forma de tabelas HTML.
e) Executa outra query para seleção das respostas da questão:
select numquest, numresp,descricao,certa from resposta where
numquest=$numreg
f) Gera um formulário em forma de radio buttons com as respostas da questão,
usando um laço para as número de respostas.
g) Caso o nível de dificuldade seja aleatório, será posicionado o ponteiro para a
novo registro a ser impresso, caso contrário é selecionado o registro seguinte.
h) Caso os critérios do laço de impressão de questões  na seja validado, é
encerrada o laço e finalizado o código HTML.

Assim com esses passos gera-se o código HTML com a prova virtual, sendo agora
possível sua correção através dos script de correção de prova.
5.5.5. Consulta.php3

É o arquivo responsável por processar as consultas solicitadas pelo usuário. Após


todos os parâmetros terem sido selecionados no arquivo consulta.html, o
consulta.php3 trabalhará da seguinte forma:
a) Uma sintaxe SQL com as requisições feitas é montada, para isto todos os
parâmetros são concatenados, ou seja, eles são lidos um a um e depois são unidos
para formar a sintaxe.
  ...
  if ($materia <> 'np')
 {
  $par2 =" materia = '$materia'";
  $par=1;
 }
//nesta primeira condição a matéria selecionada é armazenada em //$par2.
  if ($ano <> 'np')
 {
  $par4 =" ano = '$ano'";
     if ($par==1)
     {
      $par3=' AND ';
     }
  $par=1;
 }
//na segunda condição o ano selecionado é armazenado em $par4.
  if ($local <> 'np')
 {
  $par6 =" local = '$local'";
     if ($par==1)
     {
     $par5=' AND ';
     }    
  $par=1;
 }
//e na terceira o local selecionado é armazenado em $par6.
  ...

Para o caso de se realizar uma busca por palavra-chave o processo foi


implementado usando as funções trim(), explode() e count(). 

Após a palavra ser digitada no campo o seguinte código é executado:

$buscar = trim($buscar);//elimina brancos no inicio e fim da //string


$recexplode = explode(' ',$buscar);// cria vetor com todas //palavras do campo
buscar
$contpalavras = count($recexplode);//conta o tamanho do vetor

Em seguida, a sintaxe SQL para a busca da palavra desejada nas questões é


armazenada em $parbusca:
$parbusca[$x]="(questao like '% $recexplode[$i] %' or questao
like '$recexplode[$i] %' or questao like '% $recexplode[$i]_')"
;

Com isto todas as condições passadas pelo usuário estão consideradas, o próximo
passo é unir todas essas condições em uma sintaxe SQL única:
$partodos='Select * from questoes'. $par1. $par2. $par3. $par4. $par5. $par6.
$parbusca[$i];

b) próximo passo é tratar da conexão com o banco de dados, primeiramente


conecta-se ao banco de dados e após à base de dados especifica.
if ($conectou = mysql_connect (localhost,root,php3000))  //testa //conexão ao
banco de dados
if ($conecbd = mysql_select_db (vestiba))  //testa conexão à //base de dados

c) Com a conexão à base de dados estabilizada e com a sintaxe SQL para


realização da consulta montada, basta agora executar esta consulta SQL no banco
de dados para ter os resultados.

$sqlresult = mysql_query ("$partodos");//executa a query //guardando o resultado


em $sqlresult

d) Realizada a consulta SQL, já se pode controlar os registros que retornaram do


banco de dados mostrando-os na tela.

$row = mysql_fetch_array($sqlresult)//a variável $row recebe o //controle de se


ainda há registros para serem mostrados

print $row ["questao"];//o registro retornado é impresso na //tela.

5.5.6. Corrige.php3

A finalidade desse script é fazer o tratamento do código HTML gerado pelo script
prova.php3, assim quando o usuário tiver respondido as questões e solicitar sua
correção, será chamado o script corrige.php3 que formará outra página HTML
contendo um tabela confrontando as respostas do usuário com as respostas
corretas, bem como resultado final de total de acertos e erros. Pelo fato de não
haver necessidade de segurança das respostas, foi implementa um solução que
mantém dentro da própria página que contem a prova, as suas respostas corretas.
Isso é feito incluindo tags HTML que ficam ocultadas para visualização do usuário
no browser, assim ao executar o script de correção não é necessário o acesso a
banco de dados para consulta e  sim apenas o confrontamento da questão
respondida com a correta, incluída no próprio código da prova. Porém uma outra
rotina é executada, a que permite incrementar o valor dos campos, que definem o
nível de dificuldade da prova, assim ao acertar uma questão é somada um  valor ao
campo certas, e o mesmo ocorre para o caso de erro.  Essas informações de acerto
e erro, servirão de base para formulação das próximas provas virtuais, conforme
nível de dificuldade escolhido.

Esse processo se executa da seguinte maneira:

Ao gerar a prova virtual são criados dois vetores com números seqüências
equivalente ao número de questões da prova, são eles resposta[] e correta[]. No
vetor resposta existem um índice que contem a letra da resposta escolhida pelo
usuário. No vetor correta[] o índice de mesmo número da resposta contem uma
string com a letra correta da questão seguido de sua identificação na banco de
dados. Essa facilidade de utilizar vetores é uma combinação da código HTML e da
linguagem PHP que permite passagem de vetores como variáveis. Além disso existe
outra variável que possui o valor da quantidade de questões da prova, com ela será
executado o laço que cruzara a informação dos dois vetores, caso sejam iguais é
gerada a rotina do script que imprime o trecho da tabela com a informação do
resultado e além disso é executada uma query com a função UPDATE que atualiza o
valor do campo certa do registro identificado no vetor correta , no caso de erradas
ocorre o mesmo processo de impressão porém o campo a ser
atualizado é o erradas. A seqüência do código é: 

a) Processo de conexão ao servidor e ao banco vestiba para atualização dos dados


na rotina de correção.
b) Laço inicial contando o número de questões
c) Extrai-se o valor do vetor correta[], dividindo a string em duas novas variáveis,
a com o valor da letra correta ($certa) e outra com o identificador(chave primária)
da questão($id)
d) Compara-se a variável $certa com o valor do vetor resposta de mesmo índice.
e) Executa-se o processo de impressão do código HTML com a tabela de resultado
f) Atualiza-se o valor dos campos certas ou erradas através da execução da
instrução SQL, baseada no número da questão.
g) Finaliza o código assim que sair do laço.

5.5.7. Buscarap.php3

Aqui é onde ocorrerá todo o processamento da consulta por palavra-chave. A


implementação deste arquivo gira em torno de 3 funções: trim(), expode() e
count(). Elas foram utilizadas da
seguinte maneira:

$buscar = trim($buscar);//elimina brancos no inicio e fim da //string


$recexplode = explode(' ',$buscar);// cria vetor com todas //palavras do campo
buscar
$contpalavras = count($recexplode);//conta o tamanho do vetor

Com estas funções as palavras digitadas no campo foram preparadas para a


realização da consulta SQL:

$sqlresult = mysql_query ("Select * from questoes where questao like '%


$recexplode[$i] %' or questao like '$recexplode[$i] %' or questao like '%
$recexplode[$i]_'");

A conexão deve ser testada em seguida:

if ($conectou = mysql_connect (localhost,root,php3000))  //testa //conexão ao


banco de dados
if ($conecbd = mysql_select_db (vestiba))  //testa conexão à //base de dados

Tendo os resultados da consulta em $sqlresult o último passo é tratar da listagem


das questões encontradas:

$row = mysql_fetch_array($sqlresult)//a variável $row recebe o //controle de se


ainda há registros para serem mostrados

print $row ["questao"];//o registro retornado é impresso na //tela.

Conclusões

O objetivo do trabalho foi alcançado, tendo em vista que se buscava verificar a


possibilidade de se montar um servidor Web utilizando ferramentas disponíveis na
Internet, bem como utilizar as mesmas para a construção de um Site que
possibilite acesso à uma base de dados. 
Com relação ao banco de dados, inicialmente optou-se pelo PostgreSQL, mas
houveram dificuldades de implementação no que diz respeito à conexão  entre o
servidor de banco de dados e o browser, outro fator que determinou a eliminação
do PostgreSQL do trabalho foi a sua escassa documentação. Então passou-se para
o MySQL, que mostrou-se uma ferramenta de grande velocidade, porém sem uma
grande ênfase no quesito segurança, sendo que seu uso para tal fim não é
recomendado pelos maiores especialistas. Além disto, deve-se destacar a facilidade
de uso referente à manipulação dos dados, como criação de tabelas, inserção de
registros, alteração de dados, etc. Outro ponto importante que fez do MySQL o
banco de dados escolhido foi a documentação um pouco mais abrangente, além dos
documentos oficiais possui no mercado alguns livros que facilitam o seu
aprendizado.

A linguagem PHP facilitou bastante a manipulação com o banco de dados, isto por
possuir funções nativas que são específicas para cada banco, no caso do MySQL são
mais de 30 funções que dão a possibilidade de se realizar todos os tipos de
operações com a base dados através de um browser. Mas, não possui somente
funções para bancos de dados, elas abrangem itens como segurança, vetores,
strings, etc.

Estas duas ferramentas integradas com o sistema operacional Linux e o servidor


Apache Web Server, possibilitaram a implementação do Site descrito no capítulo 5.
Esta implementação veio a por em prática todo o conhecimento adquirido no
decorrer do presente trabalho, onde pôde-se observar que todas as ferramentas
utilizadas tiveram uma integração e um desempenho satisfatórios dentro das
características da implementação em questão. Ou seja, o banco de dados MySQL
portou-se muito bem por a implementação não necessitar de tratamentos de
segurança, mas somente de uma conexão rápida e eficaz, e a linguagem PHP
mostrou uma grande familiaridade com o MySQL através das suas funções nativas
específicas para este banco.

Sugestões para trabalhos futuros

Como sugestão para trabalhos futuros, fica a implementação de um Site com a


utilização do módulo de segurança SSL do Apache, e o espelhamento do banco de
dados de uma empresa para a Web.

Referências Bibliográficas

[ARO 00] Aroca, Rafael V., 2000. "Tutorial MySQL", http://www.mysql.com.br ,


06/2000.

[ATK 99] Atkinson, Leon. 1999. "Core PHP Programming", Prentice Hall PTR, USA.

[BAK 99] Bakken, Stig S e outros. 1999. "PHP3 Manual", PHP Documentation
Group.

[BAR 99] Barreto, Mauricio Vivas de Souza. 1999. "Tutorial de Linguagem PHP", 
http://www.vivas.com.br , 06/2000.

[CAS 00] Castagnetto, Jesus e outros. 2000. "Professional PHP Programming",


Wrox, USA.

[CON 99] Conectiva Informática. 1999. "Conectiva Guia do Usuário", Curitiba.


[FIS 99] Fisher, Herbert G. 1999. "PHP Guia de Consulta Rápida", Novatec, São
Paulo.

[JAM 99] Jamil, George L. 1999. "Linux para principiantes", Axcel Books, Rio de
Janeiro.

[KAB 98] Kabir, Mohammed J. 1998. "Apache Server Bible", IDG Books, USA.

[RAT 98] Ratsschiller, Tobias. 1998. "Building Dynamic Websites with PHP".
http://www.phpwizard.net , 04/2000.

[YAR 99] Yager, Randy Y. e outros. 1999. "MySQL & mSQL", O'Reilly, USA.

"Hypertext Preprocessor", http://www.php.net , 03/2000.

"PHP and MySQL examples and resources", http://www.webrdev.com , 04/2000.

"The resource for PHP developers", http://www.phpbuilder.com , 05/2000.

Compartilhamento do windows xp

Compartilhamento de Conexão no Windows XP


Hardware:

Para usar o compartilhamento de conexão padrão do Windows XP, você precisar de


duas placas de rede Ethernet no micro que será o Servidor; uma será ligada ao
modem, e a outra, à sua rede interna.
Caso sejam apenas dois micros, você pode interligá-los por um CABO
CROSSOVER (cruzado).

Acima de dois, você pode usar um HUB (concentrador de terminais) , ou melhor


ainda, um SWITCHING HUB ou um SWITCH (chaveador de terminais), que
proporcionam um melhor controle do tráfego, tornando sua rede interna mais
rápida. Veja Diferenças entre Hub, Switching Hub e Switch

Software:

Para iniciar o Assistente para configuração de rede tecle:

Iniciar, Programas, Acessórios, Comunicações, Assistente para configuração de rede

Utilize o Assistente para:

 Compartilhar uma conexão com a Internet


A configuração abaixo é para o servidor, 
escolha a segunda opção para os outros computadores da rede.

Em caso de dúvida, clique em Exibir um exemplo


Na figura abaixo, a placa VIA seria a placa conectada ao modem, e a 1394 seria a
placa da rede local. Em seu micro, as descrições devem ser diferentes dessas. Se a
placa de rede é OnBoard, normalmente ela é uma Davicom, ou Sis900. No Brasil, a
maior parte das placas encontradas no comércio é Realtek ou compatível. 

DICA: Se você tiver de adquirir as duas placas, recomendamos comprar placas de


marcas e chipsets (circuitos integrados) diferentes, facilita bastante na hora da
configuração !
Renomeie sua rede, por segurança. Recomendamos utilizar, por exemplo, seu
sobrenome.
Esse processo demora mesmo...
Depois de executar esse processo no servidor, repita-o nos micros que
compartilharão essa conexão.

Essa configuração é a mais simples que existe, pode e deve ser melhorada, mas
para isso é necessário algum conhecimento técnico.

Criação de sub redes

Criação de sub-redes, aprenda como fazer! (Rede)


Link Original: http://www.clubedasredes.eti.br/rede0016.htm

Subnet Calculator - Calculadora para Redes Lucent

Criação de sub-redes
 
Mesmo que a noção conceitual de sub-redes, utilizando bits de hosts, pareça
bastante simples, os mecanismos atuais de criação de sub-redes são mais
complicados. Criar sub-redes eficientes, que reflitam as necessidades de sua rede,
requer três procedimentos básicos:

1°. Determinar o número de bits de host a serem usados para sub-redes.


2º. Listar as novas identificações de sub-redes.
3º. Listar os endereços IPs para cada nova identificação de sub-rede.
1°. Determinar o número de bits de host a serem usados na sub-rede.

O número de bits de host usado para sub-redes determinará o número de sub-


redes possíveis e o número de hosts por sub-rede. Antes de escolher o número de
bits de host, você deve avaliar o número de sub-redes e de hosts que você precisa
ou precisará no futuro.
 
Quanto mais bits de host são usados para sub-redes, mais sub-redes (identificação
de sub-redes) você terá, porém, com poucos hosts por sub-rede. A utilização de
muitos bits de host para sub-redes, permite o crescimento do número de sub-redes
mas limita o crescimento do número de hosts. Já a utilização de poucos bits de
hosts para sub-redes permite o crescimento do número de hosts mas limita o
crescimento do número de sub-redes.
 
Por exemplo, a figura 1 ilustra a subdivisão utilizando até os 8 primeiros bits de
host de uma identificação de rede classe B. Se você escolher um bit de host para
sub-redes, você terá 2 identificações de sub-redes com 16.382 hosts por
identificação de sub-rede. Se você escolher 8 bits de host para sub-redes, você terá
256 identificações de sub-redes com 254 hosts por identificação de sub-rede.

 Figura 1 - subdivisão de uma identificação de rede classe B.

Na prática os administradores de rede definem o número máximo de hosts que eles


querem em uma única rede. Lembre-se que todos os hosts em uma rede
compartilham o mesmo tráfego de difusão (broadcast); eles residem no mesmo
domínio de broadcast. Portanto, o crescimento do número de sub-redes é favorável
ao invés do crescimento do número de hosts por sub-rede.
 
Siga estes passos para determinar o número de bits de host a serem utilizados para
sub-redes:

1)  Determine a quantidade de sub-redes que você precisa e, provavelmente,


precisará no futuro. Cada rede física é uma sub-rede. Conexões WAN (Wide
Area Network ou Rede de Longa Distância) também podem contar como sub-
redes dependendo se seu roteador suporta um número ilimitado de conexões.
2)  Use bits adicionais para a máscara de sub-rede se:
»  Nunca precisar de mais hosts por sub-rede que o permitido pelos bits
restantes.
»  O número de sub-redes for crescer no futuro, requerendo bits de host
adicionais.

Para esquematizar sua sub-rede, de maneira bem simples, comece com uma
identificação de rede existente a ser subdividida. A identificação de rede a ser
subdividida pode ser uma identificação de rede baseada em classes, uma
identificação de sub-rede, ou uma super-rede. A identificação de rede existente
contem uma série de bits da identificação de rede que são fixos e uma série de bits
da identificação de hosts que são variáveis. Baseado nas necessidades de sua rede,
o número de sub-redes e o número de hosts por sub-rede, escolha um número
específico de bits de host a ser usado para a subdivisão da sua rede.
 
A tabela 1 mostra as subdivisões possíveis para uma identificação de rede classe A.
Tendo em vista a quantidade de sub-redes e a quantidade máxima de hosts por
sub-rede, escolha um esquema de subdivisão da rede.

Tabela 1. Subdivisões de uma identificação de rede classe A.


Número de Número de
Número de  Máscara de
 bits para hosts por
sub-redes sub-rede
sub-rede sub-rede
1-2 1 255.128.0.0 ou /9 8,388,606
3-4 2 255.192.0.0 ou /10 4,194,302
5-8 3 255.224.0.0 ou /11 2,097,150
9-16 4 255.240.0.0 ou /12 1,048,574
17-32 5 255.248.0.0 ou /13 524,286
33-64 6 255.252.0.0 ou /14 262,142
65-128 7 255.254.0.0 ou /15 131,070
129-256 8 255.255.0.0 ou /16 65,534
257-512 9 255.255.128.0 ou /17 32,766
513-1,024 10 255.255.192.0 ou /18 16,382
1,025-2,048 11 255.255.224.0 ou /19 8,190
2,049-4,096 12 255.255.240.0 ou /20 4,094
4,097-8,192 13 255.255.248.0 ou /21 2,046
8,193-16,384 14 255.255.252.0 ou /22 1,022
16,385-32,768 15 255.255.254.0 ou /23 510
32,769-65,536 16 255.255.255.0 ou /24 254
65,537-131,072 17 255.255.255.128 ou /25 126
131,073-262,144 18 255.255.255.192 ou /26 62
262,145-524,288 19 255.255.255.224 ou /27 30
524,289-1,048,576 20 255.255.255.240 ou /28 14
1,048,577-2,097,152 21 255.255.255.248 ou /29 6
2,097,153-4,194,304 22 255.255.255.252 ou /30 2

A tabela 2 mostra as subdivisões possíveis para uma identificação de rede classe B.

Tabela 2. Subdivisões de uma identificação de rede classe B.


Número de
Número de Número de bits Máscara de
hosts por
sub-redes para sub-rede sub-rede
sub-rede
1-2 1 255.255.128.0 ou /17 132,766
3-4 2 255.255.192.0 ou /18 16,382
5-8 3 255.255.224.0 ou /19 8,190
9-16 4 255.255.240.0 ou /20 4,094
17-32 5 255.255.248.0 ou /21 2,046
33-64 6 255.255.252.0 ou /22 1,022
65-128 7 255.255.254.0 ou /23 510
129-256 8 255.255.255.0 ou /24 254
257-512 9 255.255.255.128 ou /25 126
513-1,024 10 255.255.255.192 ou /26 62
1,025-2,048 11 255.255.255.224 ou /27 30
2,049-4,096 12 255.255.255.240 ou /28 14
4,097-8,192 13 255.255.255.248 ou /29 6
8,193-16,384 14 255.255.255.252 ou /30 2

A tabela 3 mostra as subdivisões possíveis para uma identificação de rede classe C.

Tabela 3. Subdivisões de uma identificação de rede classe C.


Número de
Número de Número de bits
Máscara de sub-rede hosts por
sub-redes para sub-rede
sub-rede
1-2 1 255.255.255.128 ou /25 126
3-4 2 255.255.255.192 ou /26 62
5-8 3 255.255.255.224 ou /27 30
9-16 4 255.255.255.240 ou /28 14
17-32 5 255.255.255.248 ou /29 6
33-64 6 255.255.255.252 ou /30 2

2º. Listar as novas identificações de sub-redes.

Após escolher o número de bits de host a ser usado nas sub-redes, você deve listar
as novas identificações de rede disponíveis. Existem duas formas de fazê-la.

»  Binária - Lista todas as combinações de bits de host escolhidos para a


subdivisão e converte cada combinação na notação decimal pontuada.
»  Decimal - Adiciona um valor incremental calculado para cada identificação de
sub-rede sucessiva e converte na notação decimal pontuada.

Ambos os métodos produzem o mesmo resultado: a lista enumerada das


identificações de sub-rede.

Nota.:  Há uma variedade de documentos com técnicas diferentes para


subdivisão de redes. Porém, essas técnicas, apresentadas pela maioria
dos documentos, somente funcionam em determinados ambientes
(como por exemplo, somente com os 8 bits de uma identificação de
rede baseada em classes). Os métodos seguintes foram elaborados
para se trabalhar com qualquer tipo de situação possível no mundo das
redes. (Baseado em classes, mais que 8 bits, super-rede e máscara de
rede de tamanho variável).

Para criar a lista enumerada de identificações de sub-rede utilizando o método


binário siga os cinco passos abaixo:

1)  Seja n, o número de bits de host escolhido para a subdivisão da rede


(número de bits da sub-rede), crie uma tabela com três colunas com 2n
linhas. A primeira coluna é o número da sub-rede (começando pelo 1), a
segunda coluna é a representação binária da identificação de rede, e a
terceira coluna é a representação decimal pontuada com o prefixo de sub-
rede da identificação de sub-rede. Para cada representação binária, os bits da
identificação de rede permanecem fixo com seu valor e original e os bits de
host restantes são todos atribuídos com o valor zero. Os bits de host
escolhidos para a subdivisão vão variar.
2)  Na primeira linha da tabela, defina os bits da sub-rede todos para zero e
converta para a notação decimal pontuada com o prefixo de sub-rede na
terceira coluna. A identificação de rede original é subdividida com sua nova
máscara de sub-rede.
3)  Na próxima linha da tabela, incremente o valor dos bits da sub-rede.
4)  Converta o resultado binário para a notação decimal pontuada na terceira
coluna.
5)  Repita os passos 3 e 4 até que a tabela esteja completa.

Por exemplo, para criar uma sub-rede de utilizando 3 bits de hosts da identificação
de rede privada 192.168.0.0, a máscara de sub-rede para a nova identificação de
sub-rede deve ser 255.255.224.0 ou /19. Sendo n = 3, já que utilizamos 3 bits de
host, construímos uma tabela com 8 linhas (23). A primeira sub-rede, a sub-rede 1,
deve ter todos os bits de sub-rede com o valor 0. As sub-redes adicionais na tabela
são incrementos sucessivos dos bits da sub-rede, como mostrado na tabela 4. Os
bits de host utilizados para subdivisão da rede estão sublinhados.

Tabela 4. Técnica binária para subdivisão para a identificação de rede 192.168.0.0.


Identificação
Sub-rede Representação binária
de sub-rede
1 11000000.10101000.00000000.00000000 192.168.0.0/19
2 11000000.10101000.00100000.00000000 192.168.32.0/19
3 11000000.10101000.01000000.00000000 192.168.64.0/19
4 11000000.10101000.01100000.00000000 192.168.96.0/19
5 11000000.10101000.10000000.00000000 192.168.128.0/19
6 11000000.10101000.10100000.00000000 192.168.160.0/19
7 11000000.10101000.11000000.00000000 192.168.192.0/19
8 11000000.10101000.11100000.00000000 192.168.224.0/19

Para criar a lista enumerada de identificações de sub-rede utilizando o método


decimal siga os sete passos abaixo:

1.  Seja n, o número de bits de host escolhido para a subdivisão da rede (número
de bits da sub-rede), crie uma tabela com três colunas com 2n linhas. A
primeira coluna é o número da sub-rede (começando pelo 1), a segunda
coluna é a representação decimal (sistema numérico de base 10) dos 32-bits
da identificação de rede, e a terceira coluna é a representação decimal
pontuada com o prefixo de sub-rede da identificação de sub-rede.
2.   Converta a identificação de rede (w.x.y.z) para a notação decimal pontuada
para N, a representação dos 32-bits da identificação de rede fazendo o
seguinte cálculo:
 
N = w*16777216 + x*65536 + y*256 + z. 
3.  Calcule o valor incremental i baseado em h, o número de bits de host
restantes:
 
i = 2h - 2. 
4.  Na primeira linha da tabela, a representação decimal da identificação de sub-
rede é N e a identificação de sub-rede é w.x.y.z com sua nova máscara de
sub-rede.
5.  Na próxima linha, adicione i mais o valor da representação decimal da linha
anterior.
6.  Converta a representação decimal da identificação de sub-rede para
representação decimal pontuada (w.x.y.z) através da seguinte fórmula (onde
s é a representação decimal da identificação da sub-rede):
 
W = INT(s / 16777216)
X = INT((s mod (16777216)) / 65536)
Y = INT((s mod (65536)) /256)
Z = s mod(256)
INT( ) representa a divisão inteira, mod( ) o modulo, o resto da divisão. 
7.  Repita os passos 5 e 6 até que a tabela esteja completa.

Por exemplo, para criar uma sub-rede de utilizando 3 bits de hosts da identificação
de rede privada 192.168.0.0, sendo n = 3, já que utilizamos 3 bits de host,
construímos uma tabela com 8 linhas (23). A primeira sub-rede, a sub-rede 1,
possui todos os bits de sub-rede com o valor 0. Logo N, a representação decimal de
192.168.0.0, é 3232235520, o resultado de 192*16777216 + 168*65536. Já que
temos 13 bits de host restantes, o incremento i é de 213 - 2 = 8192 como
mostrado na tabela 5.

Tabela 5. Técnica decimal para subdivisão para a identificação de rede


192.168.0.0.
Identificação
Sub-rede Representação decimal
de sub-rede
1 3232235520 192.168.0.0/19
2 3232243712 192.168.32.0/19
3 3232251904 192.168.64.0/19
4 3232260096 192.168.96.0/19
5 3232268288 192.168.128.0/19
6 3232276480 192.168.160.0/19
7 3232284672 192.168.192.0/19
8 3232292864 192.168.224.0/19

Nota.:  A RFC 950 proíbe o uso de identificações de sub-rede com todos os bits
iguais a 0 (todos os bits de hosts restantes atribuídos com o valor 0) e
todos os bits iguais a 1 (todos os bits de hosts restantes atribuídos com
o valor 1). Ter todos os bits de host iguais a 0 causa problemas com
protocolos de roteamento antigos e tendo todos os bits de host iguais a
1 causa conflito com o endereço especial de difusão (broadcast)
chamado endereço direto de difusão (broadcast).
Contudo, a RFC 1812 permite o uso de sub-redes com todos seus bits
configurados para zero ou um em um ambiente compatível com CIDR,
Roteamento entre domínios sem classe. Ambientes CIDR usam
protocolos de roteamento modernos que não têm problemas com
identificações de sub-redes com todos seus bits iguais a 0 e todas as
sub-redes de difusão não são mais relevantes.
Ter todos os bits iguais a 0 ou 1 em sub-redes pode causar problemas com hosts
ou roteadores operando no modo padrão baseado em classes. Antes de usar todos
os bits iguais a 0 ou todos iguais a 1 em sub-redes, verifique se eles são aceitos
pelos seus hosts e roteadores.

3°. Listar os endereços IPs para cada nova identificação de sub-rede

Após listar todas as identificações de sub-rede, você deve agora listar os endereços
IPs válidos para as novas identificações de sub-rede. Listar cada endereço IP
individualmente seria, e com certeza é, uma tarefa muito tediosa. Ao invés de listar
os endereços IPs para cada identificação de sub-rede, definiremos uma faixa de
endereços IPs (o primeiro e o último) para cada identificação de sub-rede. Existem
duas formas de fazê-lo.

»  Binário - escrevendo o primeiro e o último endereço para cada identificação de


sub-rede e convertendo para a notação decimal pontuada.
»  Decimal - adicionando valores incrementais, correspondentes ao primeiro e ao
último endereço IP para cada identificação de sub-rede e convertendo para a
notação decimal pontuada.

Ambos os métodos produzem o mesmo resultado: a faixa de endereços IP para


cada identificação de sub-rede.
 
Para criar a faixa de endereços IP usando o método binário siga os quatro passos
abaixo:

1.  Seja n, o número de bits de host escolhido para a subdivisão da rede (número
de bits da sub-rede), crie uma tabela com três colunas com 2n linhas. A
primeira coluna é o número da sub-rede (começando pelo 1), a segunda
coluna é a representação binária do primeiro e do último endereço IP da
identificação de sub-rede, e a terceira coluna é a representação decimal
pontuada do primeiro e do último endereço IP da identificação de sub-rede.
Alternativamente, você pode adicionar duas colunas na tabela anterior usada
para listar as identificações de sub-rede.
2.  Para cada representação binária, o primeiro endereço IP é o endereço na qual
todos os bits de host possuem o valor 0, exceto pelo último bit de host; bit da
extrema direita com o valor 1. O último endereço IP é o endereço na qual
todos os bits de host possuem o valor 1, exceto pelo último bit de host; bit da
extrema direita com o valor 0.
3.  Converta a representação binária para a representação decimal pontuada na
terceira coluna.
4.  Repita os passos 2 e 3 até que a tabela esteja completa.

Por exemplo, a faixa de endereços IPs para a sub-rede de 3-bits da identificação de


rede 192.168.0.0 é mostrada na tabela 6. Os bits usados para subdivisão da rede
estão sublinhados.

Tabela 6. Listagem dos endereços IPs (representação binária).


Faixa de
Sub-rede Representação binária
endereços IPs
11000000.10101000.00000000.00000001 192.168.0.1
1 -  -
11000000.10101000.00011111.11111110 192.168.31.254
11000000.10101000.00100000.00000001 192.168.32.1
2 - -
11000000.10101000.00111111.11111110 192.168.63.254
11000000.10101000.01000000.00000001 192.168.64.1
3 - -
11000000.10101000.01011111.11111110 192.168.95.254
11000000.10101000.01100000.00000001 192.168.96.1
4 - -
11000000.10101000.01111111.11111110 192.168.127.254
11000000.10101000.10000000.00000001 192.168.128.1
5 - -
11000000.10101000.10011111.11111110 192.168.159.254
11000000.10101000.10100000.00000001 192.168.160.1
6 - -
11000000.10101000.10111111.11111110 192.168.191.254
11000000.10101000.11000000.00000001 192.168.192.1
7 - -
11000000.10101000.11011111.11111110 192.168.223.254
11000000.10101000.11100000.00000001 192.168.224.1
8 - -
11000000.10101000.11111111.11111110 192.168.255.254

Para criar a faixa de endereços IP usando o método decimal siga os cinco passos
abaixo:

1. Seja n, o número de bits de host escolhido para a subdivisão da rede (número


de bits da sub-rede), crie uma tabela com três colunas com 2n linhas. A
primeira coluna é o número da sub-rede (começando pelo 1), a segunda
coluna é a representação decimal (sistema numérico de base 10) binária do
primeiro e do último endereço IP da identificação de rede, e a terceira coluna
é a representação decimal pontuada binária do primeiro e do último endereço
IP da identificação de sub-rede. . Alternativamente, você pode adicionar duas
colunas na tabela anterior usada para listar as identificações de sub-rede.
2. Calcule o valor incremental J baseado em h, o número de bits de host
restantes:
 
J = 2h - 2.
3. Para cada representação decimal, o primeiro endereço IP é N + 1 onde N é a
representação decimal da identificação de sub-rede. O último endereço IP é N
+ J.
4. Converta a representação decimal da identificação de sub-rede para
representação decimal pontuada (w.x.y.z) através da seguinte fórmula (onde
s é a representação decimal da identificação da sub-rede):
 
W = INT(s / 16777216)
X = INT((s mod (16777216)) / 65536)
Y = INT((s mod (65536)) /256)
Z = s mod(256)
INT( ) representa a divisão inteira, mod( ) o modulo, o resto da divisão.
5. Repita os passos 3 e 4 até que a tabela esteja completa.

Por exemplo, a faixa de endereços IPs para a sub-rede de 3-bits da identificação de


rede 192.168.0.0 é mostrada na tabela 7. O valor incremental J é de 213 - 2 =
8190.
Tabela 7. Listagem dos endereços IPs (representação decimal).
Sub-rede Representação decimal Faixa de endereços IPs
1 3232235521 - 3232243710 192.168.0.1 - 192.168.31.254
2 3232243713 - 3232251902 192.168.32.1 - 192.168.63.254
3 3232251905 - 3232260094 192.168.64.1 - 192.168.95.254
4 3232260097 - 3232268286 192.168.96.1 - 192.168.127.254
5 3232268289 - 3232276478 192.168.128.1 - 192.168.159.254
6 3232276481 - 3232284670 192.168.160.1 - 192.168.191.254
7 3232284673 - 3232292862 192.168.192.1 - 192.168.223.254
8 3232292865 - 3232301054 192.168.224.1 - 192.168.255.254

(01/2003).
Michael Capela
michaelcapela@hotmail.com
MCSE ID# 2486713

Você também pode gostar