Escolar Documentos
Profissional Documentos
Cultura Documentos
ii
SUMRIO
SUMRIO...................................................................................................................................................................IV
RESUMO.....................................................................................................................................................................VI
ABSTRACT...............................................................................................................................................................VII
LISTA DE ABREVIATURAS...............................................................................................................................VIII
NDICE DE FIGURAS..............................................................................................................................................IX
NDICE DE TABELAS...............................................................................................................................................X
INTRODUO...........................................................................................................................................................11
1.LINUX.......................................................................................................................................................................13
1.1.UM BREVE HISTRICO DO LINUX ........................................................................................................................13
1.2.DISTRIBUIES DO LINUX...................................................................................................................................14
1.3.INSTALAO DO LINUX.......................................................................................................................................15
2.MYSQL.....................................................................................................................................................................17
2.1.O QUE MYSQL?...............................................................................................................................................17
2.2.BREVE HISTRICO...............................................................................................................................................17
2.3.POR QUE MYSQL?..............................................................................................................................................18
2.4.PRINCIPAIS CARACTERSTICAS.............................................................................................................................18
2.5.POLTICA DE USO NA WEB..................................................................................................................................19
U$ 40...........................................................................................................................................19
U$ 25...........................................................................................................................................19
4.5.CONFIGURAO...................................................................................................................................................44
4.5.1.Arquivos de configurao............................................................................................................................44
4.5.1.1.Httpd.conf.............................................................................................................................................................44
4.5.1.2.Srm.conf................................................................................................................................................................44
4.5.1.3.Access.conf...........................................................................................................................................................45
5.1.2.Descrio do Fluxograma...........................................................................................................................51
5.2.MODELAGEM DOS DADOS...................................................................................................................................52
5.2.1.Descrio das Tabelas.................................................................................................................................52
5.2.2.Modelo E-R (Entidade - Relacionamento)..................................................................................................53
5.2.3.Dicionrio de Dados...................................................................................................................................53
5.3.SINTAXE SQL PARA CRIAO DAS TABELAS......................................................................................................54
5.4.DESCRIO DAS FUNES PHP UTILIZADAS.......................................................................................................55
5.5.IMPLEMENTAO 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.Concatenao das variveis...................................................................................................................................63
5.5.5.Consulta.php3..............................................................................................................................................64
5.5.6.Corrige.php3................................................................................................................................................66
5.5.7.Buscarap.php3.............................................................................................................................................67
CONCLUSES...........................................................................................................................................................69
SUGESTES PARA TRABALHOS FUTUROS...................................................................................................................69
REFERNCIAS BIBLIOGRFICAS......................................................................................................................71
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 manipulao de uma base de dados. Partiu-se inicialmente para o estudo de quais seriam as
ferramentas necessrias e disponveis para a instalao de um servidor Web. A partir disto foi
implementado um Site para simulao de prova de vestibular. Este site tem como caracterstica a
possibilidade de um usurio consultar questes, gerar provas virtuais, fazer busca por palavrachave, em um banco de dados armazenado no servidor.
Sendo o desenvolvimento prtico de um site o objetivo final do trabalho bem como a simulao
de um servidor Web, iniciou-se o processo de definio dos tipos de ferramentas e a escolha
entre as opes disponveis. Seguiu-se ento o estudo das ferramentas escolhidas: sistema
operacional Linux, banco de dados MySQL, servidor Apache Web Server e a linguagem de
programao PHP. Aps concludo o estudo, comeou a criao do servidor Web com a
instalao e configurao em forma padro das ferramentas acima citadas em um computador
pessoal. Com o servidor Web devidamente configurado, vieram os testes do funcionamento da
linguagem de programao PHP para acesso base de dados MySQL. O prximo passo foi a
implementao do site baseada na construo da base de dados, definio da estrutura do site,
implementao dos scripts PHP que geram as pginas HTML atravs das consultas ao banco de
dados, e tambm as pginas HTML simples.
Com esse estudo terico e prtico, observou-se a grande utilidade de bancos de dados em um
Web Site. Pois permite a implementao de vrias solues que dinamizam o contedo de um
site, facilitam sua administrao, possibilita a criao de aplicaes cliente-servidor completas,
comrcio eletrnico e todas as facilidades que uma base de dados pode oferecer. Mesmo sendo
uma soluo gratuita, mostrou-se bastante eficiente e capaz de ser soluo para quase todos os
tipos de Web Site.
Palavras-chaves: Internet, PHP, MySQL, Linux, Apache, Site.
vi
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.
vii
Lista de Abreviaturas
API Interface de programao 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 Aplicaes para Supercomputao
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
viii
ndice de Figuras
ix
ndice de Tabelas
Introduo
A Internet, a grande rede mundial de computadores, hoje a maior fora propulsora em quase
todos os segmentos da informtica, uma revoluo nos meios de informao sem limites e em
plena expanso.
Nos dias de hoje possvel compartilhar informaes de todos os tipos , desde simples textos a
imagens tridimensionais, de sons a vdeos de ltima gerao com um simples clique, seja do
mais remoto lugar aos grandes centros, tudo isso graas a Internet.
Atualmente esse processo de compartilhamento de informaes vem criando novas formas de
negociao, remodelando completamente o sistema de logstica das empresas, estreitando
ligaes comerciais e pessoais. Todas essas informaes e interao entre as partes envolvidas
pode-se dar atravs de bancos de dados, independente de plataforma de hardware, sistema
operacional, topologia de rede, aplicativo ou localizao geogrfica. Pode-se por exemplo
estreitar a ligao de um representante de uma industria, fazendo um pedido via internet,
inserindo os dados do pedido automaticamente no banco de dados da empresa, disponibilizando
informaes para a rea de produo e esta para a expedio, transferindo parte da cadeia de
produo para a internet.
Esse processo de utilizao dos conceitos cliente-servidor, s era possvel dentro de um espao
fsico pequeno, ou com recursos tecnolgicos avanados e caros. Hoje desenvolvem-se
aplicativos inteiros que utilizam a Web como interface para acesso a banco de dados. Dentre os
inmeros sistemas pode-se citar o PHP, o ASP e o Cold Fusion.
Tendo em vista a crescente evoluo destas ferramentas e sobretudo a sua especializao, optouse 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 so:
a) Sistema Operacional - Linux
b) Servidor - Apache Web Server
c) Banco de Dados - MySQL
d) Linguagem de Programao - PHP
12
A motivao inicial para a escolha das ferramentas acima citadas foi o custo, que nulo.
Percebeu-se com o desenvolvimento uma srie de outras facilidades que vieram a corroborar a
idia inicial que se tinha.
Com o objetivo de exemplificar a utilizao das ferramentas, desenvolveu-se um ambiente de
servidor de pginas Web. Nesse ambiente, implementou-se um site que permite ao usurio
realizar provas virtuais de concurso vestibular, bem como consultas s questes cadastradas em
um banco de dados.
Assim, o presente trabalho busca apresentar uma soluo 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 captulo apresentado o sistema operacional utilizado, o Linux. Incluindo um breve
histrico, as distribuies existentes e algumas dicas de instalao.
O servidor de banco de dados MySQL est no segundo captulo do trabalho, que contm suas
principais caractersticas, as bases da instalao, sua utilizao na Web, suas ferramentas clientes
e alguns conceitos da linguagem SQL.
O terceiro captulo do trabalho trata da linguagem de programao PHP, conceituando-o,
apresentando os processos de instalao e configurao, descrevendo uma idia bsica da sintaxe
da linguagem e citando alguns exemplos.
No quarto captulo discorre o servidor Apache Web Server, mostrando o funcionamento bsico
de um servidor Web, os processos de instalao e configurao bsica e descrevendo tambm
sobre o protocolo SSL.
No quinto e ltimo captulo est documentada a implementao realizada neste trabalho.
Abordando todo o seu processo de desenvolvimento desde a sua esquematizao, passando pela
modelagem dos dados, e chegando at a codificao em PHP e HTML.
13
1. Linux
Neste captulo ser abordado o sistema operacional Linux, iniciando com um breve histrico,
passando pela descrio e comentrios de algumas das principais distribuies e finalizando com
algumas dicas e caractersticas do processo de instalao do mesmo.
1.1.
O sistema operacional Linux uma verso gratuita distribuida do primeiro UNIX desenvolvido
por Linus Torvalds na Universidade de Helsinque na Finlndia. O UNIX um dos sistemas
operacionais mais populares do mundo por causa de sua grande base de suporte e distribuio
[JAM 99]. O desenvolvimento do Linux contou com a participao de vrios programadores
UNIX e especialistas em Internet, dando a qualquer um que possusse algum conhecimento e
experincia necessrios 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 verso 0.01 ficou pronta, mas nenhuma publicao foi feita para esta
verso, suas fontes no foram nem sequer executadas.
Dois meses depois, em 5 de outubro de 1991, Linus lanou a primeira verso oficial do Linux, a
verso 0.02, porm pouco acrescentava em relao verso anterior. Depois da verso 0.03,
Linus desenvolveu o sistema at a verso 0.10, quando mais pessoas comearam a trabalhar no
desenvolvimento. Dando seguimento ao sistema, Linus elevou o nmero da verso para 0.95, e
segundo ele, logo estaria pronto para o lanamento de uma verso oficial.
Duas importantes fontes de software para o desenvolvimento do Linux foram o projeto GNU da
Free Software Fundation (Fundao de Software Livre), uma organizao de porte internacional
que suporta a apia projetos diversos ligados ao cdigo livre, e os trabalhos em curso na
Universidade de Berkeley. Destas duas fontes saram diversos dos atuais utilitrios e aplicativos
do Linux, como o compilador C e os servidores de rede, entre outros.
Aps passar por vrias verses, o Linux hoje um clone do UNIX completo. Possuindo
compatibilidade com praticamente todos os grandes pacotes gratuitos de software. As verses
disponveis esto em vrios idiomas, possuindo as variadas aplicaes, processadores de texto,
suportando redes e gerenciadores de banco de dados, e outras.
14
1.2.
Distribuies do Linux
15
Instalao do Linux
16
17
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 distribuio para plataformas no-Windows
que o utilizam em um servidor Web.
MySQL um servidor multiusurio, multitarefa, compatvel com o padro SQL (Structured
Query language Linguagem de Consulta estruturada), linguagem essa amplamente utilizada
para manipulao de dados em RDBMS (Banco de dados Relacionais), sendo considerada um
ferramenta de manipulao de base de dados de tamanho moderado.
As principais caractersticas que destacam MySQL so: sua velocidade proporcionada pela sua
implementao leve que no inclui na totalidade o suporte as instrues SQL; sua natureza de
distribuio gratuita; facilidade de integrao com servidor Web e linguagens de programao de
desenvolvimento de sites dinmicos, especialmente a linguagem PHP.
2.2.
Breve Histrico
O MySQL foi criado por Michael Widenius na companhia sua TcX. Por volta de 1979
Michael desenvolveu um banco de dados chamado UNIREG, sendo rescritos em vrias
linguagens desde ento [YAR 99]. Em 1994, a empresa TcX comeou o desenvolvimento de
aplicaes baseadas na Web, tendo como base o banco UNIREG, porm esse banco possua
muito overhead para obter sucesso em uma aplicao para gerao de pginas dinmicas na
Web. Ento a empresa TcX comeou a procurar por outro banco o mSQL, uma ferramenta
baseada em SQL mas com caractersticas pobres no possuindo por exemplo suporte a ndices, e
com desempenho inferior ao UNIREG.
Foi ento 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 mximo a compatibilidade
com mSQL. TcX foi esperta o suficiente para no reinventar o que j estava bem feito, ela
construiu seu servidor baseado na estrutura que j estava montada do UNIREG e utilizou grande
nmero de utilitrios escritas para mSQL e fez APIs para o novo servidor praticamente iguais ao
mSQL. Como resultado usurios do mSQL que decidissem mudar para o novo servidor da TcX,
teriam apenas que fazer pequenas e simples mudanas nos cdigos existentes.
18
Ento foi me maio de 1995 que, definitivamente, a primeira verso do MySQL foi lanada. Um
dos parceiros da TcX sugeriu a distribuio do servidor na Internet, o objetivo disso era a
utilizao 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.
19
d) Permite operaes e funes nas clusulas select e where, bem como suporte as funes
SQL(group by , order by ), alm de funes de grupo como: Count(), avg(), sum(), std(),
max(), min().
e) Permite a seleo de diferentes tabelas de diferentes bases de dados em uma mesma query.
f) Suas caractersticas de privilgio de password so bastante flexveis, permitindo inclusive a
validao por host.
g) Possui algoritmos de criptografia de password, fornecendo assim segurana aos dados
gravados nas tabelas.
h) Permite a utilizao de at 16 ndices por tabela.
i) Capacidade para manipular bancos com at 50 milhes de registros.
j) MySQL foi escrito em C e C++
k) Permite conexes via TCP/IP
l) Permite acesso via ODBC.
m) Possui instrues para extrao de informaes relativas a tabelas, bancos, ndices.
2.5.
aplicaes Web que utilizem o banco sejam para fins comerciais, excluindo-se a comercializao
do MySQL.
O suporte para MySQL pode ser contratado, no entanto para isso existem contratos de
manuteno, sendo esses restritos as reas de cobertura da equipe.
Apesar de ser distribudo livremente para uso na Web e em outras vrias situaes, que no
cabem aqui serem mencionadas, existem vrios tipos de utilizao no qual se faz necessrio a
aquisio de licenas de uso, para citar alguns exemplos de valores, segue tabela 2.1 .
Nr. de licenas
1
10
U$ 150
50
U$ 120
100-999
U$ 40
1000-2499
U$ 25
20
21
Esse processo instalar o servidor e as ferramentas clientes bsicas, permitindo assim seu
funcionamento e criao dos bancos de dados. Durante esse processo o banco de dados ser
copiado com as permisses padres. Ocorrer a criao de entradas em sbin/rc.d para que se
possa iniciar o servidor automaticamente, bem como os arquivos de executveis e extenses dos
aplicativos para os diretrios padro.
Caso o processo ocorra sem erros j possvel testar instalao executando em uma shell o
comando mysql, o qual iniciar a principal ferramenta cliente para interpretao de comandos
SQL.
OBS: A Instalao atravs dos fontes do MySQL, requer algumas ferramentas no seu ambiente
operacional: um compilador C++ compatvel com ANSI, um programa make, um
descompactador, entre outros. De forma simplificada ser necessrio compilar os fontes, e passar
alguns parmetros de instalao. Esse processo exige um conhecimento mais aprofundado das
caratersticas as ferramentas envolvidas.
2.7. Compatibilidade do Banco MySQL com a linguagem SQL
O banco de dados MySQL compatvel com boa parte dos comandos da padronizao SQL 92,
possuindo um conjunto no muito extenso de instrues porm com as funes mais utilizadas
[YAR 99]. Alm disso, possui extenses com funes bastante teis, entre elas o auto_increment
que permite a gerao de nmeros seqncias para registros em cada nova insero executada
em uma tabela. Alguns comandos prprios do MySQL no funcionaro com outros bancos, mas
podem ser comentados de forma que durante um processo de importao sejam ignorados,
mantendo assim a portabilidade de suas instrues.
Tambm no suporta a utilizao de subselects, ficando assim deficiente em algumas situaes
de consulta. No tem suporte tambm a commit e rollback conforme ser discutido no prximo
captulo.
O MySQL suporta uma grande extenso de tipos numricos, caracteres, caracteres de tamanho
varivel, tipos enumerados, sendo os mais comuns e mais compatveis os que seguem a seguir:
Tipo
Int
Descrio
Valor inteiro
22
Real
Char(tamanho)
Date
Time
Text(tamanho)
2.8.
Transaes
23
24
Tipo
Char(60)
Char(16)
Char(16)
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Enum(n,y )
Funao
Host a qual se dar o acesso ao banco
Nome do usurio
Senha do usurio (Campo pode ser criptografado)
Possibilidade de executar o comando select
Possibilidade de executar o comando insert
Possibilidade de executar o comando update
Possibilidade de executar o comando delet
Possibilidade criar banco de dados
Possibilidade de apagar banco de dados
Possibilidade de atualizar os privilgios definidos
Possibilidade de finalizar o servidor
Possibilidade de gerenciar tarefas em execuo
Possibilidade de usar comandos que executam sobre arquivos
Possibilidade de definir privilgios para outros usurios
Possibilidade de criar e apagar ndices
Possibilidade de executar o comando ALTER TABLE
25
Talvez uma das mais importantes ferramentas para criao de banco de dados em MySQL seja a
mysql, pois atravs dela cria-se uma conexo direta com o servidor MySQL, permitindo executar
todos os comandos SQL disponveis desde a criao de bancos at a definio de privilgios para
o servidor. Com a execuo do comando inicia-se a utilizao do MySQL:
26
inicia-se a conexo comum prompt como esse: (mysql>) que permite a execuo dos
comandos SQL.
2.12.2.
Mysqladmin
27
e) Opens - o nmero de tabelas que foram abertas desde que o banco foi iniciado
f) Open tables o nmero de tabelas atualmente abertas. Por ser multitarefa uma tabela pode
estar aberta por mais de um processo, assim o nmero de tabelas abertas pode ser maior que
o nmero de tabelas existentes no servidor.
Outro comando que contm informaes sobre o servidor, mas de uma forma mais geral o
mysqladmin version, atravs dele pode-se saber: qual a verso do servidor, a verso do protocolo,
o mtodo 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 sada para este
comando:
Server version
3.22.25
Protocol version
10
Connecton
Unix Socket
/tmp/mysql.sock
Uptime
50 min 10 sec
User
Joao
Root
Host
Cliente.com
Localhost
Db
Teste
Command
Time
Sleep
0
Processes 0
State
Info
Esta tabela demonstra exatamente o que cada tarefa executada no servidor est fazendo.
ID : Possui o valor interno que identifica a tarefa executada, no possui relao com o nmero de
processos do sistema operacional. possvel utilizar este nmero para finalizar a tarefa
executando o comando mysqladmin kill.
User: O usurio que est executando essa tarefa.
Host: O computador do qual o usurio est conectado.
Db : Qual o banco de dados o usurio 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 conexo.
28
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 informaes de acesso ao banco.
h) Shutdown Tarefa finalizando todos as outras tarefas e parando o servidor
i) Statistics Tarefa gerando estatsticas.
j) Processes Tarefa examinado outras tarefas.
k) Connect - Negociando um conexo.
l) Kill Tarefa finalizando outra tarefa
Como pode-se observar, o comando mysqladmin processlist permite fazer uma anlise detalhada
de todas as tarefas que esto sendo executadas, dando a possibilidade do administrador avaliar a
necessidade de encerramento de tarefas em casos de falhas.
O processo de finalizao do banco de dados se da atravs do comando:
Sheel> mysqldamin p shutdown
29
O que PHP ?
PHP uma linguagem que permite criar Web sites dinmicos, possibilitando uma interao
com o usurio atravs de formulrios, parmetros da URL e links. A diferena de PHP com
relao a linguagens semelhantes a Javascript que o cdigo PHP executado no servidor,
sendo enviado para o cliente apenas HTML(Hyper Text Markup Language) puro. Desta maneira
possvel interagir com bancos de dados e aplicaes existentes no servidor, com a vantagem de
no expor o cdigo fonte para o cliente. Isso pode ser til quando o programa est lidando com
senhas ou qualquer tipo de informao confidencial [BAR 99].
Para interagir com o Banco de Dados, possvel se inserir dentro do cdigo HTML, alm da
linguagem de programao C, a linguagem para manipulao de Banco de Dados SQL
(Structured Query Language).
Uma caracterstica desta linguagem a possibilidade de inserir o cdigo PHP dentro do cdigo
HTML, o que no 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 cdigo PHP
simplesmente impressa na tela:
<html>
<body>
<?php
print Exemplo de cdigo PHP;
?>
</body>
</html>
Figura 3.1 - Exemplo de cdigo PHP embutido em um cdigo HTML.
O cdigo PHP permite ainda que durante a execuo haja uma alternncia entre o seu modo e o
modo HTML.
30
<html>
<body>
<?php
print Modo PHP;
?>
<hr>
<center><b>Modo HTML</b></center>
</hr>
<?php
print Modo PHP de novo;
?>
</body>
</html>
Figura 3.2 - Exemplo de alternncia entre os modos PHP e HTML
Histrico
O desenvolvimento do PHP comeou em meados de 1994 por Rasmus Lerdorf que lanou uma
verso apenas para teste e demonstrao, e utilizado pelo seu criador para o desenvolvimento de
uma Home Page visando divulgar e aplicar testes prticos nova ferramenta.
A primeira verso ser usada por outros programadores s foi disponibilizada em 1995 e foi
chamada de Personal Home Page Tools. Essa verso foi considerada apenas como uma
31
reviso da anterior, tanto que no foi muito utilizada. No foram feitos muitos trabalhos com ela,
apenas alguns utilitrios j bastante comuns para as Home Pages da poca, um guestbook, um
contador de visitas e algumas outras aplicaes pequenas. Esta verso foi revisada e refeita em
meados de 1995 e nomeada de PHP/FI 2.0. O FI era a indicao de um outro pacote que Rasmus
havia criado para permitir a interpretao 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 comearam a contribuir em seu cdigo fonte.
difcil apontar estatsticas 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 nmero subiu para algo em torno de
50.000. Em 1997 houve outra grande mudana no PHP, o seu criador Rasmus Lerdorf anunciou
que devido ao grande nmero de projetos que havia recebido de outras pessoas iria a partir dali
montar um grande time para tratar do desenvolvimento e administrao do PHP. Ento iniciou-se
o desenvolvimento de uma nova verso, o PHP 3.0. Nesta verso uma parte do cdigo do PHP/FI
foi portada no PHP 3.0 e a outra foi completamente rescrita [BAK 99].
Em 1999 estimava-se que o nmero de sites que utilizam o PHP tanto a verso 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 caracterstica do PHP em se tratando de acesso a Banco de Dados
via Internet, o vasto nmero de Banco de Dados que ele d suporte.[FIS 99] Os Bancos de
Dados a seguir so 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
32
k) Oracle
l) Unix dbm
m) Informix
n) PostgreSQL
3.4.
33
Feita a instalao do Apache Web Server e do PHP respectivamente o prximo passo tratar da
configurao, mas isso ser visto mais adiante. Agora mostra-se como se faz, para no momento
da instalao dar suporte aos Bancos de Dados suportados pelo PHP.
No momento da instalao, 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 execuo. Mas como foi
feito com o MySQL pode-se configurar outros Bancos de Dados tambm, e no apenas um mas
quantos forem necessrios, desde que, claro, seja um Banco de Dados suportado. A maneira
como isso ser feito a seguinte:
Bancos de
Dados
Adabas D
Diretivas
-with-adabas=DIR
Descrio
Sendo que o parmetro a ser passado o diretrio
onde o Banco de Dados Adabas D ser instalado,
Dbase
FilePro
MSQL
-with-dbase
-with-filepro
-with-msql=DIR
MySQL
-with-mysql=DIR
/usr/local/Hughes.
Adiciona o MySQL com DIR sendo o diretrio para
Oracle
PostgreSQL
-with-oracle=DIR
-with-pgsql=DIR
tendo
como
default
diretrio
-with-solid=DIR
/usr/local/pgsql.
O diretrio default
-with-sybase=DIR
/usr/local/solid.
O parmetro o diretrio de instalao do Sybase,
Sybase-CT
-with-sybase-ct=DIR
Velocis
-with-velocis=DIR
Solid
Sybase
para
instalao
Existe uma outra forma de instalar o PHP, atravs dos pacotes RPMs (RedHat Package
Manager). Os pacotes RPMs so um recurso que contm todos os arquivos que so necessrios
para instalao em um nico pacote, permitindo que tudo seja feito automaticamente. Isso evita a
34
necessidade de descompactar e compilar arquivos como foi feito na instalao anterior [JAM
99]. No caso do PHP, a instalao utilizando pacotes RPMs pode no ser muito recomendvel,
tendo em vista que o PHP possui algumas configuraes que so especficas no cdigo.
Instalando o PHP dessa forma o Apache Web Server inicialmente no processar as pginas em
formato PHP, sendo necessrio alguns ajustes nos arquivos de configurao do Apache Web
Server.
3.5.
Configurao
A configurao do PHP toda ela baseada em um arquivo, o php3.ini, que o arquivo que ser
lido sempre que as pginas em PHP forem executadas no servidor. Ele possibilita a configurao
de todos os diretrios e seus respectivos caminhos envolvidos na execuo do PHP, bem como
de todos os Bancos de Dados suportados, alm da segurana e do limite de memria que ser
disponibilizada para a execuo dos arquivos PHP. A seguir tem-se alguns exemplos de
configurao:
Configurao
doc_root string
Descrio
o diretrio de root no servidor, em modo de
segurana nenhum arquivo que estiver fora
deste diretrio ficar disponvel para usurios
comuns.
Especifica onde devem ser armazenados os
Include_path string
exibidos.
Diretrio destinado para uso dos usurios de
mysql.allow_persistent boolean
arquivos PHP.
Define se permitido insistncia conexo ao
mysql.max_persistent integer
Banco de Dados.
Se for permitido, informar o mximo de
mysql.max_links integer
35
Mas, dependendo da forma como o PHP foi instalado ser necessrio mais algumas
configuraes. Se a instalao foi utilizando pacotes RPM ento devemos tambm configurar o
arquivo do Apache Web Server httpd.conf.
Assumindo que a instalao foi toda ela com RPM, algumas linhas do arquivo httpd.conf
devero 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 Bsica
Delimitadores
Existem quatro formas de se delimitar um conjunto de cdigo PHP dentro de um cdigo HTML.
O interpretador reconhece um cdigo PHP pelas seguintes tags:
<?
[cdigo]
?>
Esta a forma mais utilizada.
<?php
[cdigo]
?>
36
Separador de Instrues
Assim como nas linguagens de programao mais conhecidas, como o C e o Perl por exemplo,
no PHP necessrio separar cada instruo do conjunto de cdigo por ponto-e-vrgula.
3.6.3.
Definio de Variveis
Todas as variveis so definidas atravs de um $ seguido de uma string que deve iniciar por
uma letra ou o caracter _.
O PHP case sensitive, ou seja, diferencia maiscula de minscula, a varivel $nome diferente
da varivel $NOME. Como o PHP j possui algumas variveis pr-definidas cujos nomes so
formados por letras maisculas, aconselhvel evitar-se usar variveis com letras maisculas.
3.6.4.
Comentrios
?>
<?php
37
Figura 3.4 - Exemplo de comentrio de uma linha em PHP
3.7.
Exemplos
3.7.1.
Um exemplo simples
38
<html>
<head><title>Testando o PHP</title></head>
<body>
Meu primeiro script em PHP
</body>
</html>
Exemplo Cdigo fonte do que ser exibido no navegador.
Este cdigo permite mostrar como o PHP funciona, o script foi executado no servidor deixando
disponvel ao usurio apenas o resultado em forma de cdigo HTML.
3.7.2.
O prximo exemplo mostra como o PHP trabalha com formulrios HTML. Sempre que se
pressiona o Submit em um HTML alguma informao enviada ao servidor para que se
produza uma resposta que satisfaa a solicitao feita no formulrio, para isso o PHP trata essas
informaes como variveis.
<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>
39
</body>
</html>
Exemplo de um PHP com formulrio HTML.
Salvando esse arquivo e carregando-o no navegador ele inicialmente ser apenas um formulrio
para digitar um texto. Digitando o texto pela primeira vez, a varivel $texto deixar de ser vazia
e conter o texto digitado, ento a partir da o PHP exibir antes do formulrio o contedo da
varivel $texto.
3.7.3.
Para interagir com uma base de dados SQL existem trs comandos bsicos que devem ser
utilizados: um que faz a conexo 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 endereo 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[usurio], string[senha]);
Abre uma conexo a um servidor MySQL, retorna id_link se tiver sucesso, caso contrrio,
retorna False.[FIS 99]
Os parmetros exigidos neste comando so o endereo do servidor (hostname), o nome do
usurio (usurio) e a senha para conectar-se ao servidor.
$conectou = mysql_connect(localhost, root, pwdphp);
Exemplo de conexo ao servidor de banco de dados.
b) Selecionado o Banco de Dados
Aps feita a conexo 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]);
40
AUTO_INCREMENT
mysql_query(CREATE
PRIMARY
KEY,
nome
TABLE
nomes
CHAR(40),
(codigo
INT
CHAR(50)),
$conexao);
Exemplo de escrita SQL em um cdigo PHP.
Assim como no exemplo acima foi executado o comando SQL create table, qualquer comando
de escrita SQL poderia ter sido executado.
41
O servidor Apache
O servidor Apache uma das mais de 500 ferramentas disponveis nesse segmento. Ele est
disponvel para as plataformas ,Unix Like, Solaris, Sun , Windows entre outras. Sendo um
software de livre distribuio. Atualmente Apache o servidor mais utilizado na Internet tendo
aproximadamente
35%
de
todo
mercado,
segundo
pesquisa
do
Site
42
4.3.
Breve Histrico
Apache foi criado em 1995 quando um grupo de desenvolvedores chamados The Apache Team Equipe Apache, consolidaram uma srie de patches - remendos- que eles havia feito para o
HTTP daemon do Centro Nacional de Aplicaes para Supercomputao (NCSA). Um ano
depois, Apache j era o mais popular servidor na Web.
4.4.
Instalao
43
Os mdulos do Apache
Webserver
Apache
Mdulo
PHP
Webserver
Apache
Mdulo
PHP
Processo 2
Processo 1
Processo 1
Quando compilado como mdulo do Apache o PHP roda no mesmo espao de memria do
processo do servidor Apache, causando aumento da performance. Alm disto, caractersticas
44
como conexes persistentes ao banco de dados e permisso de uma segurana adicional somente
esto disponveis no PHP como mdulo [CAS 00].
4.5.
Configurao
4.5.1.
Arquivos de configurao
4.5.1.2. Srm.conf
Este arquivo o que define a configurao dos recursos disponveis. Ele diz quais recursos sero
oferecidos pelo Web Site, e quando e onde eles sero oferecidos. Algumas diretivas ficam
45
Usar um servidor com suporte SSL uma boa maneira de providenciar segurana para um Web
Site sem a necessidade de nenhuma mudana nos cdigos das pginas. O que o SSL faz usar
criptografia para proteger o fluxo de informao entre o servidor e o browser. Este protocolo no
somente encriptografa a informao que trafega na Internet mas, tambm garante autencidade
tanto do servidor quanto do cliente, ou seja, um usurio de um Site com o protocolo SSL tem
certeza da origem dos dados.
O SSL usa uma tcnica de encriptao chamada criptografia de chave-pblica, onde o servidor
envia uma chave-pblica para o cliente criptografando informaes na qual somente o servidor
poder descriptografar com uma chave-privada. O cliente usa a chave-pblica para
encriptografar e enviar ao servidor sua prpria chave identificando ela somente para o servidor e
46
47
5. Implementao
O presente captulo tem por objetivo apresentar e descrever o sistema implementado neste
trabalho. A parte referente modelagem dos dados para a construo da base de dados tambm
est descrita neste captulo incluindo descrio das tabelas, modelo e-r, dicionrio de dados e a
sintaxe SQL utilizada para a criao das tabelas no banco de dados.
As ferramentas utilizadas foram:
a) Sistema Operacional Linux (Captulo 1) verso Conectiva 4.2
b) Banco de Dados MySQL (Captulo 2) verso 3.22.25
c) Linguagem de Programao PHP (Captulo 3) verso 3.0
d) Servidor Web Apache Web Server (Captulo 4) verso 1.3.9
De posse e tendo o conhecimento necessrio das ferramentas mencionadas acima, foi
desenvolvida uma Home Page onde usurios podem realizar provas virtuais de concursos
vestibulares onde, alm disto, pode-se consultar as questes cadastradas no banco de dados.
A prova virtual possibilita que o usurio teste seus conhecimentos nas diversas matrias que
compem um concurso vestibular durante o processo de preparao do candidato. Essas matrias
so: Matemtica, Portugus, Fsica, Histria, Qumica, Geografia e Biologia. Para a realizao
da prova o usurio tem a possibilidade de escolher alguns critrios das questes que sero
aplicadas na prova virtual. Por exemplo, alm da matria que se deseja, pode-se tambm
classificar as questes pelo ano em que elas foram aplicadas e o local de onde elas fizeram parte,
ou seja, em qual universidade ela foi aplicada. Outros critrios possveis so o nmero de
questes que se quer na prova e o nvel de dificuldade da mesma, que pode ser fcil,
intermedirio, difcil ou aleatrio. Com todos esses parmetros passados j possvel realizar a
prova virtual. Aps a elaborao e realizao da mesma, ou seja, depois que o usurio j tiver
respondido todas as questes, possvel se fazer a correo retornando as respostas corretas
confrontadas com as respostas dadas pelo usurio.
Para a realizao da consulta ao banco de dados, igualmente prova, deve-se passar parmetros,
que so matria, local e ano. Um diferencial a possibilidade de se consultar por texto, isso
significa que atravs de uma palavra-chave digitada num campo disponvel, tem-se retornado um
resultado de consulta com questes referentes quela palavra-chave. Isto possvel passando-se
ou no os outros parmetros, ou seja, pode-se realizar somente a consulta por palavra-chave.
48
Com a apresentao de uma breve descrio da implementao, onde deu-se uma idia do
funcionamento e do objetivo da mesma, o captulo segue com uma descrio detalhada do
processo de construo da Home Page para explicao da implementao de todos os itens que
aqui foram citados. Primeiramente ser apresentado um fluxograma com a descrio dos seus
mdulos para compreenso mais aprofundada, em seguida todo o processo de modelagem dos
dados passando para as funes PHP que foram utilizadas e finalizando com a implementao de
todos os arquivos PHP e HTML que compem a Home Page.
5.1.
Fluxograma
1.1
Selecionar Matria
1.2
Selecionar Local
2.1
1.3
Acessar
BD/Realizar
Consultas
2.3
Retornar arquivo
HTML do Servidor
Selecionar Ano
No
Nvel dificuldade
Form ular
Prova ?
Sim
1.6
Acessar
BD/Realizar
Consultas
1.7
Retornar arquivo
HTML do Servidor
3.1
Selecionar Matria
3.2
Selecionar Ano
3.3
Selecionar Local
Digitar Palavra
2.2
1.5
Busca Rpida
Buscar por
texto ?
No
Sim
2.4
3.4
Digitar Palavra
3.5
Quant. Questes
No
Consultar ?
Sim
Responder
Prova ?
3.6
Acessar
BD/Realizar
Comsultas
3.7
Retornar arquivo
HTML do Servidor
3.8
Mostrar Resultado
da Consulta
No
Sim
1.8
Corrigir Prova no
Servidor
Retornar
Resultados
1.9
Figura 5.4 - Fluxograma da seqncia de aes executadas durante o processo de visita de um usurio
Home Page
49
5.1.1.
A seguir tem-se uma descrio detalhada de cada mdulo do fluxograma representado na figura
5.1.
50
5.1.1.2.
A busca rpida d a opo de pesquisa no banco de dados por palavras chave, ou seja, basta
digitar uma palavra para se buscar questes 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: aps digitar a palavra e fazer a requisio da consulta,
o arquivo buscarap.php3 acessa o banco de dados e realiza consulta SQL em busca das
questes que satisfaam a condio.
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
usurio com o resultado da consulta por ele solicitada.
5.1.1.3.
Neste mdulo est representada a possibilidade de se fazer uma consulta mais aprofundada s
questes que esto cadastradas no banco de dados.
a) 3.1 Selecionar Matria: seleciona-se a matria que se deseja passar como parmetro para
realizar a consulta.
b) 3.2 Selecionar Ano: consultar questes referentes determinado ano.
c) 3.3 Selecionar Local: consultar questes referentes determinado local onde a questo foi
aplicada.
d) 3.4 Digitar Palavra: caso deseja-se consultar as questes tambm por uma palavra chave,
basta digita-la no campo disponvel.
e) 3.5 Quant. Questes: aqui deve-se selecionar a quantidade de questes que se deseja ser
exibida por pgina no resultado da consulta.
51
Descrio do Fluxograma
Inicialmente, tem-se as opes de realizar a prova virtual, consultar questes por palavras e
consultar questes por outros campos.
Para a realizao da prova virtual, o processo se seguir com a escolha dos campos a serem
requisitados no Banco de Dados para a formulao da prova, so eles: matria, local, ano,
quantidade de questes da prova e nvel de dificuldade. Feita a escolha dos campos, pode-se
ainda recusar a formulao da prova retornando para a pgina inicial do Web Site. Por outro lado
se houver prosseguimento ao processo realizando a formulao da prova, todos os parmetros
selecionados so 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 questo, MySQL, todos o processos de
consulta e seleo requisitados anteriormente retornando um arquivo em formato HTML que
ser exibido na tela com o resultado da sua consulta. Tendo-se a prova formulada disposio,
pode-se ainda reformular uma outra prova no respondendo-a e retornando pgina onde se tem
todos os campos serem preenchidos. Se a prova for respondida, aps isso ocorrer o processo
de correo da mesma no servidor e finalmente retornando um arquivo HTML com os
resultados.
Na opo de consultar questes por palavras, deve-se simplesmente digitar no campo a palavra
que se deseja consultar nas questes armazenadas no Banco de Dados. Com isso o arquivo .php3
ir buscar no Banco de Dados todas as questes que contm a palavra especificada, retornando
um arquivo HTML do servidor com o resultado encontrado e exibindo na tela as questes
selecionadas atravs deste critrio.
Optando-se por fazer uma consulta um pouco mais criteriosa, deve-se realizar a busca por outros
campos alm da palavra. A maneira como isso funciona a seguinte: aps escolher esta opo,
deve-se selecionar os campos matria, ano e local de acordo com as necessidades. Em seguida,
52
existe a alternativa de, alm de se buscar por esses critrios j selecionados, consultar tambm
por uma palavra que deseja-se estar presente entre as questes 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 no for utilizada, o processo
de consulta segue normalmente com a seleo da quantidade de questes que se deseja por
pgina na exibio da consulta. Com os campos necessrios para a realizao da consulta
devidamente preenchidos ou selecionados, o processo pode ser interrompido recusando-se a
consulta e retornando pgina 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.
Agora ser relatado como realizou-se todo o processo da modelagem dos dados envolvidos na
implementao desenvolvida neste trabalho. Comeando com uma descrio das tabelas,
passando aps para um Modelo E-R, seguindo com um dicionrio dos dados e finalizando com a
sintaxe SQL utilizada para a criao das tabelas no Banco de Dados utilizado, o MySQL.
5.2.1.
Campo
numquest
questao
imagem
Descrio
Indica o nmero da questo no banco de dados. (cdigo)
Contm a descrio da questo que est armazenada, qual a pergunta.
Campo reservado para eventual necessidade da questo conter alguma imagem.
materia
ano
local
certas
erradas
S utilizado se necessrio.
Armazena qual matria a questo se refere.
Indica em que ano a questo foi aplicada no vestibular.
o local onde a questo foi aplicada.
Determina a quantidade de usurios que acertaram a questo.
Determina a quantidade de usurios que erraram a questo.
53
Tabela 5.3 - Descrio dos campos da tabela Questes.
A tabela resposta contm os dados das respostas das questes. Seus campos so:
Campo
numresp
numquest
descricao
imagem
Descrio
o nmero da reposta da questo.
Se refere qual questo da tabela questes a resposta corresponde.
Contm a descrio da resposta.
um campo utilizado quando a resposta contm alguma imagem, s
certa
quando necessrio.
Indica se a resposta descrita a verdadeira ou no.
Tabela 5.2 - Descrio dos campos da tabela resposta.
5.2.2.
As tabelas envolvidas no trabalho tem uma relao entre si, que representada por um modelo er. Enquanto a tabela questes contm apenas as suas informaes, a tabela resposta, por sua vez,
necessita da informao de qual questo determinada resposta faz parte, essa informao
buscada na tabela questes atravs do campo numquest que corresponde ao nmero da questo.
numqu est
numqu est
questao
imagem
materia
ano
lo cal
ce rtas
numr esp
de scri cao
imagem
certa
erradas
Resposta
Questes
5.2.3.
Dicionrio de Dados
As tabelas 5.3 e 5.4 representam o dicionrio de dados das tabelas questes e resposta
respectivamente. Sero apresentados juntamente com todos seus campos as propriedades de cada
um, como tipo, tamanho, etc.
54
Campo
numquest
questao
imagem
materia
ano
local
certas
erradas
Tipo
Tamanho
Mediumint
Text
Varchar
Varchar
Varchar
Varchar
Float
Float
Not Null
Extra
Ch. Primria
X
X
Auto_increment
80
25
4
20
10,2
10,2
X
X
Campo
numquest
numresp
descricao
imagem
certa
Tipo
Int
Char
Blob
Varchar
Char
Tamanho
11
1
80
1
Not Null
X
X
X
Ch. Primria
*
*
5.3.
Todas as tabelas da implementao foram criadas utilizando-se comandos SQL. A seguir ser
mostrado a sintaxe desses comandos durante a criao das tabelas questes e resposta.
a) Tabela questes
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
55
5.4.
No decorrer deste trabalho, houveram vrias situaes onde funes nativas do PHP tiveram que
ser utilizadas. Dentre as quais pode-se citar a necessidade de se gerar nmeros aleatrios para
formular a prova aleatria, e para o tratamento das strings na implementao da busca rpida e
na busca por texto.
Entre as funes que foram utilizadas deve-se dar destaque tambm 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 sero aqui apresentadas e comentadas uma a uma.
As outras funes tambm recebero um comentrio individual, apresentando inclusive a sua
sintaxe.
a) Funo: trim
Sintaxe: trim(string str);
Comentrio: apaga os espaos em branco do incio e fim de uma string.
b) Funo: explode
Sintaxe: explode(string separador, string str);
Comentrio: retorna um array contendo as partes da string com valores separaos por um
separador.
c) Funo: count
Sintaxe: count(mixed matriz);
Comentrio: retorna o nmero de elementos de um array. Retorna 1 se a varivel no for um
array e 0 se a varivel no estiver definida.
d) Funo: strlen
56
57
m) Funo: mysql_fetch_array
Sintaxe: mysql_fetch_array(int resultado);
Comentrio: retorna um array que indica o prximo registro do resultado da consulta ou
false se no houver mais registros no array.
n) Funo: mysql_data_seek
Sintaxe: mysql_data_seek(int id_resultado, int num_linha);
Comentrio: durante a verificao dos registros resultantes da consulta SQL esta funo
move o ponteiro interno dos resultados. Retorna true se tiver sucesso, caso contrrio retorna
false.
o) Funo: mysql_num_rows
Sintaxe: mysql_num_rows(int resultado);
Comentrio: retorna o nmero de registros contidos em um resultado de consulta SQL
enviada ao servidor.
5.5.
O presente item tem por objetivo apresentar a implementao de todos os arquivos .php3
inclusos no estudo de caso, bem como uma breve descrio dos arquivos HTML. Os arquivos
sero explicados um a um em suas principais caractersticas de implementao.
5.5.1.
O objetivo desse arquivo ser ponto de partida para as pginas que permitem fazer prova virtual
e consulta a questo do banco de dados. Tambm possvel efetuar uma consulta rpida, atravs
de palavras chaves digitadas pelo usurio.
A chamada ao arquivo que executa a consulta rpida 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 usurio, requerida a execuo do arquivo buscarap.php3 no
servidor, sendo enviada as palavras do formulrio como parmetro para o arquivo PHP. Aps
execuo retornada a pgina HTML com as questes que satisfazem as palavras chaves.
58
Os outros dois links existentes na pgina servem respectivamente para solicitar a pgina de prova
virtual e consulta de questes. Sua codificao fica assim:
<a href="consulta.html">Consulta</a>
<a href="prova.html">Prova virtual</a>
Sendo assim essas duas pginas no utilizam nenhuma implementao PHP, sendo arquivos de
HTML puro.
5.5.2.
Prova.html
Este arquivo o ponto principal da Home Page, pois ser atravs dele que todos os parmetros
para execuo da prova virtual sero enviados ao arquivo prova.php3 que criar a prova virtual.
Nesta pgina o usurio poder optar pelos seguintes parmetros para formulao da prova:
a) Matria atravs de um menu cascata ser possvel escolher entre as matrias disponveis,
somente uma ser selecionada, sendo sua escolha obrigatria.
b) Local - atravs de um menu cascata o usurio poder selecionar, um dos locais das quais se
originam as questes, ou seja qual universidade a questo foi aplicada. Sua escolha
opcional, caso no seja escolhido nenhum local , a criao da prova se basear em todas as
provas dos locais cadastrados .
c) Ano atravs de um menu
seleo da
informaes de acerto e erro so alimentadas para o banco a cada vez em que uma prova
virtual corrigida, assim as questes aumentam o numero de erro ou acerto em uma unidade.
59
Para elucidar melhor o processo de criao da prova, segue o exemplo: Suponha que o
usurio tenha escolhido o nvel fcil. Quando forem encontradas as questes com os
parmetros enviados, o sistema avaliara a porcentagem de acertos de cada questo, assim
dentro das questes sero escolhidas as N questes com maior percentual de acertos, sendo
essas enviadas para o usurio.
A chamada ao arquivo .php3 que executa o processo de criao da prova, assim codificado no
arquivo prova.html:
<form action=prova.php3 method=get>
... menus de seleo dos parmetros...
</form>
5.5.3.
Consulta.html
Este arquivo o responsvel pelas consultas que so realizadas ao banco de dados, nele que se
passa todos os parmetros necessrios para a realizao da mesma, ele os envia para o arquivo
consulta.php3 que se encarrega de processar as consultas em forma de SQL.
Os parmetros requisitados neste arquivo so:
a) Matria um menu cascata existe disposio do usurio para que se escolha entre as
matrias disponveis qual a desejada, a opo por uma matria opcional. Caso nenhuma
matria seja selecionada, o resultado da consulta abordar todas as matrias cadastradas no
banco de dados.
b) Ano a escolha do ano que se refere a questo tambm opcional e feita atravs de um
menu cascata. Se nenhum ano for selecionado, todos os cadastrados estaro includos na
pesquisa.
c) Local refere-se ao local onde a questo foi aplicada, tambm 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 usurio pode, alm de todos os parmetros mencionados acima,
optar por fazer uma busca por uma palavra-chave. Para isto basta digita-la no campo
disponvel, com isso a consulta ser processada considerando a palavra-chave, e somente
sero retornadas questes que de alguma maneira contenham a palavra digitada.
e) Nmero de Questes em um menu cascata deve-se selecionar a quantidade de questes
que se deseja por pgina para o resultado da consulta. Pode-se optar por cinco ou dez
questes por pgina.
60
Com todos estes parmetros devidamente selecionados, de acordo com a necessidade do usurio,
pode-se dar prosseguimento consulta com a chamada do arquivo consulta.php3 que est assim
codificado:
<form action=consulta.php3 method=get>
... menus de seleo dos parmetros...
</form>
5.5.4.
Prova.php3
O objetivo deste arquivo gerar uma pgina html que contenha uma prova virtual com questes
que atendam aos parmetros escolhidos pelo usurio. Esse script receber cinco variveis
oriundas da pgina prova.html, essas variveis so geradas automaticamente quando o script
chamado, assim ficam disponveis para utilizao na formulao da prova virtual.
As variveis so:
a) matria
b) local de origem da questo
c) ano que a questo foi aplicada
d) nmero de questes da prova
e) nvel de dificuldade
Das variveis acima, a matria, o nmero de questes e o nvel de dificuldade so de seleo
obrigatria, sendo o ano e o local opcionais. Caso o ano e o local no sejam escolhidos, a
consulta se basear em todos os anos e locais cadastrados.
Com toda as variveis passadas, o script segue-se o processo de gerao do cdigo SQL para
consulta das questes. A cada varivel 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 cdigo
para ser executado no banco de dados. Somente o nmero de questes no influenciar na
gerao do cdigo SQL, servindo apenas para controle das questes que sero exibidas.
Tratamento da varivel matria:
$par1 ="materia ='$materia'";
A varivel $par1 recebe por exemplo a string materia = historia, caso seja esta a seleo feita
pelo usurio na pgina prova.html.
61
62
questes escolhidas pelo usurio, a varivel $cont receber a posio onde comea a leitura
sequencial dos registros.
Difcil(3)
if ($nivel == 3)
{
$par4=" order by porcen asc";
}
Das questes selecionadas, ser agregada ao cdigo SQL a clusula order, que ordenar de
forma crescente as questes pelo campo porcen. Assim, sero selecionados por primeiro as
questes mais difceis, ou seja, com menor porcentagem de acerto.
Aleatrio(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 cdigo que implementa a seleo e impresso das questes em cdigo HTML.
if ($nivel == 4)
{
mysql_data_seek($sqlresult,$numbers[$x]);
$x++;
}
No primeiro trecho de cdigo, gerado um vetor com nmeros aleatrios de 1 at a quantidade
de registros encontrados utilizando as funes srand(), shuffle() e range(). Ao final do trecho que
gera uma questo HTML, testado o segundo trecho de cdigo descrito acima, que escolhe a
prxima questo ser impressa atravs da posio seguinte do vetor aleatrio. Por exemplo,
suponha-se que tenham sido encontrados 30 registros sendo esses numerados de 1 30. A
posio 1 do vetor tem o valor 10, ento com a funo mysql_data_seek posiciona-se um
ponteiro para o registro 10, e no prximo lao outro registro ser selecionado pelo valor aleatrio
do vetor seguinte..
63
64
numquest,
numresp,descricao,certa
from
resposta
where
numquest=$numreg
f) Gera um formulrio em forma de radio buttons com as respostas da questo,
usando um lao para as nmero de respostas.
g) Caso o nvel de dificuldade seja aleatrio, ser posicionado o ponteiro para a novo
registro a ser impresso, caso contrrio selecionado o registro seguinte.
h) Caso os critrios do lao de impresso de questes na seja validado, encerrada o
lao e finalizado o cdigo HTML.
Assim com esses passos gera-se o cdigo HTML com a prova virtual, sendo agora possvel sua
correo atravs dos script de correo de prova.
5.5.5.
Consulta.php3
o arquivo responsvel por processar as consultas solicitadas pelo usurio. Aps todos os
parmetros terem sido selecionados no arquivo consulta.html, o consulta.php3 trabalhar da
seguinte forma:
a) Uma sintaxe SQL com as requisies feitas montada, para isto todos os parmetros so
concatenados, ou seja, eles so lidos um a um e depois so unidos para formar a sintaxe.
...
if ($materia <> 'np')
{
$par2 =" materia = '$materia'";
$par=1;
}
//nesta
primeira
condio
em //$par2.
if ($ano <> 'np')
{
matria
selecionada
armazenada
65
explode('
',$buscar);//
cria
vetor
com
todas
'$recexplode[$i]
$recexplode[$i]_')" ;
%'
or
questao
like
'%
66
Com isto todas as condies passadas pelo usurio esto consideradas, o prximo passo unir
todas essas condies em uma sintaxe SQL nica:
$partodos=Select * from questoes. $par1. $par2. $par3. $par4.
$par5. $par6. $parbusca[$i];
b) prximo passo tratar da conexo com o banco de dados, primeiramente conecta-se ao banco
de dados e aps base de dados especifica.
if ($conectou = mysql_connect (localhost,root,php3000))
//testa
//testa conexo
//base de dados
c) Com a conexo base de dados estabilizada e com a sintaxe SQL para realizao da consulta
montada, basta agora executar esta consulta SQL no banco de dados para ter os resultados.
$sqlresult
mysql_query
("$partodos");//executa
query
mysql_fetch_array($sqlresult)//a
varivel
$row
recebe
$row
["questao"];//o
registro
retornado
impresso
na
//tela.
5.5.6.
Corrige.php3
A finalidade desse script fazer o tratamento do cdigo HTML gerado pelo script prova.php3,
assim quando o usurio tiver respondido as questes e solicitar sua correo, ser chamado o
script corrige.php3 que formar outra pgina HTML contendo um tabela confrontando as
respostas do usurio com as respostas corretas, bem como resultado final de total de acertos e
erros. Pelo fato de no haver necessidade de segurana das respostas, foi implementa um soluo
que mantm dentro da prpria pgina que contem a prova, as suas respostas corretas. Isso feito
incluindo tags HTML que ficam ocultadas para visualizao do usurio no browser, assim ao
executar o script de correo no necessrio o acesso a banco de dados para consulta e sim
67
Buscarap.php3
68
explode('
',$buscar);//
cria
vetor
com
todas
//testa
//testa conexo
//base de dados
Tendo os resultados da consulta em $sqlresult o ltimo passo tratar da listagem das questes
encontradas:
$row
mysql_fetch_array($sqlresult)//a
varivel
$row
recebe
$row
//tela.
["questao"];//o
registro
retornado
impresso
na
69
Concluses
O objetivo do trabalho foi alcanado, tendo em vista que se buscava verificar a possibilidade de
se montar um servidor Web utilizando ferramentas disponveis na Internet, bem como utilizar as
mesmas para a construo de um Site que possibilite acesso uma base de dados.
Com relao ao banco de dados, inicialmente optou-se pelo PostgreSQL, mas houveram
dificuldades de implementao no que diz respeito conexo entre o servidor de banco de dados
e o browser, outro fator que determinou a eliminao do PostgreSQL do trabalho foi a sua
escassa documentao. Ento passou-se para o MySQL, que mostrou-se uma ferramenta de
grande velocidade, porm sem uma grande nfase no quesito segurana, sendo que seu uso para
tal fim no recomendado pelos maiores especialistas. Alm disto, deve-se destacar a facilidade
de uso referente manipulao dos dados, como criao de tabelas, insero de registros,
alterao de dados, etc. Outro ponto importante que fez do MySQL o banco de dados escolhido
foi a documentao um pouco mais abrangente, alm dos documentos oficiais possui no mercado
alguns livros que facilitam o seu aprendizado.
A linguagem PHP facilitou bastante a manipulao com o banco de dados, isto por possuir
funes nativas que so especficas para cada banco, no caso do MySQL so mais de 30 funes
que do a possibilidade de se realizar todos os tipos de operaes com a base dados atravs de
um browser. Mas, no possui somente funes para bancos de dados, elas abrangem itens como
segurana, vetores, strings, etc.
Estas duas ferramentas integradas com o sistema operacional Linux e o servidor Apache Web
Server, possibilitaram a implementao do Site descrito no captulo 5. Esta implementao veio
a por em prtica todo o conhecimento adquirido no decorrer do presente trabalho, onde pde-se
observar que todas as ferramentas utilizadas tiveram uma integrao e um desempenho
satisfatrios dentro das caractersticas da implementao em questo. Ou seja, o banco de dados
MySQL portou-se muito bem por a implementao no necessitar de tratamentos de segurana,
mas somente de uma conexo rpida e eficaz, e a linguagem PHP mostrou uma grande
familiaridade com o MySQL atravs das suas funes nativas especficas para este banco.
Sugestes para trabalhos futuros
70
Como sugesto para trabalhos futuros, fica a implementao de um Site com a utilizao do
mdulo de segurana SSL do Apache, e o espelhamento do banco de dados de uma empresa para
a Web.
71
Referncias Bibliogrficas
[ARO 00]
[ATK 99]
Atkinson, Leon. 1999. Core PHP Programming, Prentice Hall PTR, USA.
[BAK 99]
[BAR 99]
[CAS 00]
[CON 99]
[FIS 99]
[JAM 99]
[KAB 98]
[RAT 98]
[YAR 99]