TUTORIAL DE PHP - ipp.ptpaf/proj/Set2001/Tutorial_PHP.pdf · Introdução ao PHP Estima-se que em...
Transcript of TUTORIAL DE PHP - ipp.ptpaf/proj/Set2001/Tutorial_PHP.pdf · Introdução ao PHP Estima-se que em...
Instituto Politécnico do Porto
Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática
TTUUTTOORRIIAALL DDEE PPHHPP
realizado por
José Bruno Pinto Rua
orientado por
António Cardoso Costa
Setembro de 2001
Agradecimentos
Agradecimentos Desejo agradecer ao Eng.º António Cardoso Costa por todo o apoio prestado,
quer pela disponibilidade para esclarecer dúvidas, quer pela revisão das versões preliminares deste trabalho, ou através da indicação de bibliografia útil.
Quero também agradecer aos meus pais, por todo o apoio e motivação que
sempre me deram, não apenas nos meus estudos, mas em todas as situações. Por fim, quero agradecer a todos os professores, colegas e amigos, que ao
longo de todos estes anos, de uma ou outra forma, me apoiaram, de forma a eu atingir com sucesso os meus objectivos.
A todos, o meu muito obrigado.
Tutorial PHP - 2 -
Índice
Índice
1 INTRODUÇÃO __________________________________________________ 7
2 INTRODUÇÃO AO PHP __________________________________________ 8
BREVE HISTÓRIA SOBRE PHP ___________________________________________ 8 O QUE É O PHP ? ____________________________________________________ 10 O QUE PODE SER FEITO COM PHP? ______________________________________ 11 PRINCIPAIS VANTAGENS DO PHP________________________________________ 12
3 SINTAXE BÁSICA ______________________________________________ 14
DELIMITAR O CÓDIGO PHP ____________________________________________ 14 SEPARADOR DE INSTRUÇÕES ___________________________________________ 15 NOMES DE VARIÁVEIS ________________________________________________ 15 COMENTÁRIOS______________________________________________________ 16
Comentários de uma linha __________________________________________ 16 Comentários de mais de uma linha ___________________________________ 16
IMPRIMIR CÓDIGO HTML _____________________________________________ 17
4 TIPOS _________________________________________________________ 18
TIPOS SUPORTADOS__________________________________________________ 18 Inteiros (integer ou long) ___________________________________________ 19 Virgula Flutuante (double ou float) ___________________________________ 19 Strings__________________________________________________________ 20 Arrays __________________________________________________________ 21 Listas___________________________________________________________ 22 Objectos ________________________________________________________ 23 Booleanos _______________________________________________________ 24
TRANSFORMAÇÃO DE TIPOS____________________________________________ 24 Atribuição _______________________________________________________ 24 Transformação explícita de tipos _____________________________________ 25 A função settype __________________________________________________ 26
5 OPERADORES _________________________________________________ 27 ARITMÉTICOS ______________________________________________________ 27 DE STRINGS ________________________________________________________ 27 DE ATRIBUIÇÃO _____________________________________________________ 28 BIT A BIT __________________________________________________________ 29 LÓGICOS __________________________________________________________ 29 COMPARAÇÃO ______________________________________________________ 30 EXPRESSÃO CONDICIONAL_____________________________________________ 30 DE INCREMENTO E DECREMENTO________________________________________ 31
Tutorial PHP - 3 -
Índice
6 ESTRUTURAS DE CONTROLO __________________________________ 32
CICLOS ___________________________________________________________ 32 COMANDOS DE SELECÇÃO _____________________________________________ 33
If ______________________________________________________________ 33 Switch __________________________________________________________ 36
COMANDOS DE REPETIÇÃO ____________________________________________ 38 While___________________________________________________________ 38 Do...While_______________________________________________________ 39 For ____________________________________________________________ 39 Break___________________________________________________________ 41 Continue ________________________________________________________ 41
7 FUNÇÕES ______________________________________________________ 43 DEFINIR FUNÇÕES ___________________________________________________ 43 RETORNO DE VALORES _______________________________________________ 44 ARGUMENTOS ______________________________________________________ 44
Passagem de parâmetros por referência _______________________________ 45 Argumentos com valores predefinidos (default)__________________________ 46
CONTEXTO_________________________________________________________ 48 ENDEREÇAMENTO ___________________________________________________ 48
8 VARIÁVEIS E CONSTANTES ____________________________________ 50 DECLARAÇÃO DE UMA VARIÁVEL _______________________________________ 50 O COMANDO STATIC _________________________________________________ 50 “VARIÁVEIS VARIÁVEIS” _____________________________________________ 52 VARIÁVEIS ENVIADAS PELO UTILIZADOR__________________________________ 52
URLencode ______________________________________________________ 53 Utilizar arrays ___________________________________________________ 54
VARIÁVEIS DE AMBIENTE _____________________________________________ 55 VERIFICANDO O TIPO DE UMA VARIÁVEL __________________________________ 56 DESTRUIR UMA VARIÁVEL_____________________________________________ 57 VERIFICAR O VALOR DE UMA VARIÁVEL __________________________________ 57
A função isset ____________________________________________________ 57 A função empty ___________________________________________________ 58
CONSTANTES PREDEFINIDAS ___________________________________________ 59 DEFINIR CONSTANTES ________________________________________________ 59
9 CLASSES E OBJECTOS _________________________________________ 60 CLASSES __________________________________________________________ 60 OBJECTO __________________________________________________________ 61 A VARIÁVEL $THIS __________________________________________________ 61 SUBCLASSES _______________________________________________________ 63 CONSTRUTORES_____________________________________________________ 64
10 NOÇÕES DE SQL _____________________________________________ 65 INTRODUÇÃO_______________________________________________________ 65 COMANDOS BÁSICOS DE SQL __________________________________________ 67
Comando Create__________________________________________________ 67 Comando Drop ___________________________________________________ 68 Comando Alter ___________________________________________________ 68
Tutorial PHP - 4 -
Índice
MANIPULAR DADOS DAS TABELAS_______________________________________ 69 Comando SELECT ________________________________________________ 69 Comando INSERT ________________________________________________ 70 Comando UPDATE _______________________________________________ 70 Comando DELETE________________________________________________ 71
11 ACEDER AO MYSQL VIA PHP _________________________________ 73 ESTABELECER CONEXÕES _____________________________________________ 73 SELECCIONAR A BASE DE DADOS ________________________________________ 74 REALIZAR CONSULTAS _______________________________________________ 75
Apagar o resultado ________________________________________________ 75 Retornar o número de linhas ________________________________________ 76 Utilizar os resultados ______________________________________________ 76 Alterar o ponteiro de um resultado ___________________________________ 77
12 UTILIZAR COOKIES__________________________________________ 78
O QUE SÃO COOKIES? ________________________________________________ 78 GRAVAR COOKIES ___________________________________________________ 79 LER COOKIES_______________________________________________________ 80
13 FICHEIROS __________________________________________________ 81 COPIAR FICHEIROS __________________________________________________ 81 VERIFICAR O TAMANHO DE UM FICHEIRO _________________________________ 82 VERIFICAR SE UM FICHEIRO EXISTE ______________________________________ 82 LIMPAR O CACHE ____________________________________________________ 83 ABRIR FICHEIROS PARA LEITURA E/OU ESCRITA_____________________________ 83 LER UM FICHEIRO ___________________________________________________ 86 ESCREVER NUM FICHEIRO _____________________________________________ 87 EXEMPLO__________________________________________________________ 88 UPLOADS COM FORMULÁRIOS HTML ____________________________________ 89
14 ENVIAR UM E-MAIL__________________________________________ 90
15 CONCLUSÃO_________________________________________________ 91
16 APÊNDICE 1 _________________________________________________ 92 INSTALAÇÃO E CONFIGURAÇÃO DO APACHE ( WINDOWS ) ____________________ 92
17 APÊNDICE 2 _________________________________________________ 94 INSTALAÇÃO E CONFIGURAÇÃO DO PHP ( WINDOWS ) _______________________ 94
18 APÊNDICE 3 _________________________________________________ 96 INSTALAÇÃO E CONFIGURAÇÃO DO MYSQL ( WINDOWS ) ____________________ 96
19 APÊNDICE 4 _________________________________________________ 98 COMANDOS BÁSICOS DE MYSQL________________________________________ 98
Iniciar o mySQL em background _____________________________________ 98 Fazer o login no mySQL como root ___________________________________ 98 Adicionar um novo utilizador________________________________________ 98 Fazer o login com o nome e password do utilizador criado ________________ 99 Criar uma base de dados chamada teste _______________________________ 99 Tornar essa base de dados, a base de dados activa_______________________ 99
Tutorial PHP - 5 -
Índice
Mostrar tabelas existentes na base de dados teste_______________________ 100 Mostrar definições da tabela tabelateste ______________________________ 100 Listar o todos registos da tabela tabelateste ___________________________ 101 Listar todos os registos onde o ID tem o número 1 ______________________ 101 Apagar um registo _______________________________________________ 101 Actualizar um campo de um registo __________________________________ 102
20 BIBLIOGRAFIA _____________________________________________ 103
Tutorial PHP - 6 -
Introdução
11 IINNTTRROODDUUÇÇÃÃOO
Este trabalho tem como principal objectivo a introdução à programação na
linguagem PHP.
Para isso tentei fazer uma abordagem simples e prática, tornando este tutorial
acessível quer a programadores experientes, quer a programadores que se estejam a
iniciar nesta área da programação. Para isso, como não poderia deixar de ser, foi preciso
algumas explicações básicas, como por exemplo a definição de tipos, ou de estruturas
de controle, possibilitando a um programador iniciante toda a informação necessária
para dar os primeiros passos na programação PHP. O programador mais experiente
também poderá encontrar informação de interesse, visto serem focados aspectos como o
tratamento de cookies, ou de e-mails.
Apesar do PHP poder ser implementado em qualquer ambiente, visto ser
independente do sistema operativo e do servidor de páginas, decidi especializar a
elaboração deste trabalho em ambientes Windows, fornecendo para isso alguma
informação nesse sentido, como por exemplo a instalação de algum software
importante.
Em termos de ligação a base de dados, apesar do PHP estar preparado para
trabalhar com quase todas as bases de dados disponíveis actualmente, decidi usar, para
efeitos de exemplo, a base de dados mySQL, visto ser uma base de dados muito simples
de usar, de forma a não se alargar o estudo muito além do PHP em si, e pelo facto de
estar também disponível para ambientes Windows.
Tutorial PHP - 7 -
Introdução ao PHP
22 IINNTTRROODDUUÇÇÃÃOO AAOO PPHHPP
BBrreevvee HHiissttóórriiaa ssoobbrree PPHHPP
A linguagem PHP foi concebida durante o Outono de 1994 por Rasmus Lerdorf.
As primeiras versões não foram disponibilizadas ao público, tendo sido utilizadas na sua
página pessoal, apenas para que ele pudesse ter informações sobre as visitas que iam
sendo feitas. A primeira versão utilizada por outras pessoas foi disponibilizada em
1995, e ficou conhecida como “Personal Home Page Tools” (ferramentas para páginas
pessoais). Era composta por um sistema bastante simples que interpretava algumas
macros e alguns utilitários de auxilio : um livro de visitas, um contador e outros
pequenos utilitários.
Em meados de 1995 o interpretador foi reescrito, e ganhou o nome de PHP/FI.
O FI veio de um outro programa escrito por Rasmus que interpretava dados de
formulários HTML (Form Interpreter). Ele combinou os scripts do Personal Home
Page Tools com o FI e adicionou o suporte de mSQL, aparecendo assim o PHP/FI, que
entretanto cresceu bastante, contando para isso com a ajuda de pessoas que passaram a
contribuir para o projecto.
Tutorial PHP - 8 -
Introdução ao PHP
Estima-se que em 1996, a linguagem PHP/FI era já utilizada por cerca de
15.000 sites em todo o mundo, e em meados de 1997 esse número subiu para mais de
50.000. Nessa época houve uma mudança no desenvolvimento do PHP. Deixou de ser
um projecto de Rasmus, contando com contribuições de outras pessoas para ter uma
equipa de desenvolvimento mais organizada. O interpretador foi posteriormente
reescrito por Zeev Suraski e Andi Gutmans, e esse novo interpretador foi a base para a
versão 3.
O lançamento da versão 4 do PHP, ocorrido em 22 de Maio 2000, trouxe muitas
novidades aos programadores de PHP. Uma das principais novidades foi o suporte de
sessões, bastante útil para identificar o cliente que solicitou determinada informação.
Além das alterações referentes ao sintaxe e novos recursos de programação, o PHP4
teve como novidade um optimizador chamado Zend, que permite a execução muito mais
rápida de scripts PHP. A empresa que produz o Zend promete ainda o lançamento de
um compilador de PHP. Códigos compilados serão executados mais rapidamente, além
de proteger o código fonte da aplicação.
Tutorial PHP - 9 -
Introdução ao PHP
OO qquuee éé oo PPHHPP ??
PHP é uma linguagem que permite criar sites dinâmicos, possibilitando uma
interacção com o utilizador através de formulários, parâmetros do browser e links. A
diferença do PHP em relação a linguagens como o JAVASCRIPT, é que o código PHP
é executado no servidor, sendo enviado para o cliente apenas código HTML puro. Desta
maneira é possível interagir com bases de dados e aplicações existentes no servidor,
com a vantagem de não se expor o código fonte para o utilizador. Isso pode ser útil
quando se está a trabalhar com passwords ou qualquer outro tipo de informações
confidenciais, e claro, para esconder o código, evitando cópias não autorizadas.
A principal diferença entre o PHP e um script CGI escrito em C ou PERL, é que
o código PHP fica embutido no próprio HTML, enquanto no caso do script CGI é
necessário gerar todo o código HTML, ou ler de um outro ficheiro.
PHP é portanto uma linguagem do tipo Server-Side Script, ou seja, o código do
script PHP é executado no servidor.
Este tipo de scripts são responsáveis pela criação de páginas em tempo real.
Num motor de busca, por exemplo, seria inviável manter um arquivo para cada consulta
a ser realizada. O que existe é um modelo da página de resultados, que é elaborada em
tempo real, com os dados respectivos.
Tutorial PHP - 10 -
Introdução ao PHP
OO qquuee ppooddee sseerr ffeeiittoo ccoomm PPHHPP??
Basicamente qualquer operação habitual em páginas da Internet, pode ser feita
com PHP, como receber dados de um formulário, gerar páginas dinamicamente ou
enviar e receber cookies.
Uma das características mais importantes do PHP é o facto de suportar um
grande número de bases de dados, como dBase, Interbase, mSQL, mySQL, Oracle,
Sybase, PostgreSQL e várias outras. Construir uma página que suporte uma base de
dados, torna-se uma tarefa extremamente simples com PHP.
Além disso, o PHP suporta outros serviços através de protocolos como por
exemplo IMAP, SNMP, NNTP, POP3 e, logicamente, HTTP.
É ainda possível abrir sockets e interagir com outros protocolos.
Tutorial PHP - 11 -
Introdução ao PHP
PPrriinncciippaaiiss vvaannttaaggeennss ddoo PPHHPP
• PHP pode correr em (quase) todas os ambientes. Usando o mesmo
código base, o PHP pode ser compilado em cerca de 25 plataformas diferentes,
incluindo quase todos os UNIX, WINDOWS (95/98/NT/2000) e MACINTOSH. Como
o código base é sempre o mesmo, os scripts irão ser sempre executados de forma
idêntica.
• PHP é parecido com o C. Por isso, qualquer programador com
experiência numa linguagem do estilo do C (JAVASCRIPT, JAVA, etc ), pode
facilmente perceber PHP. Este factor é sem duvida importante para o desenvolvimento
da linguagem.
• PHP é composto por módulos. Isto permite aos programadores duas
maneiras de expandir o PHP de forma a corresponder a alguma característica especial
pretendida: escrevendo um módulo e compilando-o dentro do executável; ou criando
um executável que pode ser chamado usando um mecanismo do PHP (PHP’s Dynamic
Loading Mechanism).
• Variedade de servidores de HTTP. O PHP é actualmente compatível com
Apache, IIS, AOLServer, Roxen e THTTPD. Pode ainda ser executado como um
módulo CGI.
Tutorial PHP - 12 -
Introdução ao PHP
• Compatibilidade com variadas bases de dados. O PHP é compatível com
mySQL, MS SQL, Oracle, Informix, PostgreSQL, e muitas outras bases de dados.
Também é já possível a integração com ODBC, e com bases de dados Access.
• Rapidez. O PHP é normalmente usado como um módulo do Apache, o
que o torna extremamente rápido. É totalmente escrito em C, e relativamente pequeno,
podendo portanto ser executado rapidamente e com pouca necessidade de memória.
• PHP é “Open Source”. Ou seja, o seu código é totalmente livre (grátis) e
disponível. Não se está dependente do fabricante para corrigir pequenos problemas que
possam surgir, ou ser obrigado a pagar por actualizações. Pode-se simplesmente ajustar
o código às necessidades especificas que possam surgir.
Tutorial PHP - 13 -
Sintaxe Básica
33 SSIINNTTAAXXEE BBÁÁSSIICCAA
DDeelliimmiittaarr oo ccóóddiiggoo PPHHPP
O código PHP fica embutido no próprio HTML. O interpretador identifica
quando um código é PHP pelas seguintes tags:
<?php
comandos
?>
<script language=”php”>
comandos
</script>
<?
comandos
?>
<%
comandos
%>
O tipo de tags mais utilizado é o terceiro, que consiste numa simplificação do
primeiro. Para o utilizar, é necessário activar a opção short-tags na configuração do
PHP. O último tipo serve para facilitar o uso por programadores acostumados à sintaxe
de ASP. Para o utilizar é também necessário activá-lo no PHP, através do ficheiro de
configuração php.ini.
Tutorial PHP - 14 -
Sintaxe Básica
SSeeppaarraaddoorr ddee iinnssttrruuççõõeess
Entre cada instrução em PHP é preciso utilizar o ponto e vírgula ( ; ), assim
como em C, PERL e outras linguagens do género. Na última instrução do bloco de
código não é necessário o uso do ponto e vírgula, mas por questões estéticas é normal a
sua utilização.
NNoommeess ddee vvaarriiáávveeiiss
Todas as variáveis em PHP têm o nome composto pelo caracter “$” e uma
string, que deve iniciar por uma letra ou o caracter “_”.
O PHP é case sensitive, ou seja, as variáveis $temp e $TEMP são diferentes. Por
isso é preciso ter muito cuidado ao definir os nomes das variáveis. É bom evitar os
nomes em maiúsculas, pois como se irá ver mais à frente, o PHP já possui alguma
variáveis predefinidas cujos nomes são formados por letras maiúsculas.
Tutorial PHP - 15 -
Sintaxe Básica
CCoommeennttáárriiooss
Existem dois tipos de comentários em código PHP:
Comentários de uma linha
Este tipo de comentário, marca como comentário até ao final da linha ou até ao
final do bloco de código PHP. Pode ser delimitado pelo caracter “#” ou por duas barras
( // ).
Exemplo:
<? echo “teste”; #isto é um teste ?>
<? echo “teste”; //este teste é igual ao anterior ?>
Comentários de mais de uma linha
O PHP tem como delimitadores os caracteres “/*” para o início do bloco e “*/”
para o fim do comentário. Se o delimitador de fim de código PHP ( “?>” ) estiver
dentro de um comentário, não será reconhecido pelo interpretador.
Exemplos:
<?
echo “teste”; /* Isto é um comentário com mais
de uma linha, mas não funciona correctamente ?>
*/
<?
echo “teste”; /* Isto é um comentário com mais
de uma linha que funciona correctamente
*/
?>
Tutorial PHP - 16 -
Sintaxe Básica
IImmpprriimmiirr ccóóddiiggoo HHTTMMLL
Um script PHP geralmente tem como resultado uma página HTML, ou algum
outro texto. Para gerar esse resultado, deve ser utilizada uma das funções de impressão,
echo ou print. Para isso deve-se utilizar um dos seguintes formatos:
print(argumento);
echo (argumento1, argumento2, ... );
echo argumento;
Tutorial PHP - 17 -
Tipos
44 TTIIPPOOSS
TTiippooss SSuuppoorrttaaddooss
O PHP suporta os seguintes tipos de dados:
• Inteiros (Integer ou Long)
• Virgula Flutuante (Float ou Double)
• String
• Array
• Object
O PHP utiliza verificação dinâmica de tipos, ou seja, uma variável pode conter
valores de diferentes tipos em diferentes momentos da execução do script. Por este
motivo não é necessário declarar o tipo de uma variável para a usar. O interpretador
PHP decidirá qual o tipo daquela variável, verificando o conteúdo em tempo real.
Ainda assim, é permitido converter os valores de um tipo para outro desejado,
utilizando o typecasting ou a função settype, conforme será explicado mais à frente.
Tutorial PHP - 18 -
Tipos
Inteiros (integer ou long)
Uma variável pode conter um valor inteiro com atribuições que sigam as
seguintes sintaxes:
$temp = 1234; # inteiro positivo na base decimal
$temp = -234; # inteiro negativo na base decimal
$temp = 0234; # inteiro na base octal - simbolizado
# pelo 0 - equivale a 156 decimal
$temp = 0x34; # inteiro na base hexadecimal
# - simbolizado pelo 0x – equivale a 52
# decimal.
A diferença entre inteiros integer e long está no número de bytes utilizados para
armazenar a variável. Como a escolha é feita pelo interpretador PHP de maneira
transparente para o utilizador, podemos afirmar que os tipos são iguais.
Virgula Flutuante (double ou float)
Uma variável pode ter um valor em virgula flutuante com atribuições que sigam
as seguintes sintaxes:
$temp = 1.234;
$temp = 23e4; # equivale a 230.000
Tutorial PHP - 19 -
Tipos
Strings
As Strings em PHP podem ser utilizadas de duas maneiras:
• utilizando aspas simples ( ' ) – Desta maneira, o valor da variável será
exactamente o texto contido entre as aspas (com excepção de “\\” e “\'” – ver
tabela seguinte)
• utilizando aspas duplas ( " ) – Desta maneira, qualquer variável ou
caracter especial será expandido antes de ser atribuído.
Exemplo:
<?
$teste = "Nome";
$temp = '---$teste--\n';
echo "$temp";
?>
O resultado deste exemplo será: ---$teste--\n
<?
$teste = "Nome";
$temp = "---$teste---\n";
echo "$temp";
?>
Neste exemplo o resultado será "---Nome--" (com uma quebra de linha no fim).
Tutorial PHP - 20 -
Tipos
A tabela seguinte apresenta os caracteres especiais:
Sintaxe Significado
\N Nova linha
\r Retorno de linha
\t Tabulação horizontal
\\ A própria barra ( “\” )
\$ O símbolo “$”
\’ Aspa simples
\” Aspa dupla
Arrays
Arrays em PHP podem ser identificados como vectores indexados.
Mais especificamente, um valor do tipo array é um dicionário onde os índices
são as chaves de acesso. De realçar que os índices podem ser valores de qualquer tipo e
não apenas inteiros. Inclusive, se os índices forem todos inteiros, estes não precisam
formar um intervalo contínuo.
Como a validação de tipos em PHP é dinâmica, valores de tipos diferentes
podem ser usados como índices de array, assim como os valores atribuídos podem
também ser de tipos diferentes.
Exemplo:
<?
$cor[1] = “vermelho”;
$cor[2] = “verde”;
$cor[3] = “azul”;
$cor[“teste”] = 1;
?>
Tutorial PHP - 21 -
Tipos
Ou como alternativa:
<?
$cor = array(1 => “vermelho, 2 => “verde, 3 => “azul”,
“teste => 1);
?>
Listas
As listas são utilizadas em PHP para realizar atribuições múltiplas.
Através de listas é possível atribuir valores que estão num array para variáveis.
Exemplo:
list($a, $b, $c) = array(“a”, “b”, “c”);
O comando anterior atribui valores às três variáveis simultaneamente. De notar
que só são atribuídos às variáveis da lista os elementos do array que possuem índices
inteiros e não negativos. No exemplo anterior as três atribuições foram bem sucedidas
porque ao inicializar um array sem especificar os índices eles passam a ser inteiros, a
partir do zero. Um factor importante, é que cada variável da lista possui um índice
inteiro, começando pelo zero, que serve para determinar qual o valor que será atribuído.
No exemplo anterior temos $a com índice 0, $b com índice 1 e $c com índice 2.
Outro exemplo:
$arr=array(1=>”um”,3=>”tres”,”a”=>”letraA”,2=>”dois);
list($a,$b,$c,$d) = $arr;
Tutorial PHP - 22 -
Tipos
Após a execução do código anterior temos os seguintes valores:
$a => null
$b => “um”
$c => “dois”
$d => “tres”
De observar que à variável $a não foi atribuído valor, pois no array não existe
elemento com índice 0 (zero). Outro pormenor importante é que o valor “tres” foi
atribuído à variável $d, e não a $b, pois o seu índice é 3, o mesmo que $d na lista.
Por fim, pode-se constatar que o valor “letraA” não foi atribuído a nenhum
elemento da lista, pois o seu índice não é inteiro.
Os índices da lista servem apenas como referência ao interpretador PHP para
realizar as atribuições, não podendo ser acedidos de nenhuma maneira pelo
programador. Ao contrário do array, uma lista não pode ser atribuída a uma variável,
servindo apenas para fazer múltiplas atribuições através de um array.
Objectos
Um objecto pode ser inicializado utilizando o comando new para instanciar uma
classe a uma variável.
Exemplo:
class teste {
function nada() {
echo “nada”;
}
}
$temp = new teste;
$temp -> nada();
A utilização de objectos será melhor explicada mais à frente.
Tutorial PHP - 23 -
Tipos
Booleanos
O PHP não possui um tipo de variável booleano, mas é capaz de avaliar
expressões e retornar true ou false, através do tipo integer. É usado o valor 0 (zero) para
representar o estado false, e qualquer valor diferente de zero (normalmente 1) para
representar o estado true.
TTrraannssffoorrmmaaççããoo ddee ttiippooss
A transformação de tipos em PHP pode ser feita das seguintes maneiras:
Atribuição
Quando ocorrem determinadas operações (“+”, por exemplo) entre duas
variáveis de tipos diferentes, o PHP converte o valor de uma delas automaticamente.
De notar que se o operando for uma variável, seu valor não será alterado.
O tipo para o qual os valores dos operandos serão convertidos é determinado da
seguinte forma: Se um dos operandos for float, o outro será convertido para float, senão,
se um deles for integer, o outro será convertido para integer.
Exemplo:
$temp = “1”; // $temp é a string “1”
$temp = $temp + 1; // $temp é o integer 2
$temp = $temp + 3.7; // $temp é o double 5.7
$temp = 1 + 1.5 // $temp é o double 2.5
Tutorial PHP - 24 -
Tipos
De notar que o PHP converte string para integer ou double, mantendo o valor. O
sistema utilizado pelo PHP para converter strings para números é o seguinte:
• É analisado o início da string. Se existir um número, ele será avaliado.
Senão, o valor será 0 (zero);
• O número pode conter um sinal no início (“+” ou “-“);
• Se na string existir um ponto na parte numérica a ser analisada, então
esse ponto será considerado, e o valor obtido será double;
• Se na string existir um “e” ou “E” na parte numérica a ser analisada, o
valor seguinte será considerado como expoente da base 10, e o valor obtido será
double;
Exemplos:
$temp = 1 + “10.5”; // $temp == 11.5
$temp = 1 + “-1.3e3”; // $temp == -1299
$temp = 1 + “teste10.5”; // $temp == 1
$temp = 1 + “10testes”; // $temp == 11
$temp = 1 + "10testes"; // $temp == 11
$temp = 1 + "+10testes"; // $temp == 1
Transformação explícita de tipos
A sintaxe do typecast do PHP é semelhante ao C. Basta escrever o tipo entre
parênteses antes do valor :
Exemplo:
$temp = 15; // $temp é integer (15)
$temp = (double) $temp // $temp é double (15.0)
$temp = 3.9 // $temp é double (3.9)
$temp = (int) $temp // $temp é integer (3)
// o valor decimal é truncado
Tutorial PHP - 25 -
Tipos
Os tipos do typecast permitidos são:
(int), (integer)⇒ altera para integer;
(real), (double), (float)⇒ altera para float;
(string)⇒ altera para string;
(array)⇒ altera para array;
(object)⇒ altera para objecto.
A função settype
A função settype converte uma variável para o tipo especificado, que pode ser
integer, double, string, array ou object.
Exemplo:
$temp = 15; // $temp é integer
settype($temp,double) // $temp é double
Tutorial PHP - 26 -
Operadores
55 OOPPEERRAADDOORREESS
AArriittmmééttiiccooss
Este tipo de operadores só podem ser utilizados quando os operandos são
números (integer ou float). Se forem de outro tipo, terão seus valores convertidos antes
da realização da operação.
+ adição
- subtracção
* multiplicação
/ divisão
% módulo
ddee SSttrriinnggss
Só há um operador exclusivo para strings:
. concatenação
Tutorial PHP - 27 -
Operadores
ddee AAttrriibbuuiiççããoo
Existe um operador básico de atribuição e diversos derivados que retornam
sempre o valor atribuído. No caso dos operadores derivados de atribuição, a operação é
feita entre os dois operandos, sendo atribuído o resultado para o primeiro. A atribuição é
sempre por valor, e não por referência.
= atribuição simples
+= atribuição com adição
-= atribuição com subtracção
*= atribuição com multiplicação
/= atribuição com divisão
%= atribuição com módulo
.= atribuição com concatenação
Exemplo:
$a = 7;
$a += 2; // $a passa a ter o valor 9
Tutorial PHP - 28 -
Operadores
BBiitt aa BBiitt
Este tipo de operadores comparam dois números bit a bit.
& “e” lógico
| “ou” lógico
^ ou exclusivo
~ não (negação)
<< shift left
>> shift right
LLóóggiiccooss
Os operadores lógicos são utilizados para inteiros que representem valores
booleanos.
and “e” lógico
or “ou” lógico
xor ou exclusivo
! não (inversão)
&& “e” lógico
|| “ou” lógico
Existem dois operadores para “e” e para “ou” porque têm diferentes posições na
ordem de precedência.
Tutorial PHP - 29 -
Operadores
CCoommppaarraaççããoo
As comparações são feitas entre os valores contidos nas variáveis e retornam
sempre um valor booleano.
== igual a
!= diferente de
< menor que
> maior que
<= menor ou igual a
>= maior ou igual a
EExxpprreessssããoo ccoonnddiicciioonnaall
Existe um operador de selecção que pode avaliar até três termos :
(expressao1)?(expressao2):( expressao3)
O interpretador PHP avalia a primeira expressão. Se ela for verdadeira, a
expressão retorna o valor de expressão2, caso seja verdadeira. Senão, retorna o valor de
expressão3.
Tutorial PHP - 30 -
Operadores
DDee iinnccrreemmeennttoo ee ddeeccrreemmeennttoo
++ incremento
-- decremento
Podem ser utilizados de duas formas: antes ou depois da variável. Quando
utilizado antes, retorna o valor da variável antes de incrementá-la ou decrementá-la.
Quando utilizado depois, retorna o valor da variável já incrementado ou decrementado.
Exemplos:
$a = $b = 10; // $a e $b recebem o valor 10
$c = $a++; // $c recebe 10 e $a passa a ter 11
// $d = ++$b;
// $d recebe 11, valor de $b já
incrementado
Tutorial PHP - 31 -
Estruturas de Controlo
66 EESSTTRRUUTTUURRAASS DDEE CCOONNTTRROOLLOO
As estruturas seguintes são comuns para a generalidade das linguagens de
programação, portanto, será apenas descrito a sintaxe de cada uma delas, resumindo o
seu funcionamento.
CCiiccllooss
Um ciclo consiste em vários comandos agrupados com o objectivo de relacioná-
los com determinado comando ou função. Em comandos como if, for, while e switch,
pode-se utilizar ciclos, para permitir que um comando faça parte do contexto desejado.
Os ciclos em PHP são delimitados pelos caracteres “{” e “}”. A utilização dos
delimitadores de ciclo numa parte qualquer do código não relacionada com os
comandos acima descritos ou funções não produzirá nenhum efeito, e será tratada
normalmente pelo interpretador.
Por exemplo:
if ($x == $y)
comando1;
comando2;
Para que comando2 esteja relacionado com o if é preciso utilizar um ciclo:
if ($x == $y){
comando1;
comando2;
}
Tutorial PHP - 32 -
Estruturas de Controlo
CCoommaannddooss ddee sseelleeccççããoo
Também chamados de condicionais, os comandos de selecção permitem
executar comandos ou conjuntos de comandos com base em testes feitos durante a
execução.
If
O mais trivial dos comandos condicionais é o if. Este comando testa uma
condição e executa o comando indicado se o resultado for true (valor diferente de zero).
Possui duas sintaxes:
if (expressão)
comando;
if (expressão):
comando;
. . .
comando;
endif;
Para incluir mais de um comando no if da primeira sintaxe, é preciso utilizar um
ciclo, delimitado pelos caracteres “{}”.
O else é um complemento opcional para o if. Se for utilizado, e se a expressão
retornar o valor false (zero), então o comando será executado.
Tem duas sintaxes que são as seguintes:
if (expressão)
comando;
else
comando;
Tutorial PHP - 33 -
Estruturas de Controlo
if (expressão):
comando;
. . .
comando;
else
comando;
. . .
comando;
endif;
A seguir, um exemplo do comando if utilizado com else:
if ($a > $b)
$maior = $a;
else
$maior = $b;
O exemplo anterior coloca em $maior o maior valor entre $a e $b
Em determinadas situações é necessário fazer mais que um teste, e executar
condicionalmente diversos comandos ou conjunto de comandos.
Para facilitar uma estrutura do tipo:
if (expressao1)
comando1;
else
if (expressao2)
comando2;
else
if (expressao3)
comando3;
else
comando4;
Tutorial PHP - 34 -
Estruturas de Controlo
foi criado o comando, também opcional, elseif. O elseif tem a mesma função de
um else e um if usados sequencialmente, como no exemplo anterior. Num mesmo if
podem ser utilizados diversos elseif’s.
O comando elseif também pode ser utilizado com dois tipos de sintaxe. Em
resumo, a sintaxe geral do comando if é a seguinte :
if (expressao1)
comando;
[ elseif (expressao2)
comando; ]
[ else
comando; ]
if (expressao1) :
comando;
. . .
comando;
[ elseif (expressao2)
comando;
. . .
comando; ]
[ else
comando;
. . .
comando; ]
endif;
Tutorial PHP - 35 -
Estruturas de Controlo
Switch
O comando switch actua de maneira semelhante a uma série de comandos if na
mesma expressão. Frequentemente o programador pode querer comparar uma variável
com diversos valores, e executar um código diferente que depende de qual valor é igual
ao da variável. Quando isso for necessário, deve-se usar o comando switch. O exemplo
seguinte mostra dois pedaços de código que fazem a mesma coisa, sendo que o primeiro
utiliza uma série de if’s e o segundo utiliza switch:
if ($i == 0)
print “i é igual a zero”;
elseif ($i == 1)
print “i é igual a um”;
elseif ($i == 2)
print “i é igual a dois”;
switch ($i) {
case 0:
print “i é igual a zero”;
break;
case 1:
print “i é igual a um”;
break;
case 2:
print “i é igual a dois”;
break;
}
Tutorial PHP - 36 -
Estruturas de Controlo
É importante compreender o funcionamento do switch para não cometer erros. O
comando switch testa linha a linha os valores encontrados, e a partir do momento que
encontra um valor igual ao da variável testada, passa a executar todos os comandos
seguintes, mesmo os que fazem parte de outro teste, até o fim do ciclo switch. Por isso
tem de ser usado o comando break, que termina a execução e faz com que o código seja
executado da maneira desejada.
Por exemplo :
switch ($i) {
case 0: print “i é igual a zero”;
case 1: print “i é igual a um”;
case 2: print “i é igual a dois”;
}
No exemplo anterior, se $i for igual a zero, os três comandos print serão
executados. Se $i for igual a 1, então os dois últimos print serão executados. O
comando só funcionará da maneira desejada se $i for igual a 2.
Em algumas linguagens que implementam o comando switch, ou semelhante, os
valores a serem testados só podem ser do tipo inteiro. Em PHP é permitido usar valores
do tipo string como elementos de teste do comando switch.
Como por exemplo:
switch ($s) {
case “casa”:
print “A casa é amarela”;
case “arvore”:
print “a árvore é bonita”;
case “lampada”:
print “joao apagou a lampada”;
}
Tutorial PHP - 37 -
Estruturas de Controlo
CCoommaannddooss ddee rreeppeettiiççããoo
While
O while é o comando de repetição mais simples. Testa uma condição e executa
um comando ou um conjunto de comandos, até que a condição testada seja falsa. Assim
como o if, o while também possui duas sintaxes alternativas:
while (<expressao>)
<comando>;
while (<expressao>):
<comando>;
. . .
<comando>;
endwhile;
A expressão só é testada de cada vez que o conjunto de instruções termina, além
do teste inicial. Se o valor da expressão passar a ser false no meio do conjunto de
instruções, a execução segue até ao fim do ciclo. Se no teste inicial a condição for
avaliada como false, o conjunto de comandos não será executado.
O exemplo a seguir mostra o uso do while para imprimir os números de 1 a 10:
$i = 1;
while ($i <=10)
print $i++;
Tutorial PHP - 38 -
Estruturas de Controlo
Do...While
O comando do...while funciona de maneira bastante semelhante ao while, com a
simples diferença que a expressão é testada no fim do ciclo.
O comando do...while possui apenas uma sintaxe, que é a seguinte:
do {
<comando>
. . .
<comando>
} while (<expressao>);
O exemplo utilizado para ilustrar o uso do while pode ser feito da seguinte
maneira utilizando o do...while:
$i = 0;
do {
print ++$i;
} while ($i < 10);
For
O comando for já é um pouco mais complexo. Para os programadores de C, C++
ou JAVA, o funcionamento do for é bastante básico. Mas para programadores
acostumados a programar em linguagens como o PASCAL, existe uma grande mudança
na utilização do for.
Tutorial PHP - 39 -
Estruturas de Controlo
As duas sintaxes permitidas são:
for (<inicializacao>;<condicao>;<incremento>)
<comando>;
for (<inicializacao>;<condicao>;<incremento>) :
<comando>;
. . .
<comando>;
endfor;
As três expressões que ficam entre parênteses têm as seguintes finalidades:
• Inicialização:
Comando ou sequência de comandos a serem realizados antes do inicio do ciclo.
Serve para inicializar variáveis.
• Condição:
Expressão booleana que define se os comandos que estão dentro do ciclo serão
executados ou não. Enquanto a expressão for verdadeira (valor diferente de zero)
os comandos serão executados.
• Incremento:
Comando executado ao final de cada execução do ciclo.
Um comando for funciona de maneira semelhante a um while escrito da seguinte
forma:
<inicializacao>
while (<condicao>) {
comandos
...
<incremento>
}
Tutorial PHP - 40 -
Estruturas de Controlo
Break
O comando break pode ser utilizado em ciclos do, for e while, além do já
referido no comando switch. Ao encontrar um break dentro de um destes ciclos, o
interpretador PHP para imediatamente a execução do ciclo, prosseguindo a execução
normal do código seguinte ao ciclo.
while ($x > 0) {
...
if ($x == 20) {
echo “erro! x = 20”;
break;
...
}
No código anterior, o ciclo while tem uma condição de fim ($x <= 0), mas foi
utilizado o break para uma situação de fim de ciclo, não prevista inicialmente. Assim o
interpretador seguirá para a instrução seguinte ao ciclo.
Continue
O comando continue também deve ser utilizado no interior de ciclos, e funciona
de maneira semelhante ao break, com a diferença que a execução ao contrário de sair do
ciclo, volta para o seu principio.
Por exemplo:
for ($i = 0; $i < 100; $i++) {
if ($i % 2) continue;
echo “ $i “;
}
Tutorial PHP - 41 -
Estruturas de Controlo
O que o ciclo faz, é testar se o resto da divisão entre o número e 2 é 0. Se for
diferente de zero (valor lógico true) o interpretador encontrará um continue, que faz
com que os comandos seguintes do interior do ciclo sejam ignorados, seguindo para a
próxima iteração do ciclo.
Tutorial PHP - 42 -
Funções
77 FFUUNNÇÇÕÕEESS
DDeeffiinniirr ffuunnççõõeess
A sintaxe básica para definir uma função é:
function nome_da_função([arg1, arg2, arg3]) {
Comandos;
... ;
[return <valor de retorno>];
}
Qualquer código PHP válido pode estar contido no interior de uma função.
Como a verificação de tipos em PHP é dinâmica, o tipo de retorno não precisa de ser
declarado, sendo necessário que o programador esteja atento para que a função retorne o
tipo desejado. No entanto é recomendável que o código esteja bem documentado para
facilitar a sua leitura e compreensão. Para efeito de documentação, é normal utilizar-se
o seguinte formato na declaração de funções:
tipo function nome_da_funcao(tipo arg1, tipo
arg2, ...);
Este formato só deve ser utilizado na documentação do script, pois o PHP não
aceita a declaração de tipos. Isso significa que em muitos casos o programador deve
estar atento ao tipos dos valores passados como parâmetros, pois se não se passar o tipo
esperado, não é emitido qualquer aviso pelo interpretador PHP, já que este não testa os
tipos.
Tutorial PHP - 43 -
Funções
RReettoorrnnoo ddee VVaalloorreess
Todas as funções podem opcionalmente retornar um valor, ou simplesmente
executar os comandos e não retornar valor nenhum.
Não é possível que uma função retorne mais de um valor, mas é permitido fazer
com que uma função retorne variáveis do tipo listas ou arrays.
AArrgguummeennttooss
É possível passar argumentos para uma função. Devem ser declarados logo após
o nome da função, entre parênteses, e tornam-se variáveis pertencentes ao
endereçamento local da função. A declaração do tipo de cada argumento também é
utilizada apenas para efeito de documentação.
Exemplo:
function imprime($texto){
echo $texto;
}
imprime(“teste de funções”);
Tutorial PHP - 44 -
Funções
Passagem de parâmetros por referência
Normalmente, a passagem de parâmetros em PHP é feita por valor, ou seja, se o
conteúdo da variável for alterado, essa alteração não afecta a variável original.
Por exemplo:
function mais5($numero) {
$numero += 5;
}
$a = 3;
mais5($a); //$a continua com o valor 3
No exemplo anterior, como a passagem de parâmetros é por valor, a função
mais5 é inútil, já que após a execução sair da função, o valor anterior da variável é
recuperado. Se a passagem de valor for feita por referência, a variável $a teria 8 como
valor. O que normalmente acontece é que ao ser chamada uma função, o interpretador
guarda todo o endereçamento actual, ou seja, os conteúdos das variáveis. Se uma dessas
variáveis for passada como parâmetro, o seu conteúdo fica preservado, pois a função irá
trabalhar na verdade com uma cópia da variável. Porém, se a passagem de parâmetros
for feita por referência, todas as alterações que a função realizar no valor passado como
parâmetro vão afectar a variável que o contém.
Há duas maneiras de fazer com que uma função tenha parâmetros passados por
referência: indicando isso na declaração da função, o que faz com que a passagem de
parâmetros sempre seja assim; ou na própria chamada da função. Nos dois casos utiliza-
se o modificador “&”.
Tutorial PHP - 45 -
Funções
A seguir um exemplo que ilustra os dois casos:
function mais5(&$num1, $num2) {
$num1 += 5;
$num2 += 5;
}
$a = $b = 1;
mais5($a, $b); /* Neste caso, só $num1 terá seu valor
alterado, pois a passagem por referência está definida
na declaração da função. */
mais5($a, &$b); /* Aqui as duas variáveis terão os
seus valores alterados. */
Argumentos com valores predefinidos (default)
Em PHP é possível ter valores default para argumentos de funções, ou seja,
valores que serão assumidos em caso de nada ser passado como argumento. Quando
algum parâmetro é declarado desta maneira, a passagem do mesmo na chamada da
função torna-se opcional.
function teste($temp = “teste”) {
echo $temp;
}
teste(); // imprime “teste”
teste(“outro teste”); // imprime “outro teste”
Tutorial PHP - 46 -
Funções
É bom lembrar que quando a função tem mais que um parâmetro, o que tem
valor default deve ser declarado em último lugar:
function teste($figura = circulo, $cor) {
echo “a figura é um “, $figura, “ de cor “ $cor;
}
teste(azul);
/* A função não vai funcionar da maneira
esperada, ocorrendo um erro no interpretador. A
declaração correcta é: */
function teste2($cor, $figura = circulo) {
echo “a figura é um “, $figura, “ de cor “ $cor;
}
teste2(azul);
/* Aqui a função funciona da maneira esperada,
ou seja, imprime o texto: “a figura é um círculo de
cor azul” */
Tutorial PHP - 47 -
Funções
CCoonntteexxttoo
O contexto é o conjunto de variáveis e seus respectivos valores num
determinado ponto do programa. Na chamada de uma função, ao iniciar a execução do
bloco que contém a implementação da mesma, é criado um novo contexto contendo as
variáveis declaradas dentro do bloco, ou seja, todas as variáveis utilizadas dentro
daquele bloco serão eliminadas no fim da execução da função.
EEnnddeerreeççaammeennttoo
O endereçamento de uma variável em PHP define a parte do programa onde ela
pode ser utilizada. Na maioria dos casos todas as variáveis têm endereçamento global.
Entretanto, em funções definidas pelo utilizador um endereçamento local é criado. Uma
variável de endereçamento global não pode ser utilizada no interior de uma função sem
que haja uma declaração.
Exemplo:
$temp = “Teste”;
function Teste() {
echo $temp;
}
Teste();
O código anterior não produz nenhum resultado, pois a variável $temp é de
endereçamento global, e não pode ser referida num endereçamento local, mesmo que
não haja outra com nome igual. Para que o script funcione da forma desejada, a variável
global a ser utilizada deve ser declarada como tal.
Tutorial PHP - 48 -
Funções
Exemplo:
$temp = “Teste”;
function Teste() {
global $temp;
echo $temp;
}
Teste();
Uma declaração global pode conter várias variáveis, separadas por vírgulas.
Uma outra maneira de aceder variáveis de endereçamento global dentro de uma função
é utilizando um array predefinido pelo PHP cujo nome é $GLOBALS. O índice para a
variável referida é o próprio nome da variável, sem o caracter $.
O exemplo anterior, assim como o exemplo seguinte, produzem o mesmo
resultado:
Exemplo:
$temp = "Teste";
function Teste() {
echo $GLOBALS["abc"]; // imprime $temp
echo $temp; // não imprime nada
}
Teste();
Tutorial PHP - 49 -
Variáveis e Constantes
88 VVAARRIIÁÁVVEEIISS EE CCOONNSSTTAANNTTEESS
DDeeccllaarraaççããoo ddee uummaa vvaarriiáávveell
Como os tipos em PHP são tratados de uma maneira dinâmica, as variáveis não
precisam ser declaradas. Uma variável é inicializada no momento em que é feita a
primeira atribuição. O tipo da variável será definido de acordo com o valor atribuído.
OO ccoommaannddoo ssttaattiicc
Uma variável estática é visível num endereçamento local, mas é inicializada
apenas uma vez e seu valor não é perdido quando a execução do código deixa esse
endereçamento.
Por exemplo:
function Teste() {
$a = 0;
echo $a;
$a++;
}
Tutorial PHP - 50 -
Variáveis e Constantes
O último comando da função é inútil, pois assim que for terminada a execução
da função a variável $a perde seu valor. Já no exemplo seguinte, a cada chamada da
função a variável $a terá seu valor imprimido e será incrementada:
function Teste() {
static $a = 0;
echo $a;
$a++;
}
O comando static é muito utilizado em funções recursivas, já que o valor de
algumas variáveis precisa ser mantido.
Funciona da seguinte forma: O valor das variáveis declaradas como estáticas é
mantido ao terminar a execução da função. Na próxima execução da função, ao
encontrar novamente a declaração com static, o valor da variável é recuperado.
Por outras palavras, uma variável declarada como static tem o mesmo “tempo de
vida” que uma variável global, contudo a sua validade é restrita ao endereçamento local
em que foi declarada e só é recuperada após essa declaração.
Exemplo:
function Teste() {
echo "$a";
static $a = 0;
$a++;
}
O exemplo anterior não produz qualquer resultado. Na primeira execução da
função, a impressão ocorre antes da atribuição de um valor à função, e portanto o
conteúdo de $a é nulo (string vazia). Nas execuções seguintes da função Teste() a
impressão ocorre antes da recuperação do valor de $a, e portanto nesse momento o seu
valor ainda é nulo. Para que a função retorne algum valor o comando static deveria ser
utilizado.
Tutorial PHP - 51 -
Variáveis e Constantes
““VVaarriiáávveeiiss VVaarriiáávveeiiss””
O PHP tem um método conhecido como “variáveis variáveis”, que consiste em
variáveis cujos próprios nomes são também variáveis. A utilização deste método é feita
através do duplo cifrão (“$$”).
Por exemplo:
$a = “teste”;
$$a = “teste2”;
O exemplo anterior é equivalente ao seguinte:
$a = “teste”;
$teste = “teste2”;
VVaarriiáávveeiiss eennvviiaaddaass ppeelloo uuttiilliizzaaddoorr
Para interagir com o utilizador, é necessário que o PHP possa enviar e receber
informações para o programa utilizado pelo utilizador, para ler ficheiros PHP (
normalmente um browser ). O método para enviar informações, é normalmente através
de um comando de impressão, como o echo. Para receber informações vindas do
utilizador através de um link ou de um formulário HTML, o PHP utiliza as informações
enviadas através do url.
Tutorial PHP - 52 -
Variáveis e Constantes
Por exemplo:
Se o script PHP está localizado em http://localhost/teste.php3 e é executado da
seguinte forma : http://localhost/teste.php3?temp=teste , automaticamente o PHP cria
uma variável com o nome $temp contendo a string “teste”. De notar que o conteúdo da
variável está no formato URLencode. Os formulários HTML já enviam informações
automaticamente nesse formato, e o PHP descodifica-o sem necessitar de tratamento
pelo programador.
URLencode
O formato URLencode é obtido substituindo os espaços pelo caracter “+” e
todos os outros caracteres não alfanuméricos (com excepção do “_”) pelo caracter “%”
seguido do código ASCII em hexadecimal.
Por exemplo:
O texto:
Teste 1 2 3 !!
em urlencode fica:
Teste+1+2+3+%21%21
O PHP possui duas funções para facilitar o uso de urlencode.
A sintaxe é a seguinte:
string urlencode(string texto);
string urldecode(string texto);
Estas funções servem respectivamente para codificar ou descodificar um texto
passado como argumento.
Tutorial PHP - 53 -
Variáveis e Constantes
Utilizar arrays
Cada elemento de um formulário HTML submetido a um script PHP vai criar
uma variável cujo nome é o mesmo nome do elemento.
Por exemplo:
Um campo definido como:
<input type=”text” name=”endereco”>
ao ser submetido a um script PHP, vai fazer com que seja criada uma variável
com o nome $endereco. O mesmo acontece com a utilização de cookies, como veremos
mais à frente.
Uma boa técnica de programação é utilizar a notação de arrays para nomes de
cookies ou itens de um formulário HTML.
Para um conjunto de, por exemplo, checkboxs, podemos utilizar a seguinte
notação:
<input type="checkbox" name="teste[]"
value="valor1">opcao1
<input type="checkbox" name="teste[]"
value="valor2">opcao2
<input type="checkbox" name="teste[]"
value="valor3">opcao3
<input type="checkbox" name="teste[]"
value="valor4">opcao4
<input type="checkbox" name="teste[]"
value="valor5">opcao5
Tutorial PHP - 54 -
Variáveis e Constantes
Ao submeter o formulário, o script que recebe os valores terá uma variável
chamada $teste que contem os valores guardados num array, com índices a partir de
zero.
Por exemplo :
$teste == array(“valor2”, “valor3”, valor5”);
$teste[0] == “valor2;
$teste[1] == “valor3;
$teste[2] == “valor5;
O mesmo método pode ser utilizado com outros elementos de formulários e até
com cookies.
VVaarriiáávveeiiss ddee aammbbiieennttee
O PHP possui diversas variáveis de ambiente, como por exemplo a variável
$PHP_SELF, que contém o nome e a localização do próprio ficheiro.
Outras variáveis podem conter informações sobre o browser do utilizador, o
servidor HTTP, a versão do PHP e outras diversas informações. Para saber todas as
constantes e variáveis de ambiente definidas, e os respectivos conteúdos, deve-se
utilizar a função phpinfo().
Tutorial PHP - 55 -
Variáveis e Constantes
VVeerriiffiiccaannddoo oo ttiippoo ddee uummaa vvaarriiáávveell
Por causa da verificação dinâmica de tipos utilizada pelo PHP, nem sempre é
possível saber qual o tipo de uma variável num determinado instante. O PHP contém
algumas funções para facilitar essa tarefa :
string gettype(mixed var);
Esta função retorna o tipo da variável. A palavra mixed indica que a variável var
pode ser de diversos tipos.
Esta função pode retornar os seguintes valores:
• Integer
• Double
• String
• Array
• Object
• Unknown type
As funções seguintes testam o tipo da variável, e retornam true se a variável for
do tipo respectivo, ou false em caso contrário.
int is_int(mixed var);
int is_integer(mixed var);
int is_real(mixed var);
int is_long(mixed var);
int is_float(mixed var);
int is_string(mixed var);
int is_array(mixed var);
int is_object(mixed var);
Tutorial PHP - 56 -
Variáveis e Constantes
DDeessttrruuiirr uummaa vvaarriiáávveell
Se o utilizador decidir que uma determinada variável não vai ser mais utilizada,
é possível destrui-la através da função unset, que tem o seguinte sintaxe:
int unset(mixed var);
Destruir uma variável, significa libertar a memória ocupada por ela, o que faz
também que a variável deixe de ter significado para o script. Se posteriormente for feita
uma chamada á variável, será criada uma nova variável com o mesmo nome e de
conteúdo vazio.
VVeerriiffiiccaarr oo vvaalloorr ddee uummaa vvaarriiáávveell
Existem dois tipos de teste que podem ser feitos para verificar se uma variável
está declarada:
A função isset
Que tem a seguinte sintaxe:
int isset(mixed var);
Retorna true se a variável estiver declarada (mesmo que com uma string vazia
ou valor zero), e false em caso contrário.
Tutorial PHP - 57 -
Variáveis e Constantes
A função empty
Que possui a seguinte sintaxe:
int empty(mixed var);
Que retorna true se a variável não estiver declarada, ou possuir valor zero ou
uma string vazia. Caso contrário, retorna false.
Tutorial PHP - 58 -
Variáveis e Constantes
CCoonnssttaanntteess pprreeddeeffiinniiddaass
O PHP possui algumas constantes predefinidas, indicando a versão do PHP, o
sistema operativo do servidor, o ficheiro em execução, e diversas outras informações.
Para ter acesso a todas as constantes predefinidas, pode-se utilizar a função phpinfo(),
que apresenta uma tabela contendo todas as constantes predefinidas, assim como
configurações da máquina, sistema operacional, servidor HTTP e versão do PHP
instalada.
DDeeffiinniirr ccoonnssttaanntteess
Para definir constantes utiliza-se a função define. Uma vez definido, o valor de
uma constante não poderá mais ser alterado. Uma constante só pode conter valores
escalares, ou seja, não pode conter nem um array nem um objecto.
A sintaxe é a seguinte:
int define(string nome_da_constante, mixed valor);
A função retorna true se for bem sucedida.
Por exemplo:
define ("pi", 3.1415926536);
$circunf = 2*pi*$raio;
Tutorial PHP - 59 -
Classes e Objectos
99 CCLLAASSSSEESS EE OOBBJJEECCTTOOSS
CCllaasssseess
Uma classe é um conjunto de variáveis e funções relacionadas a essas variáveis.
Uma vantagem da utilização de programação orientada a objectos é poder usufruir do
encapsulamento de informação. Com o encapsulamento o utilizador de uma classe não
precisa saber como ela é implementada, bastando para a utilização conhecer a sua
interface, ou seja, as funções disponíveis. Uma classe é um tipo, e portanto não pode ser
atribuída a uma variável.
Para definir uma classe, deve-se utilizar a seguinte sintaxe:
class Nome_da_classe {
var $variavel1;
var $variavel2;
function funcao1 ($parametro) {
/* === função === */
}
}
Tutorial PHP - 60 -
Classes e Objectos
OObbjjeeccttoo
Classes são tipos, e não podem ser atribuídas a variáveis. Variáveis do tipo de
uma classe são chamadas de objectos, e devem ser criadas utilizando o operador new,
como no exemplo seguinte:
$variavel = new $nome_da_classe;
Para utilizar as funções definidas na classe, deve ser utilizado o operador “->”,
como no exemplo:
$variavel->funcao1(...
AA vvaarriiáávveell $$tthhiiss
Na definição de uma classe, pode-se utilizar a variável $this, que é o próprio
objecto. Assim, quando uma classe é instanciada num objecto, e uma função desse
objecto na definição da classe utiliza a variável $this, essa variável significa o próprio
objecto que estamos a utilizar.
Tutorial PHP - 61 -
Classes e Objectos
Como exemplo da utilização de classes e objectos, podemos utilizar a classe
conta, que define uma conta bancária bastante simples, com funções para ver saldo e
fazer um crédito.
class conta {
var $saldo;
function saldo() {
return $this->saldo;
}
function credito($valor) {
$this->saldo += $valor;
}
}
$minhaconta = new conta;
$minhaconta->saldo(); // a variável interna não foi
// inicializada, e não contém
// nenhum valor
$minhaconta->credito(50);
$minhaconta->saldo(); // retorna 50
Tutorial PHP - 62 -
Classes e Objectos
SSuubbCCllaasssseess
Uma classe pode ser uma extensão de outra. Isso significa que a nova classe vai
herdar todas as variáveis e funções da classe inicial, e ainda pode ter mais variáveis ou
funções que podem ser adicionadas pelo programador. Em PHP não é permitido utilizar
herança múltipla, ou seja, uma classe pode ser extensão de apenas uma outra classe.
Para criar uma classe derivada de outra, deve ser utilizada a palavra reservada extends,
como pode ser visto no exemplo seguinte:
class novaconta extends conta {
var $num;
function numero() {
return $this->num;
}
}
A classe anterior é derivada da classe conta, tendo as mesmas funções e
variáveis, com a adição da variável $numero e a função numero().
Tutorial PHP - 63 -
Classes e Objectos
CCoonnssttrruuttoorreess
Um construtor é uma função definida na classe que é automaticamente invocada
no momento em que a classe é instanciada (através do operador new). O construtor deve
ter o mesmo nome que a classe a que pertence.
Por exemplo:
class conta {
var $saldo;
function conta () {
$this.saldo = 0;
}
function saldo() {
return $this->saldo;
}
function credito($valor) {
$this->saldo += $valor;
}
}
De notar que a classe conta possui agora um construtor, que cria a variável
$saldo com o valor 0.
Um construtor pode conter argumentos, que são opcionais.
No exemplo anterior, o construtor da classe conta pode receber como argumento
um valor, que seria o valor inicial da conta.
Para classes derivadas, o construtor da classe inicial não é automaticamente
herdado quando o construtor da classe derivada é invocado.
Tutorial PHP - 64 -
Noções de SQL
1100 NNOOÇÇÕÕEESS DDEE SSQQLL
IInnttrroodduuççããoo
Quando as bases de dados relacionais foram desenvolvidas, foram criadas
linguagens destinadas à sua manipulação. O departamento de pesquisas da IBM,
desenvolveu a linguagem SQL como forma de obter um interface para o sistema de base
de dados relacional denominado SYSTEM R (início dos anos 70). Em 1986 o American
National Standard Institute (ANSI ), publicou um standard SQL.
A linguagem SQL estabeleceu-se como linguagem standard em bases de dados
relacionais.
A linguagem SQL apresenta uma série de comandos que permitem a definição
dos dados, chamada de DDL (Data Definition Language), composta, entre outros, pelos
comandos Create, que é destinado à criação da base de dados, das tabelas respectivas, e
também das relações existentes entre as tabelas. Como exemplo de comandos da classe
DDL temos os comandos Create, Alter e Drop.
Os comandos da série DML (Data Manipulation Language) são destinados a
consultas, inserções, remoções e alterações em um ou mais registros de uma ou mais
tabelas de forma simultânea. Como exemplo de comandos da classe DML temos os
comandos Select, Insert, Update e Delete.
Tutorial PHP - 65 -
Noções de SQL
Uma subclasse de comandos DML, a DCL (Data Control Language), dispõe de
comandos de controle como Grant e Revoke.
A linguagem SQL tem como grande vantagem a capacidade de gerir índices,
sem a necessidade de controle individualizado do índice actual, algo muito comum nas
linguagens de manipulação de dados do tipo registro a registro. Outra característica
muito importante disponível em SQL, é a capacidade de construção de consultas, que
consiste num método de visualizar os dados em forma de listagens independentes das
tabelas e da organização lógica dos dados.
Outra característica interessante da linguagem SQL é a capacidade de cancelar
uma série de actualizações ou de as gravar, depois de iniciar uma sequência de
actualizações. Para isso utiliza-se os comandos Commit e Rollback.
De notar que a linguagem SQL consegue implementar estas soluções, pelo facto
de estar baseada em bases de dados que garantem, por si mesmo, a integridade das
relações existentes entre as tabelas e os seus índices.
Tutorial PHP - 66 -
Noções de SQL
CCoommaannddooss BBáássiiccooss ddee SSQQLL
Comando Create
Este comando permite criar tabelas na base de dados ou mesmo a sua criação.
Sintaxe:
CREATE DATABASE < nome_db >;
onde:
nome_db - indica o nome da base de dados a ser criada.
Sintaxe:
CREATE TABLE < nome_tabela > (
nome_campo1 < tipo > [ NOT NULL ],
nome_campo2 < tipo > [ NOT NULL ],
......
nome_campoN < tipo > [ NOT NULL ]
) ;
onde:
nome_tabela - indica o nome da tabela a ser criada.
nome_campo - indica o nome do campo a ser criado na tabela.
tipo - indica o tipo de variável ( integer(n), char(n), ... ).
Tutorial PHP - 67 -
Noções de SQL
Comando Drop
Este comando elimina a definição da tabela, incluindo os dados e referências
correspondentes.
Sintaxe:
DROP TABLE < nome_tabela > ;
Comando Alter
Este comando permite inserir ou eliminar campos nas tabelas já existentes.
Sintaxe:
ALTER TABLE < nome_tabela > ADD / DROP (
nome_campo1 < tipo > [ NOT NULL ],
nome_campoN < tipo > [ NOT NULL ]
) ;
Tutorial PHP - 68 -
Noções de SQL
MMaanniippuullaarr ddaaddooss ddaass ttaabbeellaass
Comando SELECT
Permite obter informações existentes nas tabelas.
Sintaxe básica:
SELECT [DISTINCT] expressao [AS nome-campo]
[FROM from-list]
[WHERE condicao]
[ORDER BY attr_name1 [ASC | DESC ]]
onde:
DISTINCT – Serve para eliminar linhas duplicadas na saída;
expressao - Define os dados que queremos obter, normalmente uma ou mais
colunas de uma tabela;
AS nome-campo - o nome do campo pretendido;
FROM from-list - lista das tabelas de entrada;
WHERE condicao - Critérios da selecção;
ORDER BY attr_name1 - Critério de ordenação dos resultados:
ASC ordem ascendente, DESC ordem descendente.
Exemplo:
SELECT nome, idade FROM pessoas WHERE idade > 17;
Tutorial PHP - 69 -
Noções de SQL
Comando INSERT
Adiciona um ou vários registros a uma tabela.
Sintaxe básica:
INSERT INTO destino [(campo1[, campo2[, ...]])]
VALUES (valor1[, valor2[, ...])
onde :
destino - Nome da tabela onde os registros devem ser inseridos;
campo1, campo2 - Nomes dos campos onde os dados vão ser inseridos;
valor1, valor2 - Os valores para inserir nos campos respectivos, no novo
registro. Cada valor é inserido no campo que corresponde à posição do valor na
lista: valor1 é inserido no campo1 do novo registro, valor2 no campo2 e assim
sucessivamente.
Os valores devem ser separados com uma vírgula e os campos de texto
colocados entre aspas (" ").
Comando UPDATE
Este comando serve para actualizar os valores dos campos numa determinada
tabela da base de dados.
Sintaxe:
UPDATE tabela
SET campo1 = novovalor, ...
WHERE criterio;
Tutorial PHP - 70 -
Noções de SQL
Onde:
tabela - Nome da tabela que contém os dados a alterar;
campo1 – Campo que vai ser alterado;
novovalor - Expressão que determina o novo valor a inserir;
criterio - Expressão que determina quais os registros a ser alterados.
O comando UPDATE é especialmente útil quando é necessário alterar
muitos registros ou quando os registros a alterar estão em várias tabelas. Pode-se alterar
vários campos ao mesmo tempo.
Comando DELETE
Elimina registros de uma ou mais tabelas.
Sintaxe:
DELETE [tabela.*]
FROM tabela
WHERE criterio
onde:
tabela.* - O nome opcional da tabela da qual os registros são eliminados.
tabela - O nome da tabela da qual os registros são eliminados.
criterio - Expressão que determina qual ou quais os registros a eliminar.
Tutorial PHP - 71 -
Noções de SQL
O comando DELETE é especialmente útil quando se quer excluir muitos
registros. Para eliminar uma tabela inteira da base de dados, pode-se usar o método
execute, com uma operação DROP.
No entanto, se a tabela for eliminada, a estrutura é perdida. Ao usar o DELETE,
apenas os dados são removidos. A estrutura da tabela e todas as suas propriedades,
como campos e índices, permanecem intactos.
O DELETE elimina registros inteiros e não apenas dados em campos
específicos. Para eliminar valores de um campo específico, deve-se utilizar o UPDATE,
e alterar os valores para null.
Tutorial PHP - 72 -
Aceder ao mySQL via PHP
1111 AACCEEDDEERR AAOO MMYYSSQQLL VVIIAA PPHHPP
EEssttaabbeelleecceerr ccoonneexxõõeess
Para aceder a bases de dados num servidor mySQL, é necessário primeiro
estabelecer uma conexão. Para isso, deve ser utilizado o comando mysql_connect, ou o
mysql_pconnect. A diferença entre os dois comandos é que o mysql_pconnect estabelece
uma conexão permanente, ou seja, que não é terminada no fim da execução do script.
As sintaxes dos dois comandos são semelhantes:
int mysql_connect(string [host[:port]] , string
[login] , string [password] );
int mysql_pconnect(string [host[:port]] , string
[login] , string [password] );
Ambos os comandos retornam um valor inteiro que identifica a conexão, ou
false se a conexão falhar. Antes de tentar estabelecer uma conexão, o interpretador PHP
verifica se já existe uma conexão estabelecida com o mesmo host, o mesmo login e a
mesma password. Se existir, o identificador desta conexão é devolvido. Senão, uma
nova conexão é criada.
Tutorial PHP - 73 -
Aceder ao mySQL via PHP
Uma conexão estabelecida com o comando mysql_connect é terminada no fim
da execução do script. Para terminar a conexão antes do fim do script, deve ser utilizado
o comando mysql_close, que tem a seguinte sintaxe:
int mysql_close(int [identificador da conexão] );
Se o identificador não for fornecido, será terminada a última conexão
estabelecida.
De notar que o comando mysql_close não termina conexões estabelecidas com o
comando mysql_pconnect.
SSeelleecccciioonnaarr aa bbaassee ddee ddaaddooss
Depois de estabelecida a conexão, é preciso seleccionar a base de dados que vai
ser utilizada. Para isso utiliza-se o comando mysql_select_db.
Tem o seguinte sintaxe:
int mysql_select_db(string base, int [conexao] );
Novamente, se o identificador da conexão não for fornecido, a última conexão
estabelecida será a utilizada.
Tutorial PHP - 74 -
Aceder ao mySQL via PHP
RReeaalliizzaarr ccoonnssuullttaass
Para executar consultas SQL no mySQL, utiliza-se o comando mysql_query, que
tem o seguinte sintaxe:
int mysql_query(string query, int [conexao] );
Onde query é a expressão SQL a ser executada, e conexão é o identificador de
conexão a ser utilizado. A consulta será executada na base de dados seleccionada pelo
comando mysql_select_db.
É bom lembrar que uma consulta não significa apenas um comando SELECT. A
consulta pode conter qualquer comando SQL.
O comando retorna valor false se a expressão SQL for incorrecta, e diferente de
zero se for correcta. No caso de uma expressão SELECT, os resultados são armazenados
numa “memória de resultados”, e o valor de retorno é o identificador desse resultado.
Alguns comandos podem ser realizados com esse identificador:
Apagar o resultado
int mysql_free_result(int result);
O comando mysql_free-result deve ser utilizado para apagar da memória o
resultado respectivo.
Tutorial PHP - 75 -
Aceder ao mySQL via PHP
Retornar o número de linhas
int mysql_num_rows(int result);
O comando mysql_num_rows retorna o número de linhas existentes no
resultado.
Utilizar os resultados
Existem diversas formas de ler os resultados de um SELECT.
As mais comuns são as seguintes:
int mysql_result(int result, int linha, mixed [campo]
);
Retorna o conteúdo de uma célula da tabela de resultados, onde:
result - é o identificador do resultado;
linha - é o número da linha;
campo - é uma string com o nome do campo, ou um número correspondente ao
número da coluna.
Este comando deve ser utilizado apenas para resultados de pequena dimensão.
Quando o volume de dados for maior, é recomendado utilizar um dos seguintes
métodos:
array mysql_fetch_array(int result);
Lê uma linha do resultado e devolve um array, cujos índices são os nomes dos
campos. Se for executado de seguida o mesmo comando, será feita a leitura da próxima
linha, e assim sucessivamente até chegar ao fim da tabela de resultados.
Tutorial PHP - 76 -
Aceder ao mySQL via PHP
array mysql_fetch_row(int result);
Semelhante ao comando anterior, com a diferença que os índices do array são
numéricos, iniciando por 0 (zero).
Alterar o ponteiro de um resultado
int mysql_data_seek(int result, int numero);
Cada resultado possui um ponteiro, que indica qual será a próxima linha lida
com o comando mysql_fetch_row ou mysql_fetch_array. Para alterar a posição indicada
por esse ponteiro deve-se utilizar a função mysql_data_seek, sendo que o número da
primeira linha de um resultado é 0 (zero).
Tutorial PHP - 77 -
Utilizar Cookies
1122 UUTTIILLIIZZAARR CCOOOOKKIIEESS
OO qquuee ssããoo CCooookkiieess??
Cookies são variáveis gravadas no browser por um determinado site. Apenas o
site que gravou o cookie pode ler a informação nele contida. Este recurso é muito útil
para que determinadas informações sejam fornecidas ao utilizador apenas uma vez.
Como exemplos de utilização de cookies, pode-se referir sites que informam a
quantidade de vezes que já foi visitado pelo próprio utilizador, ou alguma informação
importante que é fornecida apenas na primeira visita.
Existem cookies persistentes e cookies de sessão. Os persistentes são gravados
em ficheiros, e permanecem após o browser ser fechado, possuindo data e hora de
expiração. Os cookies de sessão não são armazenados em disco e permanecem activos
apenas enquanto a sessão do browser não for encerrada.
Por definição, existem algumas limitações para o uso de cookies, como por
exemplo:
• 300 cookies no total
• 4 kilobytes por cookie.
• 20 cookies por servidor ou domínio.
Tutorial PHP - 78 -
Utilizar Cookies
GGrraavvaarr CCooookkiieess
Para gravar cookies no cliente, deve ser utilizada a função setcookie, que possui
a seguinte sintaxe:
int setcookie(string nome, string valor, int exp,
string path, string dominio, int secure);
onde:
nome - nome do cookie;
valor - valor armazenado no cookie;
exp - data de expiração do cookie. Se não for definida, o cookie será de sessão;
path - localização do script que gravou o cookie;
dominio - domínio responsável pelo cookie;
secure - se tiver valor 1, indica que o cookie só pode ser transmitido por uma
conexão segura (HTTPS).
Observações:
Um cookie não pode ser recuperado na mesma página que o gravou, a menos
que esta seja recarregada pelo browser.
Múltiplas chamadas à função setcookie serão executadas em ordem inversa.
Cookies só podem ser gravados antes do envio de qualquer informação para o
cliente. Portanto todas as chamadas à função setcookie devem ser feitas antes do envio
de qualquer cabeçalho ou texto.
Tutorial PHP - 79 -
Utilizar Cookies
LLeerr CCooookkiieess
Os cookies lidos por um script PHP ficam armazenados em duas variáveis: no
array $HTTP_COOKIE_VARS[], tendo como índice a string do nome do cookie, e
numa variável cujo nome é o mesmo do cookie, precedido pelo símbolo $.
Por exemplo:
Um cookie gravado numa página anterior pelo seguinte comando:
setcookie(“teste”, “meu cookie”);
pode ser lido pela variável:
$HTTP_COOKIE_VARS[“teste”]
ou pela variável:
$teste
Tutorial PHP - 80 -
Ficheiros
1133 FFIICCHHEEIIRROOSS
Através do PHP é possível ter acesso aos ficheiros do sistema, e até a ficheiros
remotos. A seguir, alguns comandos utilizados para trabalhar com ficheiros em PHP.
CCooppiiaarr FFiicchheeiirrooss
Para copiar um ficheiro utilizando PHP, basta utilizar a função copy. É
obviamente necessário que o utilizador tenha as permissões necessárias para isso.
A sintaxe da função copy é a seguinte:
int copy(string origem string destino);
De notar que as strings relativas à origem e ao destino devem incluir as
localizações completas (por exemplo: “c:\teste\imagem.jpg”). Este comando retorna
false caso a cópia não tenha sucesso.
Tutorial PHP - 81 -
Ficheiros
VVeerriiffiiccaarr oo ttaammaannhhoo ddee uumm ffiicchheeiirroo
A função filesize pode ser bastante útil na criação de um script que, por
exemplo, imprima o conteúdo de um directório, mas também é utilizada noutras
situações, como por exemplo no uso da função fread, que será tratada mais à frente.
int filesize(string ficheiro);
Esta função retorna um inteiro com o tamanho do ficheiro (em bytes), ou false
em caso de erro.
VVeerriiffiiccaarr ssee uumm ffiicchheeiirroo eexxiissttee
Para evitar erros em tratamento de ficheiros, é sempre aconselhável verificar se
o ficheiro ou os ficheiros a tratar realmente existem. Para isso deve ser utilizada a
função file_exists.
Sintaxe:
int file_exists(string ficheiro);
Esta função retorna apenas true ou false, não fornecendo informações adicionais
sobre o ficheiro.
Tutorial PHP - 82 -
Ficheiros
LLiimmppaarr oo ccaacchhee
Por terem execução lenta, algumas funções que verificam o estado de ficheiros
utilizam um cache, ou seja, chamadas sucessivas da mesma função com relação ao
mesmo ficheiro não verificam se houve mudança no mesmo, retornando sempre o
mesmo valor. Para eliminar esse cache, de forma a obrigar o PHP a reavaliar o real
valor de uma função, deve-se utilizar a seguinte função:
void clearstatcache();
A palavra void indica que a função não retorna nenhum valor.
De notar que as funções filesize e file_exists utilizam cache.
AAbbrriirr ffiicchheeiirrooss ppaarraa lleeiittuurraa ee//oouu eessccrriittaa
Para ler ou escrever num ficheiro é preciso, em primeiro lugar, fazer a sua
abertura. Para isso deve ser utilizada a função fopen, que tem o seguinte sintaxe:
int fopen(string ficheiro, string modo, int
[use_include_path]);
A função fopen retorna false em caso de erro, e um identificador do ficheiro em
caso de sucesso. Esse identificador será utilizado por outras funções utilizadas para
trabalhar com ficheiros.
Tutorial PHP - 83 -
Ficheiros
O primeiro argumento é uma string contendo o nome do ficheiro; o segundo, o
modo como o ficheiro será aberto, que pode ser um dos seguintes:
r Abre o ficheiro com permissão apenas para leitura.
r+ Abre o ficheiro com permissão para escrita e leitura, posicionando o
ponteiro no início do mesmo.
w Abre o ficheiro com permissão apenas para escrita. Se o ficheiro existir,
todo o conteúdo é apagado. Se não existir, o PHP tenta criá-lo. O ponteiro
é posicionado no início do ficheiro
w+ Abre o ficheiro com permissão para escrita e leitura. Se o ficheiro existir,
todo o conteúdo é apagado. Se não existir, o PHP tenta criá-lo. O ponteiro
é posicionado no início do ficheiro
a Abre o ficheiro com permissão apenas para escrita. Se o ficheiro não
existir, o PHP tenta criá-lo. O ponteiro é posicionado no final do ficheiro
a+ Abre o ficheiro com permissão para escrita e leitura. Se o ficheiro não
existir, o PHP tenta criá-lo. O ponteiro é posicionado no final do ficheiro.
O ponteiro refere-se à posição a partir da qual os dados serão lidos e/ou
gravados. Para alterar a posição desse ponteiro, pode-se utilizar a função fseek.
Sintaxe:
int fseek(int fp, int posição);
Onde fp é o identificador de ficheiro, obtido através da utilização da função
fopen.
O terceiro parâmetro da função fopen, que pode ter valor “0” ou “1”, indica se o
include_path deverá ser utilizado para localizar o ficheiro. O include_path é um
parâmetro especificado no ficheiro php.ini que indica exactamente em que directórios
determinados ficheiros devem ser procurados.
Tutorial PHP - 84 -
Ficheiros
Além de trabalhar ficheiros localmente, utilizando o sistema de ficheiros, a
função fopen também permite trabalhar com ficheiros remotos, utilizando os protocolos
HTTP ou FTP, da seguinte forma:
Se a string, como por exemplo o nome do ficheiro, iniciar por “http://”
(maiúsculas ou minúsculas), uma conexão é aberta com o servidor e o ficheiro
respectivo será aberto, utilizando o protocolo HTTP.
De notar que qualquer alteração feita no ficheiro afectará apenas o ficheiro
temporário local, sendo o original sempre preservado.
Se a string iniciar por “ftp://”, uma conexão é aberta com o servidor e o ficheiro
será aberto, desta vez utilizando o protocolo FTP. Utilizando FTP o ficheiro pode ser
aberto para leitura ou escrita, mas não simultaneamente.
Para terminar a utilização de um ficheiro deve-se utilizar a função fclose, que
tem a seguinte sintaxe:
int fclose(int fp);
Onde fp é o identificador do ficheiro, obtido através da função fopen.
Tutorial PHP - 85 -
Ficheiros
LLeerr uumm ffiicchheeiirroo
Para ler um ficheiro pode-se utilizar a função fread, que tem a seguinte sintaxe:
string fread(int fp, int tamanho);
Esta função retorna uma string com o conteúdo do ficheiro. O segundo
parâmetro determina até onde o ficheiro será lido. Se tamanho for maior que o tamanho
do ficheiro, não ocorre erro, e é retornado o ficheiro na sua totalidade.
Na maioria dos casos a função filesize pode ser bastante útil, para determinar o
tamanho do ficheiro que se vai ler.
Por exemplo:
$meuficheiro = “c:\teste.txt”;
$id = fopen($ficheiro, “r”);
$conteudo = fread($id,filesize($ficheiro));
A função fread é binary-safe, ou seja, pode ser usada para ler o conteúdo de um
ficheiro binário. Obviamente que nesse caso é preciso saber exactamente onde utilizar
os dados obtidos.
Tutorial PHP - 86 -
Ficheiros
EEssccrreevveerr nnuumm ffiicchheeiirroo
A função fwrite é usada para escrever em ficheiros, e tem a seguinte sintaxe:
int fwrite(int fp, string conteudo, int [tamanho]);
Esta função grava num ficheiro o conteúdo do segundo parâmetro. Se tamanho
for fornecido e menor que o tamanho da string, será feita a gravação apenas de uma
parte da mesma, determinada pelo terceiro parâmetro.
Tutorial PHP - 87 -
Ficheiros
EExxeemmpplloo
O exemplo seguinte demonstra a leitura de um ficheiro. Este exemplo necessita
apenas de uma imagem do tipo GIF, que deve estar no mesmo directório do script de
exemplo.
<?
$ficheiro = “teste.gif”; /* nome do ficheiro GIF
a ser utilizado */
$id = fopen($ficheiro, “r”); /* abre o ficheiro
para leitura */
$conteudo = fread($id,filesize($ficheiro)); /* lê
o conteúdo do ficheiro e grava-o na variável
$conteudo */
fclose($id); /* fecha o ficheiro */
header(“Content-type: image/gif”); /* esta linha
envia um header ao browser informando que o tipo
de ficheiro que está a ser enviado é uma imagem
no formato GIF */
echo $conteudo; /* esta última linha envia ao
browser o conteúdo do ficheiro */
?>
Se o script for executado sem erros, deverá ser visualizada no browser a imagem
escolhida.
Tutorial PHP - 88 -
Ficheiros
UUppllooaaddss ccoomm ffoorrmmuulláárriiooss HHTTMMLL
Os formulários HTML têm um tipo de componente utilizado para upload de
ficheiros. Os elementos dos formulários quando submetidos a scripts PHP criam
variáveis com os mesmos nomes, mas no caso do elemento file, o tratamento é
diferente.
Ao ser submetido o formulário, o ficheiro é gravado num ficheiro temporário no
disco, que será apagado ao final da execução do script. Além disso, quatro variáveis são
criadas no contexto do script PHP.
$meuficheiro – nome do ficheiro temporário criado;
$meuficheiro_name – nome original do ficheiro seleccionado pelo utilizador;
$meuficheiro_size – tamanho do ficheiro enviado;
$meuficheiro_type – tipo do ficheiro, se esta informação for fornecida pelo
browser;
Para armazenar o conteúdo de um ficheiro numa tabela da base de dados ou até
num ficheiro definitivo, podemos utilizar o seguinte script. Para o seguinte exemplo
vamos supor que o campo do formulário tem o nome teste:
<?
$id = fopen($teste, “r”); /* abre o ficheiro para
leitura */
$teste_conteudo = fread($id,filesize($teste)); /* lê o
conteúdo do ficheiro e grava na variável $conteudo */
fclose($id); /* fecha o ficheiro */
?>
Assim, teremos o conteúdo do ficheiro enviado armazenado na variável
$teste_conteudo, que pode assim ser armazenado onde for mais adequado.
Tutorial PHP - 89 -
Enviar um e-mail
1144 EENNVVIIAARR UUMM EE--MMAAIILL
Para enviar um e-mail através de um script PHP é bastante simples. Basta
utilizar a função mail:
Sintaxe :
mail(string to, string subject, string message, string
[headers]);
onde:
to – string contendo o e-mail do destinatário;
subject – o assunto da mensagem;
message – o corpo da mensagem;
headers – outras informações do cabeçalho, como por exemplo from, reply-to,
bcc, etc.
Para facilitar a compreensão dos scripts, os argumentos (como geralmente são
strings com um tamanho significativo) devem ser atribuídos a variáveis, antes da
chamada da função mail.
Tutorial PHP - 90 -
Apêndice 1
1155 CCOONNCCLLUUSSÃÃOO
Ao longo deste trabalho, tentei fazer uma explicação simples e prática sobre a
linguagem PHP.
Penso que esses objectivos foram atingidos, e espero que este documento seja
uma boa ajuda para um programador que pretenda iniciar a programação nesta
linguagem.
Quanto à linguagem em si, é preciso não esquecer que o PHP é ainda uma
linguagem relativamente recente, e em constante evolução. De notar por exemplo a falta
uma ferramenta para debug, ou um tratamento de erros mais sofisticado, como por
exemplo existe em linguagens como ASP ou Cold Fusion.
Apesar disso, o PHP revelou-se uma linguagem bastante prática e acessível, e
que permite trabalhar com áreas bastante interessantes, como a manipulação de ficheiros
e de cookies, integração com bases de dados, envio de e-mails, etc.
Como foi referido, este trabalho tinha como objectivo apenas uma introdução a
esta interessante linguagem, por isso queria deixar em aberto toda a capacidade do PHP
que falta ainda explorar, como por exemplo o tratamento de imagens e outras
capacidades mais avançadas.
Em termos pessoais, este trabalho foi bastante gratificante, principalmente sendo
esta uma área de grande interesse para mim. A elaboração deste documento
proporcionou-me boas bases de PHP, que muito certamente vai ser uma ferramenta
valiosa no decorrer da minha vida profissional.
Tutorial PHP - 91 -
Apêndice 1
1166 AAPPÊÊNNDDIICCEE 11
IInnssttaallaaççããoo ee ccoonnffiigguurraaççããoo ddoo AAppaacchhee (( WWiinnddoowwss ))
O servidor HTTP Apache, está disponível para download em :
http://www.apache.org/httpd.html
A instalação do Apache é bastante simples, semelhante a qualquer aplicação
windows. A única restrição é que o winsock2 deve estar instalado no sistema. Se não
estiver, o download pode ser feito em:
http://www.microsoft.com/windows95/downloads/contents/wuadmintools/s_wu
networkingtools/w95sockets2/
Depois de instalado, é necessário fazer a configuração do servidor, através do
ficheiro httpd.conf. Todas as configurações estão comentadas. O mínimo que tem de ser
configurado é o directório onde os documentos vão ficar guardados, através da opção
DocumentRoot. Basta procurar essa opção e escrever o nome do directório, como no
exemplo:
DocumentRoot "C:\HTTPserver\"
Tutorial PHP - 92 -
Apêndice 1
Uma outra configuração básica é especificação da variável DirectoryIndex, que
informa o servidor quais os ficheiros que serão exibidos automaticamente como índice
do directório. É isso que faz com que ao escrever, por exemplo, www.teste.pt, o servidor
saiba qual dos ficheiros do directório deve ser executado. Um exemplo da utilização do
DirectoryIndex:
DirectoryIndex index.html index.htm index.php3
A seguir, deve-se criar um ficheiro com um dos nomes definidos como índice e
coloca-lo no directório raiz do servidor.
Depois deve-se executar o servidor Apache e tentar aceder ao endereço
“http://localhost” pelo browser. Se a página for exibida, é porque o servidor foi
instalado correctamente.
Tutorial PHP - 93 -
Apêndice 2
1177 AAPPÊÊNNDDIICCEE 22
IInnssttaallaaççããoo ee ccoonnffiigguurraaççããoo ddoo PPHHPP (( WWiinnddoowwss ))
O download do PHP pode ser feito em :
http://www.php.net/
e sua instalação é também bastante simples. Basta descompactar os ficheiros
para o directório de destino (por exemplo c:\php3) e editar o ficheiro de configuração.
O ficheiro php3.ini-dist deve ser copiado para o directório do windows
(normalmente c:\windows ou c:\winnt) com o nome php3.ini. Depois de copiado, o
ficheiro pode ser editado, bastando modificar a linha onde se encontra a variável
extension_dir, que deve conter o directório onde estão os módulos (c:\php3).
Por exemplo:
extension_dir = c:\php3
Se for pretendido utilizar a base de dados mySQL, deve-se activar a linha
referente ao módulo respectivo. Basta tirar o “;” (ponto e vírgula) do início da linha:
;extension=php3_mysql.dll
Tutorial PHP - 94 -
Apêndice 2
A seguir, pode-se começar a configuração do servidor Apache, necessária para
que este reconheça o PHP. Editando novamente o ficheiro httpd.conf.
As linhas seguintes devem ser adicionadas no fim do ficheiro:
ScriptAlias /php3/ "c:/php3/"
AddType application/x-httpd-php3 .php3 .php
Action application/x-httpd-php3 "/php3/php.exe"
A primeira linha define o directório onde está o PHP.
A segunda cria um tipo para o PHP, e define que todos os ficheiros com as
extensões .php3 e .php devem passar pelo interpretador PHP.
A terceira linha define o executável do interpretador PHP.
De seguida pode-se testar se a instalação do PHP foi bem concluída. A melhor
forma de o testar é criar um ficheiro chamado teste.php3 e colocá-lo no directório raiz
do servidor Apache. O ficheiro deve conter a seguinte informação:
<?
phpinfo();
?>
Se for feito o acesso à página, através do browser (http://localhost/teste.php3),
deve-se ter como resultado uma lista com todas as configurações do PHP, incluindo o
módulo mySQL, que foi definido como activo no ficheiro php3.ini.
Se for visível essa lista, então o PHP foi instalado com sucesso.
Tutorial PHP - 95 -
Apêndice 3
1188 AAPPÊÊNNDDIICCEE 33
IInnssttaallaaççããoo ee ccoonnffiigguurraaççããoo ddoo mmyySSQQLL (( WWiinnddoowwss ))
A base de dados mySQL pode ser encontrada em:
http://www.mysql.com/download.html
A sua instalação é bastante simples, também no modelos de instalação de
qualquer programa para windows.
As configurações necessárias são relativas à segurança, e exigem um
conhecimento mais avançado de administração de servidores. Como o objectivo deste
documento é apenas o ensino da linguagem PHP, não é necessário fazer muitas
alterações na segurança, bastando referir como adicionar utilizadores.
Para isso, basta utilizar o comando GRANT, que tem a seguinte sintaxe:
GRANT <permissão> [(lista_colunas)]
[,<permissão> [(colunas)] ...]
ON {tabela | * | *.* | db.*}
TO <utilizador> [IDENTIFIED BY <password>]
[,<utilizador> [IDENTIFIED BY <password>] ...]
[WITH GRANT OPTION]
Tutorial PHP - 96 -
Apêndice 3
Onde permissão é uma das palavras reservadas referidas na tabela seguinte:
ALL PRIVILEGES
FILE
RELOAD
ALTER
INDEX
SELECT
CREATE
INSERT
SHUTDOWN
DELETE
PROCESS
UPDATE
DROP
REFERENCES
USAGE
Cada palavra representa um tipo de acesso à(s) coluna(s), tabela(s) ou base(s) de
dados referidas a seguir a ON.
Utilizador deve conter o nome do utilizador (login) e o host permitido.
Por exemplo: teste@localhost
Exemplo da utilização do comando GRANT:
GRANT SELECT, INSERT, UPDATE ON *
TO user1@localhost IDENTIFIED BY “1z2x3c”;
O exemplo anterior cria o utilizador user1, com a password 1z2x3c, que só pode
aceder do endereço localhost, e está limitado a utilizar os comandos select, insert e
update.
Também é possível adicionar utilizadores através do comando INSERT, para
alterar directamente na tabela de permissões, que é a tabela user da base de dados, que
por sua vez possui os campos para definir o utilizador, host, password, e respectivas
permissões específicas.
Tutorial PHP - 97 -
Apêndice 4
1199 AAPPÊÊNNDDIICCEE 44
CCoommaannddooss bbáássiiccooss ddee mmyySSQQLL
Iniciar o mySQL em background
shell> mysqld
Fazer o login no mySQL como root
shell> mysql -u root -proot_password
Adicionar um novo utilizador
mysql> GRANT ALL PRIVILEGES ON *.* TO
novo_utilizador@localhost
> IDENTIFIED BY 'password' WITH GRANT OPTION;
Exemplo:
mysql> GRANT ALL PRIVILEGES ON *.* TO user1@localhost
-> IDENTIFIED BY '1z2c' WITH GRANT OPTION;
Query OK, 0 rows affected (0.33 sec)
mysql> exit;
Tutorial PHP - 98 -
Apêndice 4
Fazer o login com o nome e password do utilizador criado
shell> mysql -u NOVO_UTILIZADOR –p PASSWORD
Criar uma base de dados chamada teste
mysql> CREATE DATABASE teste;
Query OK, 1 row affected (0.11 sec)
Tornar essa base de dados, a base de dados activa
mysql> use teste;
Database changed
Criar tabela tabelateste na base de dados teste, com os seguintes campos:
mysql> CREATE TABLE tabelateste (
-> nome VARCHAR(15),
-> email VARCHAR(25),
-> tel INT,
-> ID INT NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (ID));
Query OK, 0 rows affected (0.22 sec)
Tutorial PHP - 99 -
Apêndice 4
Mostrar tabelas existentes na base de dados teste
mysql> show tables;
--------------------
| Tables in teste |
--------------------
| tabelateste |
--------------------
1 row in set (0.05 sec)
Mostrar definições da tabela tabelateste
mysql> show columns from tabelateste;
-------------------------------------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
-------------------------------------------------------------------------------
| nome | varchar(15) | YES | | NULL | |
| email | varchar(25) | YES | | NULL | |
| tel | int(11) | YES | | NULL | |
| ID | int(11) | | PRI | 0 | auto_increment |
-------------------------------------------------------------------------------
4 rows in set (0.11 sec)
Inserir valores na tabela tabelateste:
mysql> INSERT INTO tabelateste VALUES
-> ('nome','nome@localhost',1234567,NULL);
Query OK, 1 row affected (0.16 sec)
Tutorial PHP - 100 -
Apêndice 4
Listar o todos registos da tabela tabelateste
mysql> SELECT * FROM tabelateste;
----------------------------------------------------
| nome | email | tel | ID |
----------------------------------------------------
| nome | nome@localhost | 1234567 | 1 |
----------------------------------------------------
1 rows in set (0.00 sec)
Listar todos os registos onde o ID tem o número 1
mysql> select * from tabelateste where ID=1;
----------------------------------------------------
| nome | email | tel | ID |
----------------------------------------------------
| nome | nome@localhost | 1234567 | 1 |
----------------------------------------------------
1 rows in set (0.00 sec)
Apagar um registo
mysql> DELETE FROM tabelateste WHERE nome='nome';
Query OK, 1 row affected (0.16 sec)
Tutorial PHP - 101 -
Apêndice 4
Actualizar um campo de um registo
(supondo que existe um registo com id=3):
mysql> UPDATE tabelateste SET id=4 WHERE id=3;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Tutorial PHP - 102 -
Bibliografia
2200 BBIIBBLLIIOOGGRRAAFFIIAA
• PHP Home Page http://www.php.net/
• phpTidBits http://www.htmlwizard.net/phpTidbits/
• PHPBuilder.Com http://www.phpbuilder.com/
• PHP3 resources at DevShed http://www.devshed.com/Server_Side/PHP/
• PHP.CodeBase.Org http://php.codebase.org/
• PX - PHP Code Exchange http://px.sklar.com/
• Berber's PHP3 Example Page http://webdev.berber.co.il/
• PHP Base Library http://phplib.shonline.de/
Tutorial PHP - 103 -