150 Redes
150 Redes
150 Redes
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:
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
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.
5
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
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
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.
Lista de Abreviaturas
Índice de Figuras
Índice de Tabelas
Introdução
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.
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.
"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.
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.
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.
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 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.
2. MySQL
"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.
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 .
1 U$ 200
10 U$ 150
50 U$ 120
100-999 U$ 40
1000-2499 U$ 25
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.
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
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.
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.
Instruções:
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.
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.
O processo de conexão com o banco requer que alguns parâmetros sejam passados
ao servidor MySQL:
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.
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.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:
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
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.
Com esse comando apaga-se todos os arquivos referentes a banco de dados com o
nome nomedobanco.
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
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 :
"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).
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>
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
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
É 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].
"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
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
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
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.
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
Feito isso o Apache Web Server está apto para executar arquivos em formato PHP.
<?
[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.
Todas as variáveis são definidas através de um "$" seguido de uma string que
deve iniciar por uma letra ou o caracter "_".
3.6.4. Comentários
*/
?>
3.7. Exemplos
<html>
<head><title>Testando o PHP</title></head>
<body>
<?php
print "Meu primeiro script em PHP";
?>
</body>
</html>
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>
</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.
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>";
?>
</body>
</html>
Exemplo de um PHP com formulário HTML.
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
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.
Envia uma consulta ao servidor MySQL, retorna True se tiver sucesso, caso
contrário, retorna False.[FIS 99].
Assim como no exemplo acima foi executado o comando SQL create table, qualquer
comando de escrita SQL poderia ter sido executado.
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.
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:
4.5. Configuraçã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
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:
4.5.1.3. Access.conf
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
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.
Existem muitas soluções para implementar SSL com Apache, incluindo Apache-SSL
e as implementações
comerciais StrongHold e Raven SSL.
5. Implementação
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.
5.1. Fluxograma
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.
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.
a) 2.1 – Digitar Palavra: é o campo onde a palavra que se deseja será digitada.
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.
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.
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.
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.
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.
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.
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
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
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));
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.
<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.
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.
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
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
}
if ($nivel == 4)
{
mysql_data_seek($sqlresult,$numbers[$x]);
$x++;
}
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
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];
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.
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 é:
5.5.7. Buscarap.php3
Conclusões
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.
Referências Bibliográficas
[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.
[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.
Compartilhamento do windows xp
Software:
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
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:
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.
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.
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.
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.
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.
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.
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.
Para criar a faixa de endereços IP usando o método decimal siga os cinco passos
abaixo:
(01/2003).
Michael Capela
michaelcapela@hotmail.com
MCSE ID# 2486713