Você está na página 1de 32

Florianópolis – SC, out ubro de 2000.

Cu r so de PH P e M ySQL

Flá vio S. Gon z a ga < bim @in f.u fsc.br >


Guilhe r m e Bir ck a n < bir ck a n@inf.ufsc.br >
Í n dice
1 – MySQL ............................................................................................................................. 3
1.1 - Principais Características ........................................................................................... 3
1.2 - A Estrutura ................................................................................................................. 4
1.3 - O Sistema de privilégios............................................................................................. 5
1.4 - O Ambiente MySQL .................................................................................................. 6
1.5 - Exemplos .................................................................................................................... 7
2 - PHP.................................................................................................................................. 11
2.1 - Um breve histórico de PHP ...................................................................................... 13
2.2 - Comentários.............................................................................................................. 14
2.3 – Variáveis .................................................................................................................. 14
2.3.1 – Inteiros e ponto flutuante .................................................................................. 15
2.3.2 – Arrays ............................................................................................................... 15
2.3.3 – Strings ............................................................................................................... 16
2.3.4 – Variáveis de variáveis....................................................................................... 17
2.3.5 – Type casting...................................................................................................... 17
2.3.6 – Variáveis por referência no PHP4 .................................................................... 17
2.4 - Operações Matemáticas............................................................................................ 18
2.5 - Operadores................................................................................................................ 18
Exemplo........................................................................................................................ 18
Exemplo........................................................................................................................ 19
2.6 - Operações com strings.............................................................................................. 20
2.7 - Controlando o fluxo e LOOPS ................................................................................. 21
2.8 - Tratando formulários................................................................................................ 22
2.9 – Funções .................................................................................................................... 23
2.10 – Classes ................................................................................................................... 25
2.11 - Acesso à banco de dados ........................................................................................ 26
2.12 - FTP e HTTP ........................................................................................................... 28
2.13 - Sessões.................................................................................................................... 29
2.14 - Tratamento de Arquivos......................................................................................... 29
2.15 - Tratamento de Erros ............................................................................................... 31
Bibliografia ........................................................................................................................... 32

2
1 – M ySQL
MySQL é um servidor de banco de dados SQL m ult i- usuário e
m ult i- t hreaded. SQL é a linguagem de banco de dados m ais popular no
m undo. MySQL é um a im plem ent ação client e- servidor que consist e de
um servidor e diferent es program as client es e bibliot ecas.
SQL é um a linguagem padronizada que t orna fácil o
arm azenam ent o e acesso de inform ações. Por exem plo, pode- se usar
SQL para recuperar inform ações de produt os e arm azenar inform ações
de client es para um sit e Web.
O servidor MySQL é t am bém rápido e flexível o suficient e para
perm it ir arm azenar logs e figuras nele. As principais vant agens do
MySQL são velocidade, robust ez e facilidade de uso. MySQL foi
originalm ent e desenvolvido pois a equipe da T.c.X. Dat aKonsult AB
( em presa que desenvolveu MySQL) precisava de um servidor SQL que
pudesse m anipular banco de dados grandes num a ordem de m agnit ude
m ais rápida que qualquer banco de dados com ercial pudesse lhes
oferecer. A equipe da TcX t em usado MySQL desde 1996 em um
am bient e com m ais de 40 banco de dados cont endo 10.000 t abelas, das
quais m ais de 500 t êm m ais de 7 m ilhões de regist ros. I st o som a
aproxim adam ent e 100 Gbyt es de dados.

1 .1 - Pr in cipa is Ca r a ct e r íst ica s

As principais caract eríst icas do MySQL são:

!" Manipula um núm ero ilim it ado de usuários sim ult âneos;
!" Alt a velocidade de execução;
!" Possui API s C, C+ + , Eiffel, Java, Perl, PHP, Pyt hon e TCL;
!" Trabalha com diferent es plat aform as: Unix, Windows et c.;
!" Disponibiliza diversos t ipos de dados: I NT ( int eiros sinalizados e não-
sinalizados de 1, 2, 3, 4 e 8 byt es) , FLOAT, DOUBLE, CHAR,
VARCHAR, TEXT, BLOB, DATE, TI ME, DATETI ME, TI MESTAMP, YEAR,
SET e ENUM;
!" Alt a velocidade na execução de j oins usando m ult i- j oin ot im izado;
!" Suport e com plet o a operadores e funções nas cláusulas SELECT e

WHERE;
!" Suport e às cláusulas GROUP BY e ORDER BY e a funções de grupo
( COUNT( ) , AVG( ) , STD( ) , SUM( ) , MAX( ) e MI N( ) ) ;
!" Suport e a LEFT OUTER JOI N com a sint axe ANSI SQL e ODBC;
!" Possibilidade de m ist urar t abelas de diferent es bancos de dados na
m esm a query;

3
!" Sist em a de privilégios flexível, sim ples, eficient e e seguro, que
perm it e verificação baseada em host .
!" Suport e a ODBC ( Open Dat aBase Connect ivit y) para Windows95 e
suas funções. É possível, por exem plo, usar o Access para conect ar
ao servidor MySQL;
!" Tabelas de disco sob a form a B- t ree rápidas com com pressão de
índices;
!" Perm it e 16 índices por t abela;
!" Disponibiliza regist ros de t am anho fixos e variados;
!" Manipula grandes bancos de dados com vast os volum es de
inform ações, na ordem de 50.000.000 regist ros;
!" Escrit a em C e C+ + . Test ada com diferent es com piladores;
!" Possui um sist em a de alocação de m em ória ext rem am ent e rápido;
!" Suport e t ot al ao conj unt o de caract eres I SO- 8859- 1 Lat in1, t odos os
dados são salvos e ordenados nest e form at o;
!" Perm it e a definição de aliases em colunas e t abelas com o no padrão
SQL92;
!" DELETE, I NSERT, REPLACE e UPDATE devolvem o núm ero de linhas
afet adas pelo com ando;
!" Nom es de funções não ent ram em conflit o com nom es de t abelas ou
colunas;
!" O servidor pode em it ir m ensagens de erros em diversas linguagens;
!" Client es podem conect ar ao servidor MySQL ut ilizando conexões
TCP/ I P, Unix socket s ou sob o Windows NT.

1 .2 - A Est r u t u r a

Um banco de dados nada m ais é do que um a hierarquia de


est rut uras de dados com plexas. Em MySQL, com o em m uit os out ros
bancos de dados, o conceit o da est rut ura que m ant ém os blocos ( ou
regist ros) de inform ações é cham ado de t abela. Est es regist ros, por sua
vez, são const it uídos de obj et os m enores que podem ser m anipulados
pelos usuários, conhecidos por t ipos de dados ( dat at ypes) . Junt os, um
ou m ais dat at ypes, form am um regist ro ( record) . Um a hierarquia de
banco de dados pode ser considerada com o: Banco de dados > Tabela >
Regist ro > Tipo de dados. Os t ipos de dados possuem diversas form as e
t am anhos, perm it indo ao program ador criar t abelas específicas de
acordo com suas necessidades. MySQL provê um conj unt o bem grande
de t ipos de dados, ent re eles:

!" CHAR( M) : st rings de t am anho fixo ent re 1 e 255 caract eres;


!" VARCHAR( M) : st rings de t am anho flexível ent re 1 e 255 caract eres.
VARCHAR ocupa sem pre o m enor espaço possível, no ent ant o é 50%
m ais lent o que o t ipo CHAR;

4
!" I NT( M) [ Unsigned] : núm eros int eiros ent re - 2147483648 e
2147483647. A opção " unsigned" pode ser usada na declaração
m udando o int ervalo para 0 e 4294967295 para int eiros não-
sinalizados;
!" FLOAT [ ( M,D) ] : núm eros decim ais com D casas decim ais;
!" DATE: arm azena inform ação relat iva a dat as. O form at o default é
'YYYY- MM- DD' e as dat as variam ent re '0000- 00- 00' e '9999- 12- 31'.
MySQL provê um poderoso conj unt o de com andos para form at ação e
m anipulação de dat as;
!" TEXT/ BLOB: st rings ent re 255 e 65535 caract eres. A diferença ent re
TEXT e BLOB é que no prim eiro o t ext o não é sensível ao caso e no
segundo sim ;
!" SET: conj unt o de valores st rings;
!" ENUM: conj unt o de valores st rings, difere do SET pois só são
arm azenados valores previam ent e especificados.

Além dos t ipos de dados exist em out ras opções a serem usadas
em conj unt o com os t ipos de dados para a criação de t abelas e
especificação de colunas:

!" Prim ary Key ( Chave Prim ária) : usada para diferenciar um regist ro do
out ro. Cada regist ro, dest a form a, não pode t er a m esm a chave
prim ária.
!" Aut o_increm ent : um a coluna com est a opção é aut om at icam ent e
increm ent ada quando da inserção de um regist ro;
!" NOT NULL: não perm it e a inserção de valores nulos.

1 .3 - O Sist e m a de pr ivilé gios

Adm inist rar o servidor MySQL, envolve a m anut enção do banco de


dados com as configurações do servidor ( host s, usuários e bancos de
dados) , ou sej a, o sist em a de privilégios. O conceit o do sist em a de
privilégios é sim ples, pela at ribuição de um conj unt o de privilégios, um
usuário em det erm inado host t em perm issão para execut ar com andos
sobre um a base de dados. Est es privilégios est abelecem um conj unt o de
regras no qual o servidor MySQL se baseia, e est as regras podem ser,
por exem plo, perm issão para inserir, selecionar, excluir inform ações de
um a t abela, ou criar, m odificar t abelas et c. Port ant o, o sist em a de
privilégio, se resum e em t rês t abelas principais: host , user e db t endo
com o hierarquia, da m ais alt a para a m ais baixa, a ordem apresent ada.

!" A t abela host det erm ina quais os host s que est ão habilit ados a
acessar o servidor MySQL. Sua est rut ura de colunas é a seguint e:
Host , Db, Select _priv, I nsert _priv, Updat e_priv, Delet e_priv,

5
Creat e_priv, Drop_priv, sendo que as duas prim eiras colunas
est abelecem , de qual host o banco de dados pode ser acessado e as
colunas t erm indas em priv são privilégios de acesso especificados
com Y ou N ( o default é N) .
!" A t abela user det erm ina os usuários que podem acessar o servidor e
suas senhas de ident ificação a part ir de um host . Sua est rut ura de
colunas é: Host , User, Password, Select _priv, I nsert _priv,
Updat e_priv, Delet e_priv, Creat e_priv, Drop_priv, Reload_priv,
Shut down_priv, Process_priv, File_priv;
!" A t abela db cont ém as inform ações relat ivas a qual banco de dados
um usuário de um cert o host pode acessar: Host , Db, User,
Select _priv, I nsert _priv, Updat e_priv, Delet e_priv, Creat e_priv,
Drop_priv.

1 .4 - O Am bie n t e M ySQL

As t abelas acim a funcionam exat am ent e com o t abelas norm ais


MySQL. Elas podem ser facilm ent e m odificadas usando com andos com o
I NSERT, UPDATE e DELETE.
Para ent rar no am bient e MySQL m onit or, ou o program a client e
m ysql, e acessar o servidor MySQL, o com ando a ser execut ado é o
seguint e:

shell> mysql –h host –u username –p databasename

A opção - h host significa especificar o nom e do host , –u usernam e


significa especificar o nom e do usuário que est á acessando, - p solicit a
um pedido de senha e o dat abasenam e é o nom e do banco de dados
que se desej a acessar. A respost a a est e com ando é o pedido de
ident ificação do usuário at ravés da senha e em seguida a apresent ação
e o prom pt do am bient e a espera de com andos:

Enter password: ******


Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 459 to server version: 3.22.20a-log
Type 'help' for help.
mysql>

A part ir do m om ent o que se est á conect ado ao servidor, é possível


realizar vários com andos sobre os bancos de dados que se t em
perm issão, com o selecionar um banco de dados ( “ use db_nam e; ” ) ,
buscar de dados em t abelas at ravés de queries ( consult as do t ipo “ select
* from um a_t abela; ” ) , inserir valores em um a t abela ( “ insert int o

6
um a_t abela values( 1,2) ; ” ) , criar bancos de dados ( “ creat e um a_bd; ” ) ,
criar t abelas ( “ creat e t able t est e( id int , descricao varchar( 50) ) ; ” ) ,
m ost rar t abelas do banco de dados selecionado ( “ show t ables; ” ) ,
descrever a est rut ura de um a t abela ( “ describe um a_t abela; ” ou “ show
colum ns from um a_t abela; ” ) , rem over t abelas ( “ drop t able t est e; ” ) e
out ros com andos SQL com uns à m anipulação e cont role de bancos de
dados. O com ando para desconect ar- se do am bient e é “ quit ” .

1 .5 - Ex e m plos

[shell]$ mysql -u root

Welcome to the MySQL monitor. Commands end with ; or \g.


Your MySQL connection id is 2 to server version: 3.22.25

Type 'help' for help.

mysql> show databases;


+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)

mysql> create database Curso;


Query OK, 1 row affected (0.00 sec)

mysql> show databases;


+----------+
| Database |
+----------+
| Curso |
| mysql |
| test |
+----------+
3 rows in set (0.00 sec)

mysql> use Curso;


Database changed

mysql> create table Aluno (


-> ID int not null auto_increment primary key,
-> Nome varchar(40),
-> Email varchar(30),
-> DataNasc date,
-> Matricula char(9) );
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;

7
+-----------------+
| Tables in Curso |
+-----------------+
| Aluno |
+-----------------+
1 row in set (0.00 sec)

mysql> desc Aluno;


+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| ID | int(11) | | PRI | 0 | auto_increment |
| Nome | varchar(40) | YES | | NULL | |
| Email | varchar(30) | YES | | NULL | |
| DataNasc | date | YES | | NULL | |
| Matricula | varchar(9) | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> alter table Aluno drop Email;


Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table Aluno add Endereco varchar(100) after Nome;


Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> desc Aluno;


+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| ID | int(11) | | PRI | 0 | auto_increment |
| Nome | varchar(40) | YES | | NULL | |
| Endereco | varchar(100) | YES | | NULL | |
| DataNasc | date | YES | | NULL | |
| Matricula | varchar(9) | YES | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> insert into Aluno values( NULL, 'Guilherme', 'Rua


Pirineus, 43', '1979-11-18', '9723220-3' );
Query OK, 1 row affected (0.00 sec)

mysql> insert into Aluno values( NULL, 'Fulano', 'Rua Pigmeus,


69', '1980-10-24', '9723299-9' );
Query OK, 1 row affected (0.01 sec)

mysql> select * from Aluno;


+----+-----------+------------------+------------+-----------+
| ID | Nome | Endereco | DataNasc | Matricula |
+----+-----------+------------------+------------+-----------+
| 1 | Guilherme | Rua Pirineus, 43 | 1979-11-18 | 9723220-3 |
| 2 | Fulano | Rua Pigmeus, 69 | 1980-10-24 | 9723299-9 |
+----+-----------+------------------+------------+-----------+
2 rows in set (0.00 sec)

mysql> select ID, Nome from Aluno where ID < 10;

8
+----+-----------+
| ID | Nome |
+----+-----------+
| 1 | Guilherme |
| 2 | Fulano |
+----+-----------+
2 rows in set (0.00 sec)

mysql> delete from Aluno where ID=2;


Query OK, 1 row affected (0.00 sec)

mysql> update Aluno set Nome='Guilherme Birckan' where ID=1;


Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from Aluno;


+----+-------------------+------------------+------------+-----------+
| ID | Nome | Endereco | DataNasc | Matricula |
+----+-------------------+------------------+------------+-----------+
| 1 | Guilherme Birckan | Rua Pirineus, 43 | 1979-11-18 | 9723220-3 |
+----+-------------------+------------------+------------+-----------+
1 row in set (0.00 sec)

mysql> grant all privileges on Curso.* to visitante@localhost


identified by ‘senha2000’;
Query OK, 0 rows affected (0.02 sec)

mysql> quit
Bye

[shell]$ mysql -u visitante;

Welcome to the MySQL monitor. Commands end with ; or \g.


Your MySQL connection id is 3 to server version: 3.22.25

Type 'help' for help.

mysql> use Curso;


Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-----------------+
| Tables in Curso |
+-----------------+
| Aluno |
+-----------------+
1 row in set (0.00 sec)

mysql> select * from Aluno;


+----+-------------------+------------------+------------+-----------+
| ID | Nome | Endereco | DataNasc | Matricula |
+----+-------------------+------------------+------------+-----------+
| 1 | Guilherme Birckan | Rua Pirineus, 43 | 1979-11-18 | 9723220-3 |
+----+-------------------+------------------+------------+-----------+
1 row in set (0.00 sec)

9
mysql> drop table Aluno;
Query OK, 0 rows affected (0.00 sec)

mysql> drop database Curso;


Query OK, 0 rows affected (0.00 sec)

mysql> show databases;

+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)

mysql> quit
Bye

10
2 - PH P
PHP é um a linguagem de script no lado do servidor ( server- side)
em but ida no HTML, port ant o é necessário inst alar o int erpret ador da
linguagem no servidor de Web. PHP, assim com o MySQL, est ão
disponíveis para download para sist em as UNI X, m as para o sist em a
operacional Windows precisam de um a licença.
PHP é diferent e de um script CGI escrit o em linguagens com o Perl
ou C pois, ao invés de escrever um program a com m uit os com andos
para saída em HTML, você escreve um script HTML com um código
em but ido para fazer a m esm a coisa. O código PHP é encapsulado em
t ags especiais de início e fim que perm it em você alt ernar para dent ro e
fora do m odo PHP.
O que dist ingue PHP de algo com o um Javascript no lado do client e
é que o código é execut ado no servidor. Se você t ivesse um script PHP
em seu servidor, o client e iria receber os result ados da execução dest e
script , e de m aneira algum a poderia det erm inar qual o código que est á
por baixo dest a execução. É possível configurar um servidor Web para
processar t odos os arquivos HTML com código PHP, e ent ão realm ent e
não há m aneira de os usuários perceberem que exist e código em but ido
na página HTML.
No nível m ais básico, PHP pode fazer qualquer out ra coisa que um
program a CGI pode fazer, t al com o colet ar dados de um form ulário,
gerar cont eúdo de páginas dinâm icas, ou enviar e receber cookies.
Talvez a m aior e m ais significant e caract eríst ica em PHP é seu
suport e a um a faixa m uit o am pla de bancos de dados. Escrever um a
página Web baseada em um banco de dados é m uit o sim ples. Os
seguint es bancos de dados são at ualm ent e suport ados: Adabas D,
I nt erbase, Solid, Dbase, m SQL, Sybase, Em press, MySQL, Velocis,
FilePro, Oracle, Unix dbm , I nform ix, Post greSQL.
PHP t am bém t em suport e a com unicação para out ros serviços
usando prot ocolos t ais com o I MAP, SNMP, NNTP, POP3, ou m esm o
HTTP. Você pode t am bém abrir socket s de rede e int eragir usando
out ros prot ocolos.
Um exem plo de um script dinâm ico que im prim e a dat a at ual est á
a seguir:

<HTML>
<HEAD>
<TITLE>Script de exemplo</TITLE></HEAD>
<BODY>
<CENTER>Bem-vindo ao script de exemplo:</CENTER>
<?php
/* "<?" acima indica o início do script PHP */
$hoje = date("Y-m-d");
print "<BR><BR>Hoje é: $hoje.";
# o sinal "?>" seguinte indica o fim do script

11
?>
</BODY>
</HTML>

Assum indo que hoj e é dia 06 de m aio de 2000, a saída do script


acim a seria:

Bem-vindo ao script de exemplo:

Hoje é: 2000-05-06.

Alguns pont os a considerar:

1. Todos os com andos PHP3.0 devem ser envolvidos pelas t ags < ? e ?> .
Um a segunda m aneira de denot ar com andos PHP é envolvendo- os
nas t ags < ?php e ?> ;
2. Todas as sent enças de saída para a t ela devem ser envolvidas por
aspas ( “ ) e conduzidas pelos com andos print ou echo;
3. Quase t odos os com andos PHP3.0 t erm inam com um pont o- e- vírgula;
4. Todo com ando HTML dent ro do com ando print será execut ado
norm alm ent e pelo browser e desem penhará sua função usual;
5. Docum ent os incluindo código PHP devem ser salvos com a ext ensão
.php ou .php3, ist o inform ará ao int erpret ador PHP3.0 para execut ar
os com andos encont rados dent ro das t ags < ? e ?> . É possível
t am bém ut ilizar ext ensões diferent es do padrão, m as isso acarret ará
o uso das t ags < ?php e ?> no sent ido de inform ar ao servidor Web
que é o int erpret ador PHP3.0 que se encarregará de execut ar o
script , j á que ist o não pode ser ident ificado pela ext ensão do arquivo;
6. A função dat e apresent ada no script acim a é um a das m ilhares de
funções que o PHP disponibiliza, ela t em o form at o: st ring dat e
( st ring form at o, int t im est am p) ; , ou sej a, ret orna um st ring e aceit a
dois parâm et ros: o t ipo de form at o a ser aprensent ado e um valor
t im est am p 1 de dat a opcional ( quando om it ido, com o no nosso caso,
considera a dat a at ual) .
Um a grande caract eríst ica de PHP3.0 é a capacidade de
const rução de t em plat es HTML, que são m uit o út eis quando se est á
desenvolvendo um sit e com m uit as páginas. I sso é possível at ravés do
com ando include que perm it e a inserção de código, provindo de um
arquivo separado, dent ro de um docum ent o HTML. Dest a m aneira é
possível est abelecer, por exem plo, um arquivo de rodapé num arquivo
cham ado rodape.t xt que aparecerá em várias páginas sem precisar
reescrever o código, apenas ut ilizando o com ando include, com o segue:

1
Tim est am p é um form at o especial de dat a, geralm ent e usado em sist em as UNI X, ele
arm azena sob a form a de um núm ero int eiro, os segundos, m inut os, horas, dia, m ês e
ano de um a dat a. Sendo que a cada segundo ele increm ent a o seu valor, t ornando
sim ples a m anipulação de dat a a part ir de operadores com o som a, subt ração et c.

12
<? include("rodape.txt"); ?>

Um out ro aspect o im port ant e de PHP é a capacidade de m odificar


variáveis passadas de form ulários HTML, t ornando possível a realização
de várias t arefas com o: envio de um e- m ail ( at ravés da função m ail( ) )
baseado em inform ações de um a página, im pressão de páginas
personalizadas, passagem e arm azenam ent o de inform ações em um
banco de dados et c.
Exist em várias out ras caract eríst icas int eressant es a dest acar
sobre PHP, ent re elas pode- se cit ar: Suport e ao m odelo de orient ação a
obj et os, I nt eração com bancos de dados, Criação de im agens GI F,
Aut ent icação HTTP, Manipulação de erros, Manipulação de cookies,
Suport e para upload de arquivos, Conexões persist ent es de bancos de
dados, Manipulação de arquivos rem ot os ent re m uit as out ras.
Para se t er um a idéia algum as classes de funções disponíveis no
PHP3.0 são list adas a seguir: funções de suport e a bancos de dados,
específicas ao Apache ( servidor de Web) , de array, m at em át icas,
calendário, dat a, diret órios, execução de program as, HTTP, im agem ,
filesyst em , hashes, Rede, NI S, PDF, Perl, expressões regulares, st rings,
URL, com pressão, XML et c.

2 .1 - Um br e ve h ist ór ico de PH P

PHP foi concebido num dia do out ono de 1994 por Rasm us Lerdof.
A prim eira versão ut ilizada ficou disponível no início de 1995 e foi
conhecida com o Personal Hom e Page Tools. Ele consist ia de um
analisador m uit o sim ples que ent endia som ent e algum as m acros e um
núm ero de ut ilidades que est avam em uso com um nas hom e pages at é
ent ão, um livro de visit ant es ( Guest book) , um cont ador e algum as
out ras coisas. O analisador foi escrit o em m eados de 1995 e foi
cham ado de PHP/ FI versão 2. Rasm us com binou os script s do Personal
Hom e Page Tools com o Form I nt erpret er e adicionou suport e a m SQL.
PHP/ FI cresceu e as pessoas com eçaram a cont ribuir com o seu código.
É difícil dar est at íst icas, m as est im a- se que, no fim de 1996,
PHP/ FI est ava em uso em pelo m enos 15.000 sit es pelo m undo. Na
m et ade de 1997 est e núm ero cresceu para m ais de 50.000 e nest a
época ocorreram m udanças no desenvolvim ent o do PHP. O analisador
foi reescrit o por Zeev Suraski e Andi Gut m ans e o novo analisador deles
form ou a base do PHP versão 3.

13
2 .2 - Com e n t á r ios

Todo program a deve possuir com ent ários, visando o ent endim ent o
do código em consult as post eriores. No PHP, exist em t rês t ipos de
m arcadores de com ent ário, que são:

/ / e # para com ent ário de um a linha. Por exem plo:

// atribui o nome à variável


$nome = "Guilherme Birckan";
$email = "birckan@inf.ufsc.br"; # atribui o E-mail à variável

e para com ent ários que ocupem m ais de um a linha, usam os os


m arcadores / * * / .

/*
Nas linhas abaixo, atribuiremos os valores
Do nome e do e-mail às respectivas variáveis
*/
$nome = "Guilherme Birckan";
$email = "birckan@inf.ufsc.br";

2 .3 – Va r iá ve is

Para com eçar, vam os ver com o o PHP t rat a suas variáveis ( ou
const ant es) , que podem ser variáveis escalares ou não- escalares. As
variáveis escalares são aquelas que podem ser ret rabalhadas, ou
" divididas em pedaços m enores" , enquant o as não escalares são as
arrays ( m at rizes) e os obj et os.
A ident ificação de um a variável, independent e do seu t ipo é pelo
sinal $ colocado com o prim eiro caract ere, com o abaixo:

$nome = "Guilherme Birckan";


$matricula = 97232203;

A prim eira variável é do t ipo st ring, e a segunda, int eiro ( am bas


escalares) . Vale lem brar que, com o a linguagem C, as variáveis $nome e
$Nome são consideradas diferent es, pois o PHP as t rat a com o sensíveis
ao caso.

14
2 .3 .1 – I nt e ir os e pont o flut ua nt e

As variáveis int eiras são bast ant e sim ples de ser usadas, sem
nenhum a diferença das dem ais linguagens que você est á habit uado a
usar. Segue as sint axes abaixo:

$a = 123;
$b = - 123;

As variáveis em pont o flut uant e t am bém são bem sim ples,


lem brando que no lugar da vírgula devem os usar um pont o ( “ .” ) :

$a = 1.23; / / a recebe 1,23


$a = 1.2e3;

2 .3 .2 – Ar r a ys

PHP suport a arrays sim ples e m últ iplas dim ensões ( t am bém
cham adas de m at rizes) . Usa- se um a variável sim ples indexada para
denot ar um array. Est a indexação pode ser feit a por núm eros ou m esm o
por st rings usando colchet es:

$a[ 1] = “ abc” ;
$a[ 1] = “ def” ;
$b[ “ a” ] = 15;

Para se adicionar valores no final do array você pode


sim plesm ent e usar est a sint axe:

$c[ ] = “ abc” ; / / $c[ 0] = = “ abc”


$c[ ] = “ def” ; / / $c[ 1] = = “ def”

Exist em funções j á im plem ent adas de ordenam ent o de vet ores,


t ais com o: sor t ( )

$fruit s = array ( " lem on" , " orange" , " banana" , " apple" ) ;
sort ( $fruit s) ;

Os arrays m ult idim ensionais são usados quase que da m esm a


form a que os arrays sim ples:

$a[ 1] [ 2] = $f;
$b[ 1] [ “ bola” ] = $f / / Você pode m ist urar índices
$b[ “ bar” ] [ 5] [ “ m esa” ] [ 2] = $f; / / array de 4 dim ensões

15
Em PHP3 t em os um problem a de referenciar arrays
m ult idim encionais dent ro de st rings. O exem plo a seguir não funciona:

$a[ 1] [ 5] = $f;
echo “ I st o não vai funcionar: $a[ 1] [ 5] ” ;

Mas você pode fazer isso usando a concat enação:

echo “ Agora funciona: “ . $a[ 1] [ 5] ;

2 .3 .3 – St r ings

Sign ifica do
\ n Nova linha
\ t Tab horizont al
\ \ Cont ra barra
\ $ Dollar

At ribuições e concat enações:

$st r = “ Abacat e” ;
$st r = $st r . “ grande” ; / / concat ena “ grande” na st ring
$st r .= “ e m adura” ; / / concat ena “ e m adura” na st ring

Pegando um caract er dent ro de um a st ring:

$prim eiro = $st r[ 0] ;


$ult im o = $st r[ st rlen( $st r) – 1 ] ;

Alguns exem plos de conversão de st rings:

$a = 1 + " 10.5" ; / / $a é um double ( 11.5)


$b = 1 + " 10 Sm all Pigs" ; / / $b é um int eiro ( 11)
$c = 1 + " 10 Lit t le Piggies" ; / / $c é um int eiro ( 11)
$d = " 10.0 rat os " + 1; / / $d é um int eiro ( 11)
$e = " 10.0 rat os " + 1.0; / / $e é um double ( 11)

16
2 .3 .4 – Va r iá ve is de va r iá ve is

Algum as vezes é convenient e você ut ilizar valores de variáveis


com o nom es de out ras variáveis, ut ilizando assim variáveis de form a
dinâm ica. I st o é possível em PHP!

$a = “ hello” ; / / I st o é um a variável sim ples


$$a = “ world” ; / * Acabam os de criar um a variável $hello com o
cont eúdo “ world” * /

Você t am bém pode im prim ir est as variáveis de form a dinâm ica:

echo “ $a ${ $a} ” ;

Terá com o result ado: “ hello world”

2 .3 .5 – Type ca st ing

Type cast ing em PHP funciona prat icam ent e com o em C:

$a = 10; # $a é um int eiro


$b = ( double) $a; # $b é um double

( int ) , ( int eger) Convert e para int eiro


( real) , ( double) , ( float ) Convert e para double
( st ring) Convert e para st ring
( array) Convert e para array
( obj ect ) Convert e para obj et o

2 .3 .6 – Va r iá ve is por r e fe r ê n cia n o PH P4

Na versão 4 do PHP, as variáveis podem receber valor por


referência. I st o significa que ao para at ribuir o valor a um a variável não
usam os um valor, m as um " pont eiro" para o valor em quest ão. Na
verdade, est e " pont eiro" é um a out ra variável:

$nome = "Guilherme Birckan";


$identificacao = &$nome;

Dest e m odo, a variável $identificacao recebe o valor de $nome


e, se um a das duas for at ualizada, a out ra t am bém será, m ant endo o
m esm o valor em am bas.

17
2 .4 - Ope r a çõe s M a t e m á t ica s

As operações no PHP t am bém seguem o padrão das out ras


linguagens ( + , - , * , / , % [ m odulo da divisão] , sin( ) , cos( ) ) . Além dest as,
o PHP t em um com plet o conj unt o de operações m at em át icas, que
podem ser consult adas nest a página:

ht t p: / / br.php.net / m anual/ ref.m at h.php3

Um exem plo para calcular o valor líquido de um preço, depois de


aplicar 10% de descont o sobre o preço brut o:

$valorbruto = 10;
$desconto = 10 * $valorbruto / 100;
$valorliquido = $valorbruto - $desconto;

2 .5 - Ope r a dor e s

Operadores arit m ét icos:

Ex e m plo N om e
$a + $b Adição
$a - $b Subt ração
$a * $b Mult iplicação
$a / $b Divisão
$a % $b Modulo da divisão

Operador de at ribuição:

Ex e m plo N om e
$a = $b At ribuição

$a = ( $b = 4) + 5; / / $b recebe 4 e $a recebe 9

18
Operadores lógicos:

Ex e m plo Ope r a dor


$a and $b E
$a && $a E
$a or $b OU
$a | | $b OU
$a xor $b XOR
! $a NOT

Operadores de com paração:

Exemplo Nome
$a == $b Igual
$a === $b Idêntico
$a != $b Não igual
$a < $b Menor que
$a > $b Maior que
$a <= $b Menor ou igual
$a >= $b Maior ou igual

Operadores de execução:

$out put = ` ls –l` ;


echo “ < pre> $out put < / pre> ” ;

Operadores de increm ent o/ decrem ent o:

Ex e m plo N om e Efe it o
+ + $a Pré- increm ent o I ncrem ent a $a, depois ret orna seu valor
$a+ + Pós- increm ent o Ret orna o valor de $a, depois increm ent a
- - $a Pré- decrem ent o Decrem ent a $a, depois ret orna seu valor
$a- - Pós- decrem ent o Ret orna o valor de $a, depois decrem ent a

19
2 .6 - Ope r a çõe s com st r in gs

Operações com st rings são um a das caract eríst icas m ais


desenvolvidas do PHP. Para concat enar- se dois st rings, usam os o
operador “ .” - Dent re as funções m ais im port ant es est ão:

• st r le n( ) , que perm it e saber quant os caract eres possui a st ring:

echo "A palavra 'internet' possui " . strlen("internet") .


" caracteres ";

• subst r ( ) , que devolve um a subst ring da st ring inform ada:

echo substr("abcde", 2 , 2); // Esta linha irá exibir os


caracteres "cd";

• ucw or ds ( st r ing) , convert e os prim eiros caract eres de st rings


em m aiúsculo.

Exem plo:

$nome = ucwords("valdir henrique dias leite");


echo($nome); //Esta linha exibirá Valdir Henrique Dias Leite

• st r pos ( ) , para saber se det erm inado caract ere ( ou subst ring)
est á cont ida em um a st ring:

if strpos ($email, "@") {


echo("Seu e-mail parece estar correto!\n");
} else {
echo("O e-mail está inválido\n");
}

No exem plo acim a, verificam os se o caract ere " @" est á cont ida em
um a variável $em ail. Se est iver, exibe a prim eira m ensagem . Do
cont rário, exibe a segunda.
Out ras funções relacionadas à operações com st rings podem ser
encont radas em

ht t p: / / br.php.net / m anual/ ref.st rings.ht m l

20
2 .7 - Con t r ola n do o flu x o e LOOPS

As funções usadas para cont rolar o fluxo do program a e execução de


" loops" são:

• if ... e lse ... e lse if, que segue o padrão da linguagem C:

if ($sexo == "m") {
echo "Você é do sexo Masculino\n";
} elseif ($sexo == "f") {
echo "Você é do sexo Feminino\n";
} else {
echo "Por favor, informe corretamente seu sexo\n";
}

• sw it ch, um a m aneira de cont rolar o fluxo onde a variável de


cont role do fluxo pode t er várias opções de valores. Est e t ipo de cont role
poderia ser feit o com um a seqüência de " ifs" e " elseifs" , m as o uso do
swit ch t orna o código m ais legível e faz com que sej a execut ado m ais
rapidam ent e, pois a verificação da variável " $sexo" só é feit a um a vez e
depois com parada com as opções de cada " case" . Se não est iver em
nenhum a delas, é execut ado o bloco sob o " default " . Já com o " elseif" , a
com paração é feit a novam ent e a cada sent ença. Nest e exem plo, a
diferença não é t ão grande, m as quando o t ipo de verificação vai ficando
m ais com plexo a velocidade com eça a ser sent ida. Na m aioria dos
casos, vale a pena opt ar pelo swit ch.

switch ($sexo) {
case "m":
echo "Você é do sexo Masculino\n";
break;
case "f"
echo "Você é do sexo Feminino\n";
break;
case default:
echo "Por favor, informe corretamente seu sexo\n";
break;
}

Sem pre inclua o com ando break no final do case. Caso cont rário, a
execução cont inuará at é encont rar o final do swit ch ( ou a inst rução
break) , fazendo com que as inst ruções de m ais de um case sej am
execut adas.

• w hile , que perm it e repet ir o código enquant o um a condição for


verdadeira:

21
while ($contador > 0) {
$contador = $contador - 2;
}

• for , para execução de um loop det erm inada quant idade de vezes:

for ($i==0; $i<100; $i++) {


echo "$i\n";
}

2 .8 - Tr a t a n do for m u lá r ios

Vam os fazer, passo- a- passo, um script para receber os dados de


um form ulário, consist ir as inform ações e enviar o result ado por e- m ail.
Est e form ulário possui cam pos para digit ação do nom e, e- m ail e
t elefone. Todos os cam pos são obrigat órios e a consist ência do cam po e-
m ail deve ser feit a apenas verificando a exist ência do caract ere @, para
facilit ar as coisas. Já o cam po t elefone deve t er set e ou oit o caract eres.
Tendo est e cenário, m ãos a obra!

<?php

$erro = "";

if ($nome == "") {
$erro .= "Digite seu Nome\n"; }

if ((strlen($telefone) > 8) or (strlen($telefone) < 7)) {


$erro .= "O número do telefone deve ter sete ou oito
caracteres\n";
}

if strpos ($email, "@") = 0 {


$erro .= "O e-mail digitado não é válido\n"
}

Est a prim eira part e faz a consist ência dos dados e alt era o valor
da variável $erro, caso algum a das condições não sej a sat isfeit a. Para
prosseguir, devem os verificar a ocorrência de erros e ent ão enviar o e-
m ail se erros não t iverem ocorrido ou enviar um a t ela de respost a
inform ando qual o erro acont eceu. Com o o valor de $erro ant es da
verificação dos cam pos é " " , bast a t est ar se a variável ainda t em est e
valor para saber se acont eceu ou não um erro. Vam os cont inuar:

22
echo("<html><title>Envie o formulário
abaixo</title><body><center>\n"); # Cabeçalho de resposta.

if ($erro == "") { // Não houve nenhum erro no preenchimento


mail("birckan@inf.ufsc.br", "Dados do Formulário"," Nome:
$nome\n E-mail: $email\n Telefone: $telefone\n","From:
$email\nDate: $date\n" );

echo("Obrigado por enviar este formulário!\n");


} else
echo("Não foi possível enviar o formulário!<br>Verifique as
mensagens abaixo<br><br><b> $erro \n");
}
echo("</center></body></html>\n");

Pront o!

A novidades nest e script é:

• e- m ail. Sua sint axe é a seguint e: m ail( Dest inat ário, Assunt o,
Mensagem , I nform ações_Adicionais) ;

Depois do script que envia e- m ail, vam os fazer um out ro que


guarde as inform ações de um form ulário HTML em um banco de dados.

2 .9 – Fu n çõe s

As funções no PHP não diferem m uit o das out ras linguagens.


Algum as caract eríst icas das funções:

• Devem ser declaradas ant es de serem usadas.


• Podem receber parâm et ros por valor ou por referência.
• Podem t er quant idade variável de parâm et ros ( Apenas a part ir da
versão 4) .
• Os parâm et ros podem ser declarados com um valor default .
• Um a vez definida, um a função não poderá ser " redefinida" .

23
Alguns exem plos de funções:

/*
Esta função retorna TRUE ou FALSE, dependendo da validade ou
não do e-mail informado.
*/
function verifica_email($email){
if strpos ($email, "@") = 0 {
return false;
} else {
return true;
}
}

/*
Neste exemplo calculamos o valor líquido, tendo o valor bruto
e o desconto a ser aplicado. Se o desconto não for informado,
utilizaremos 10% como padrão.
*/
function valor_liquido($valor_bruto, $desconto = 10) {
return ($valor_bruto - ($valor_bruto * $desconto/100));
}

Os dois exem plos acim a receberam seus parâm et ros por valor.
I sso significa que as alt erações de variáveis realizadas dent ro da função
só t erão efeit o no cont ext o da função, e est as m udanças não reflet irão
no rest o do script . Em alguns casos pode ser int eressant e que os valores
dos parâm et ros sej am alt erados pela função, e que seus novos valores
reflit am no script com o um t odo. Para conseguir ist o, usam os a t écnica
de passagem de parâm et ro por referência. Vam os ver um exem plo:

function completaURL(&$mv_URL) {
$mv_URL .= "http://".$mv_URL;
}

$URL = "www.inf.ufsc.br";
completaURL($URL);

echo "A URL completa fica assim: $URL\n";

24
2 .1 0 – Cla sse s

Com o não poderia deixar de t er, PHP t am bém possui suport e a


criação de classes e obj et os de form a sim ples:

class carro {

var $est ado; / / Est ado do carro: ligado ou desligado

funct ion liga( ) {


if ( $t his- > est ado ! = “ ligado” ) {
$t his- > est ado = “ ligado” ;
ret urn t rue;
} else {
ret urn false;
}
}
}

$carro1 = new carro;


$carro1- > liga( ) ;

O m ét odo const rut or da classe ( m ét odo que é execut ado quando a


classe é criada) é um a função com o m esm o nom e da classe:

class Pessoa {
var $idade;
funct ion Pessoa( ) {
$idade = 0; / / Todo obj et o dest a classe é criado com 0 anos
}
}

As classes podem herdar caract eríst icas de out ras classes. Criando
um a classe derivada de um a out ra classe, com o no exem plo a seguir da
criação da classe Aluno, derivada da classe Pessoa:

class Pessoa {
var $nom e;
var $endereço;
}

class Aluno ext ends Pessoa {


var $m at ricula;
}

25
Todas as caract eríst icas da classe m ãe são herdadas pela classe
filha. A herança m últ ipla não é suport ada pelo PHP.

2 .1 1 - Ace sso à ba n co de da dos

Com o foi dit o na apresent ação do PHP, o acesso à banco de dados


é um dos pont os fort es dest a linguagem . Ele possui acesso nat ivo a
ADABAS, ORACLE, SYBASE, SQL SERVER, DBASE, I NFORMI X, m SQL,
MySQL, POSTGRESQL, além de suport ar ODBC, fazendo com que o PHP
possa t rabalhar prat icam ent e com t odos os bancos de dados exist ent es.

Nest e m ódulo vam os ver apenas as apenas as funções relat ivas ao


banco MySQL, pois est a dupla PHP/ MySQL est á sendo preferida por um a
boa part e dos desenvolvedores, part icularm ent e no am bient e
Linux/ Apache.
O MySQL é um servidor SQL e port ant o devem os seguir alguns
procedim ent os e regras para acesso aos seus dados. Se você est á
acost um ado com o Oracle ou SQL Server não t erá dificuldades, m as se
você usa som ent e bancos de dados do t ipo Access ou DBF, poderá t er
dificuldades em ent ender o m ecanism o usado pelo MySQL.
A prim eira regra é t er um banco de dados cadast rado e um
usuário com acesso à est e banco de dados. Vale lem brar que o MySQL
não é um banco de dados, e sim um servidor de dados. Tenha ist o em
m ent e para ent ender o exem plo.
Digam os que t em os um banco de dados Curso com o usuário
visit ant e e senha t em p99. O prim eiro passo é " logar" ao servidor. Para
isso usam os a função mysql_connect e inform am os ao servidor login
( usuário) e senha. Vej a abaixo:

$conn = m ysql_connect ( " localhost " , " visit ant e" , " t em p99" ) ;

Est e com ando abrirá um a conexão com o MySQL da m áquina local


( localhost ) , usando o usuário visit ant e cuj a senha é t em p99. Um a
referência a est a conexão será gravada na variável $conn.
Depois de conect ados ao servidor, devem os conect ar ao banco de
dados propriam ent e dit o, usando o com ando m ysql_select _db, que
precisa de dois parâm et ros: O nom e do banco de dados e a conexão.
Caso a conexão não sej a inform ada, ele t ent ará usar a últ im a criada. Em
nossos exem plos, irem os sem pre inform ar os dois parâm et ros.

$db = m ysql_select _db( " " , $conn) ;

26
Nest e pont o j á t em os um a conexão com o servidor e j á criam os
um link com o banco de dados. Agora podem os enviar os com andos SQL
que desej arm os. Se você não souber SQL, aprenda : - )
Agora segue nosso exem plo prát ico: Vam os usar o script do
m ódulo passado e alt erá- lo de m odo que os dados digit ados no
form ulário sej am gravados no banco de dados Curso ant es de enviar o
e- m ail.

< ?php

$erro = " " ;

# Verificar se o cam po NOME est á vazio.


if ( $nom e = = " " ) {
erro .= " Digit e seu Nom e\ n" ;
}

# Verificar a quant idade de caract eres no cam po TELEFONE.


if ( ( st rlen( $t elefone) > 8) or ( st rlen( $t elefone) < 7) ) {
$erro .= " O núm ero do t elefone deve t er 7 ou 8 caract eres\ n" ;
}

# Test ar vam or do cam po E- m ail, verificando o caract er " @"


if st rpos ( $em ail, " @" ) = 0 {
$erro .= " O e- m ail digit ado não é válido\ n" ;
}

# Cabeçalho de respost a.
echo( " \ n" ) ;
echo( " < cent er> \ n" ) ;

if ( $erro = = " " ) {


$conn = m ysql_connect ( " localhost " , " visit ant e" , " t em p99" ) ;
$db = m ysql_select _db( " Curso" , $conn) ;
$sql = m ysql_query( " insert int o Aluno ( Nom e, Em ail, Telefone) values
( '" .addslashes( $nom e) . " ','" .addslashes( $em ail) ." ',
'" .addslashes( $em ail) ." ') " or die ( " Não foi possível at ualizar a t abela" ) ;
m ysql_close( $conn) ;
m ail( " birckan@inf.ufsc.br" , " Dados do Form ulário" ," Nom e:
$nom e\ n
E- m ail: $em ail\ n Telefone: $t elefone\ n" ," From : $em ail\ nDat e:
$dat e\ n" ) ;
echo( " Obrigado por enviar est e form ulário! \ n" ) ;
} else {
echo( " Não foi possível enviar o form ulário!
Verifique as m ensagens abaixo:

\ n" ) ;

27
echo( " < b> $erro < / b> \ n" ) ;
echo( " < br> < br> < a href= form .ht m > Volt ar\ n" ) ;
}
echo( " < / cent er> " ) ;

Est e é o procedim ent o padrão para usar servidores de banco de


dados com o PHP:

• Conect ar ao servidor
• Abrir o banco de dados ( um servidor SQL pode t er m ais de um banco
de dados)
• Enviar os com andos SQL
• Desconect ar do servidor

A novidade dest e exem plo fica por cont a do com ando die que finaliza o
script caso a função que o precede não possa ser execut ada.

2 .1 2 - FTP e H TTP

Algum as vezes pode ser út il que nosso script execut e um out ro


script ou ent ão t ransfira um arquivo para out ro servidor. Para isso,
podem os execut ar com andos HTTP e FTP de dent ro do PHP. Vej a os
exem plos:

H TTP: Podem os fazer, dent ro do script PHP, um a cham ada a out ro


script ou program a CGI hospedado em out ro servidor. I st o é m uit o út il
quando querem os consult ar algum dado em um servidor rem ot o, ou at é
m esm o para abrir um a página, usando o prot ocolo HTTP. Para isso,
bast a cham ar a função Header( " locat ion: pagina.ht m " ) para redirecionar
para um a página específica ou ent ão o usar o com ando abaixo para
execut ar um CGI passando parâm et ros via URL:

header("location: http://server/cgi/script.pl?p=" . $param);

Onde $param é um a variável que pode vir de um a consult a a


banco de dados ou m esm o de um form ulário.
Out ra função H TTP im port ant e é o uso de " cookies" para gravar
algum a inform ação no browser de quem est iver visit ando sua página.
Para gravar um " cookie" , usam os a função set cookie( ) , com o m ost rado
abaixo:

setcookie("Visitou", "Sim", time()+3600);

28
O com ando acim a gravará um cookie cham ado " Visit ou" com o
valor " sim " , com apenas um a hora de duração. Not e que o 3600 é o
núm ero de segundos além do horário at ual que o cookie deve ficar
at ivo. Se no lugar de 3600, usássem os 36000, o cookie seria at ivo por
10 horas.

FTP: A seqüência de t arefas para uso do prot ocolo FTP é Conect ar ao


Servidor, I dent ificar- se ( Login e Senha) , Enviar/ Buscar arquivo( s) ,
Desconect ar. Os com andos para cada um a dest as t arefas são:

$conn = ftp_connect(“ftp.inf.ufsc.br”);
$log = ftp_login($conn, 'login', 'pass');
ftp_put($con, 'arquivo_remoto', 'arquivo_local',
FTP_ASCII/FTP_BINARY);
ftp_quit($conn);

2 .1 3 - Se ssõe s

Sessões HTTP servem para preservar dados em acessos


subseqüent es, at ravés de regist ros de variáveis de sessão. Usam os
basicam ent e t rês funções:

• session_st art ( ) ;
• session_regist er( ” VARI ÁVEL" ) ;
• session_dest roy( ) ;

Exem plo:

<?php
session_start();
session_register("VARIAVEL");
if (!isset($VARIAVEL)) {
header("Location: error.php");
exit();
}
print "Passou!!";
?>

2 .1 4 - Tr a t a m e n t o de Ar qu ivos

O PHP possui várias funções para o t rat am ent o de arquivos a fim


de facilit ar sua m anipulação. A prim eira coisa que se t em que saber é

29
que para se m anipular arquivos, t em - se que abrir e fechar o arquivo. O
PHP possui as seguint es funções para se abrir e fechar arquivos:

• fopen( “ nom e_do_arquivo” , “ m ode” , [ diret ório] ) – Abre o arquivo


• fclose( fp ) - Fecha o arquivo

Est es m odos de abrir o arquivo podem ser os seguint es:

r som ent e leit ura; posiciona- se no início do arquivo.

r+ leit ura e escrit a; posiciona- se no início do arquivo.

w som ent e escrit a; posiciona- se no início do arquivo e o t runca


para t am anho zero. Caso o arquivo não exist a o PHP t ent a criá- lo.

w+ leit ura e escrit a; posiciona- se no início do arquivo e o t runca


para t am anho zero. Caso o arquivo não exist a o PHP t ent a criá- lo.

a som ent e escrit a; posiciona- se no final do arquivo. Caso o


arquivo não exist a o PHP t ent a criá- lo.

a+ leit ura e escrit a; posiciona- se no final do arquivo. Caso o


arquivo não exist a o PHP t ent a criá- lo.

Após abrir um arquivo, pode- se ler o cont eúdo ou escrever em seu


cont eúdo, de acordo com a form a que se abriu o arquivo.

• fread( fp, t am anho )


• fget s( fp, t am anho )
• fwrit e( fp, st ring, [ t am anho] )

Exem plos:

$nom edoarquivo = " / t m p/ t est e.t xt " ;


$fp = fopen ( $nom edoarquivo, " r" ) ;
$cont ent s = fread ( $fd, filesize ( $nom edoarquivo) ) ;
fclose ( $fp) ;

$fp = fopen( “ / t m p/ t est e.t xt ” , “ a” ) ;


fwrit e( $fp, “ bla bla bla \ n” ) ;
fclose( $fp) ;

$fp = fopen ( " / t m p/ t est e.t xt " , " r" ) ;


while ( ! feof( $fp) ) {
$buffer = fget s( $fp, 4096) ;
echo “ $buffer < br> ” ;
}
fclose ( $fp) ;

30
Nest e últ im o exem plo, pega- se linha a linha de um arquivo e
im prim e em HTML separando as linhas pela t ag “ < br> ” .

2 .1 5 - Tr a t a m e n t o de Er r os

O PHP t em um esquem a especial de " debugging" ( t rat am ent o e


verificação de erros) , que é acessado por um a port a TCP, que perm it e
acom panhar a execução dos script s e ver quaisquer erros que est iverem
acont ecendo.

Além disso o t rat am ent o de erros pode ser feit o no próprio script ,
conform e explicado abaixo:

O PHP possui 4 níveis de erros e avisos, que são:

1 - Erros de norm ais de Funções


2 - Avisos Norm ais
4 - Erro de int erpret ação
8 - Avisos que você pode ignorar, m as que podem causar danos à
execução norm al do script .

O padrão do PHP é o nível 7 ( 1 + 2 + 4) , m as est e nível pode ser


alt erado t ant o no arquivo de configuração quant o em t em po de
execução, cham ando a função error_reporting($nivel) com o nível
desej ado.
Se usarm os o valor 0 ( zero) nenhum aviso ou m ensagem de erro
será gerada em t em po de execução. Nest e caso, podem os usar um a
variável especial ( $php_errormsg) que cont erá o últ im o erro gerado
pelo script , para que possam os criar rot inas específicas para t rat am ent o
de erros. Podem os fazer um a analogia ao com ando on error resum e
next do ASP, t écnica m uit o út il para personalizarm os m ensagens de erro
para o usuário, ent re out ras coisas.

31
Bibliogr a fia

ht t p: / / www.ibest m ast ers.com .br


ht t p: / / www.weberdev.com
ht t p: / / www.php.net
ht t p: / / www.webm onkey.com
ht t p: / / www.devshed.com
ht t p: / / www.m ysql.com
ht t p: / / www.phpbuilder.com

TRIDAPALI, Graziela W. & SANT’ANNA, Juliana S. Trabalho de Conclusão de Curso –


“Construindo uma aplicação de Comércio Eletrônico”

32

Você também pode gostar