Escolar Documentos
Profissional Documentos
Cultura Documentos
PHP
_______________________________________________________________________________________________________________________
Sumário
1. Introdução ........................................................................................................................................ 3
1.1. O que é PHP? ............................................................................................................................ 3
1.2. O que pode ser feito com PHP? ................................................................................................ 3
1.3. Como surgiu a linguagem PHP? ............................................................................................... 3
1.4. Visão geral do PHP ................................................................................................................... 4
3. Comentários...................................................................................................................................... 5
6. Constantes ......................................................................................................................................... 7
7. Variáveis ........................................................................................................................................... 7
7.1. Variáveis Superglobais............................................................................................................... 7
9. Operadores ....................................................................................................................................... 8
9.1. Aritméticos ................................................................................................................................ 8
9.2. De strings ................................................................................................................................... 8
9.3. De atribuição ............................................................................................................................. 9
9.4. De comparação .......................................................................................................................... 9
9.5. De incremento e decremento ..................................................................................................... 9
9.6. Bit a bit ...................................................................................................................................... 9
9.7. Lógicos .................................................................................................................................... 10
9.8. Precedência ............................................................................................................................. 10
_______________________________________________________________________________________________________________________
11. Funções.......................................................................................................................................... 18
11.1. Definindo funções ................................................................................................................. 18
11.2. Valor de retorno .................................................................................................................... 19
11.3. Argumentos ........................................................................................................................... 19
11.3.1. Passagem de parâmetros por referência .................................................................... 19
11.3.2. Argumentos com valores pré-definidos (default) ........................................................ 20
11.4. Contexto ................................................................................................................................ 21
11.5. Escopo ................................................................................................................................... 21
~2~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
1. Introdução
1.1. O que é PHP?
Basicamente, qualquer coisa que pode ser feita por algum programa CGI pode ser feita
também com PHP, como coletar dados de um formulário, gerar páginas dinamicamente ou enviar e
receber cookies.
PHP também tem como uma das características mais importantes o suporte a um grande
número de bancos de dados, como dBase, Interbase, mSQL, mySQL, Oracle, Sybase, PostgreSQL e
vários outros. Construir uma página baseada em um banco de dados torna-se uma tarefa
extremamente simples com PHP.
Além disso, PHP tem suporte a outros serviços através de protocolos como IMAP, SNMP,
NNTP, POP3 e, logicamente, HTTP. Ainda é possível abrir sockets e interagir com outros
protocolos.
A linguagem PHP foi concebida durante o outono de 1994 por Rasmus Lerdorf. As
primeiras versões não foram disponibilizadas, tendo sido utilizadas em sua home-page apenas para
que ele pudesse ter informações sobre as visitas que estavam 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ágina pessoal). Era composta por um sistema bastante simples que
interpretava algumas macros e alguns utilitários que rodavam “por trás” das home-pages: um livro de
visitas, um contador e algumas outras coisas.
Em meados de 1995 o interpretador foi reescrito, e ganhou o nome de PHP/FI, o “FI” veio de
um outro pacote escrito por Rasmus que interpretava dados de formulários HTML (Form
~3~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
Interpreter). Ele combinou os scripts do pacote Personal Home Page Tools com o FI e adicionou
suporte a mSQL, nascendo assim o PHP/FI, que cresceu bastante, e as pessoas passaram a contribuir
com o projeto.
Estima-se que em 1996 PHP/FI estava sendo usado por cerca de 15.000 sites pelo 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. Ele deixou de ser um projeto de Rasmus com contribuições de outras
pessoas para ter uma equipe de desenvolvimento mais organizada. O interpretador foi reescrito por
Zeev Suraski e Andi Gutmans, e esse novo interpretador foi a base para a versão 3.
Atualmente o uso do PHP3 vem crescendo numa velocidade incrível, e já está sendo
desenvolvida a versão 4 do PHP.
Uma das aplicações mais comuns de qualquer linguagem de criação de scripts de lado do
servidor é processar formulários de HTML.
A primeira coisa, a saber, é que devemos configurar a ação do formulário para ser o nome do
script de PHP que processará as informações. Em geral, o valor do atributo ACTION (em um
arquivo HTML) é o URL que será carregado quando o usuário pressionar o botão Submit. Os dados
que o usuário digitou no formulário serão enviados para este URL via o método especificado no
atributo METHOD, um GET (acrescentado ao fim do URL) ou POST (enviado como um pacote
separado).
A segunda coisa a notar são os nomes dos campos de formulário. Utilizaremos esses nomes
novamente no nosso script de PHP. Por causa disso é importante dar nomes significativos aos
campos de formulário dos quais você possa facilmente se lembrar ao começar a escrever o script de
PHP.
Para embutir código PHP em HTML devemos simplesmente escrever o código PHP dentro
do arquivo HTML.
Exemplo:
<html>
<head>
<title> PHP e MySQL </title>
</head>
<body>
<h1> Meu primeiro programa </h1>
<?php
echo “<p> Código PHP em um arquivo HTML.”;
?>
</body>
</html>
~4~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
O código de PHP no exemplo anterior começou com <?php e acabou com ?>. Isso é
semelhante a todas as tags HTML porque todas começam com um símbolo menor que (<) e
terminam com um símbolo maior que (>). Esses símbolos são chamados tags de PHP que dizem ao
servidor da Web onde o código de PHP começa e onde termina. Qualquer texto entre as tags será
interpretado como PHP. Qualquer texto fora dessas tags será tratado com HTML normal.
3. Comentários
Os comentários em PHP começam com /* e terminam com */, para comentários em bloco.
Exemplo: /* esta linha não será processada pois está como comentário */
Dentro do script de PHP, você pode acessar cada um dos campos de formulário como uma
variável com o mesmo nome do campo de formulário.
Ex:.
Em um arquivo HTML que tenha o seguinte campo de formulário:
<input type=”text” name=”teste” size=20 maxlength=20>
Ao clicar em um botão submit e enviar estes dados para um arquivo PHP, o PHP receberá
uma variável de nome teste contendo o mesmo valor do campo de formulário do HTML.
As variáveis são tratadas pelo PHP com um sinal de $ (cifrão) no início. A variável teste do
exemplo anterior será tratada pelo PHP com $teste.
Para saber qual o tipo da variável basta utilizar a função do PHP gettype(). Cuja sintaxe é:
string gettype(variável). O resultado é a descrição do tipo da variável. Apesar da existência desta
função, ela não é muito utilizada, pois além de ser uma função de execução relativamente lenta, as
descrições dos tipos no PHP podem ser alteradas em versões futuras do PHP. Em vez disso o mais
aconselhável é utilizar as funções is_<tipo>, as quais retornam verdadeiro se a variável for do tipo
pesquisado. Sua sintaxe é: bool is_*(variável) <onde o * é o tipo a pesquisar>.
As funções is_* estão disponíveis em: is_interger(), is_string(), is_array(), is_bool(),
is_float(), is_null(), is_object(), is_resource() e is_string().
Existem ainda as funções is_numeric() e is_scalar(). A primeira retorna verdadeiro se a
variável for numérica ou uma string com números, já a segunda retorna verdadeiro se a variável for
~5~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
de um dos seguintes tipos escalares: inteiro, string, ponto flutuante ou booleano (arrays, objetos e
recursos não são escalares).
O PHP suporta os seguintes tipos de dados:
**Strings. Para definir uma string, podemos utilizar aspas simples ou aspas duplas. Existem duas
vantagens básicas de utilizar aspas duplas, a primeira é a maior quantidade de caracteres especiais
disponíveis (caracteres escape), a segunda é que variáveis são expandidas quando utilizamos aspas
duplas (ao contrário das aspas simples). A tabela a seguir mostra os caracteres escape disponíveis.
Caracteres Resultado
\n Linefeed (LF)
\r Carriage return (CR)
\t Tab (HT)
\\ Barra invertida
\$ $
\’ Aspas simples
\” Aspas duplas
\0xxx Um número octal
\xXX Um número hexadecimal
No PHP é possível converter uma variável de um tipo para outro. Para isso deve-se utilizar os
conversores de tipos, os quais estão disponíveis os seguintes:
~6~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
6. Constantes
Como você viu anteriormente, podemos alterar o valor armazenado em uma variável.
Também podemos declarar constantes. Uma constante armazena um valor como uma variável, mas
seu valor é configurado uma vez e, então, não pode ser alterado em outra parte no script.
Declaramos uma constante de nome total e de valor 10: Define(“TOTAL”,10);
As constantes não usam o sinal de cifrão no seu inicio, veja: echo TOTAL;
7. Variáveis
Variáveis no PHP são representadas pelo sina $ (cifrão) seguido de um identificados único. A
regra para formação do identificados é a mesma para uma constante, ou seja:
• Deve iniciar por uma letra ou pelo símbolo subscrito (_);
• Pode conter letra, números ou subscrito (_).
Assim acontece com as constantes, o nome de uma variável é case-sensitive, ou seja, o PHP
diferencia letras maiúsculas de minúsculas, e diferentemente de constantes, não é possível mudar
esse comportamento.
_______________________________________________________________________________________________________________________
A propriedade básica do PHP é sua capacidade de enviar os resultados de seus scripts para o
browser, interagindo diretamente com o HTML. Isso é possível de várias formas:
• Comandos de echo e print;
Os comandos de echo() e print() não são realmente funções do PHP. Eles são o
que chamamos de construtores da linguagem, por isso os parênteses não são
obrigatórios. A sintaxe desses comandos são: echo (texto) e print(texto).
• Comando printf.
Sintaxe: printf(formato,[argumento]).
9. Operadores
9.1. Aritméticos
9.2. De strings
Operador Nome
. concatenação
~8~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
9.3. De atribuição
Operador Nome
= atribuição simples
+= atribuição com adição
-= atribuição com subtração
*= atribuição com multiplicação
/= atribuição com divisão
%= atribuição com módulo
.= atribuição com concatenação
9.4. De comparação
~9~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
9.7. Lógicos
Operador Nome
and “e” lógico
or “ou” lógico
xor ou exclusivo
! não (inversão)
&& “e” lógico
|| “ou” lógico
9.8. Precedência
~ 10 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
10.1. Blocos
Um bloco consiste de vários comandos agrupados com o objetivo de relacioná-los com
determinado comando ou função. Em comandos como if, for, while, switch e em declarações de
funções blocos podem ser utilizados para permitir que um comando faça parte do contexto desejado.
Blocos em PHP são delimitados pelos caracteres “{” e “}”. A utilização dos delimitadores de bloco
em uma parte qualquer do código não relacionada com os comandos citados ou funções não
produzirá efeito algum, e será tratada normalmente pelo interpretador.
Exemplo:
if ($x == $y)
comando1;
comando2;
if ($x == $y){
comando1;
comando2;
}
10.2.1. if
O mais trivial dos comandos condicionais é o if. Ele testa a condição e executa o comando
indicado se o resultado for true (valor diferente de zero). Ele possui duas sintaxes:
if (expressão)
comando;
~ 11 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
if (expressão):
comando;
...
comando;
endif;
if (expressão)
comando;
else
comando;
if (expressão):
comando;
...
comando;
else
comando;
...
comando;
endif;
~ 12 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
if (expressao1)
comando1;
else
if (expressao2)
comando2;
else
if (expressao3)
comando3;
else
comando4;
foi criado o comando, também opcional elseif. Ele tem a mesma função de um else e um if usados
sequencialmente, como no exemplo acima. Num mesmo if podem ser utilizados diversos elseif’s,
ficando essa utilização a critério do programador, que deve zelar pela legibilidade de seu script.
O comando elseif também pode ser utilizado com dois tipos de sintaxe. Em resumo, a sintaxe
geral do comando if fica das seguintes maneiras:
if (expressao1)
comando;
[ elseif (expressao2)
comando; ]
[ else
comando; ]
if (expressao1) :
comando;
...
comando;
[ elseif (expressao2)
comando;
...
comando; ]
[ else
comando;
...
comando; ]
endif;
~ 13 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
10.2.2. 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;
}
~ 14 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
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 acima, se $i for igual a zero, os três comandos “print” serão executados. Se $i
for igual a 1, os dois últimos “print” serão executados. O comando só funcionará da maneira
desejada se $i for igual a 2.
Em outras linguagens que implementam o comando switch, ou similar, 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. O exemplo abaixo funciona perfeitamente:
switch ($s) {
case “casa”:
print “A casa é amarela”;
case “arvore”:
print “a árvore é bonita”;
case “lampada”:
print “joao apagou a lampada”;
}
10.3.1. while
O while é o comando de repetição (laço) mais simples. Ele testa uma condição e executa um
comando, ou um bloco 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;
~ 15 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
A expressão só é testada a cada vez que o bloco de instruções termina, além do teste inicial.
Se o valor da expressão passar a ser false no meio do bloco de instruções, a execução segue até o
final do bloco. Se no teste inicial a condição for avaliada como false, o bloco 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++;
O laço do..while funciona de maneira bastante semelhante ao while, com a simples diferença
que a expressão é testada ao final do bloco de comandos. O laço 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);
10.3.3. for
O tipo de laço mais complexo é o for. Para os que programam em C, C++ ou Java, a
assimilação do funcionamento do for é natural. Mas para aqueles que estão acostumados a
linguagens como Pascal, há uma grande mudança para o uso do for. As duas sintaxes permitidas são:
for (<inicializacao>;<condicao>;<incremento>)
<comando>;
~ 16 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
for (<inicializacao>;<condicao>;<incremento>) :
<comando>;
...
<comando>;
endfor;
<inicializacao>
while (<condicao>) {
comandos
...
<incremento>
}
10.4.1. Break
O comando break pode ser utilizado em laços de do, for e while, além do uso já visto no
comando switch. Ao encontrar um break dentro de um desses laços, o interpretador PHP para
imediatamente a execução do laço, seguindo normalmente o fluxo do script.
while ($x > 0) {
...
if ($x == 20) {
echo “erro! x = 20”;
break;
...
}
~ 17 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
No trecho de código acima, o laço while tem uma condição para seu término normal ($x <=
0), mas foi utilizado o break para o caso de um término não previsto no início do laço. Assim o
interpretador seguirá para o comando seguinte ao laço.
10.4.2. Continue
O comando continue também deve ser utilizado no interior de laços, e funciona de maneira
semelhante ao break, com a diferença que o fluxo ao invés de sair do laço volta para o início dele.
Vejamos o exemplo:
O exemplo acima é uma maneira ineficiente de imprimir os números pares entre 0 e 99. O
que o laço 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 laço sejam ignorados, seguindo para a próxima iteração.
11. Funções
Qualquer código PHP válido pode estar contido no interior de uma função. Como a checagem
de tipos em PHP é dinâmica, o tipo de retorno não deve ser declarado, sendo necessário que o
programador esteja atento para que a função retorne o tipo desejado. É recomendável que esteja tudo
bem documentado para facilitar a leitura e compreensão do código. Para efeito de documentação,
utiliza-se o seguinte formato de declaração de função:
~ 18 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
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 aos tipos dos
valores passados como parâmetros, pois se não for passado o tipo esperado não é emitido nenhum
alerta pelo interpretador PHP, já que este não testa os tipos.
11.3. Argumentos
É possível passar argumentos para uma função. Eles devem ser declarados logo após o nome
da função, entre parênteses, e tornam-se variáveis pertencentes ao escopo 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”);
Exemplo:
function mais5($numero) {
$numero += 5;
}
$a = 3;
mais5($a); //$a continua valendo 3
~ 19 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
No exemplo acima, 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
fosse feita por referência, a variável $a teria 8 como valor. O que ocorre normalmente é que ao ser
chamada uma função, o interpretador salva todo o escopo atual, ou seja, os conteúdos das variáveis.
Se uma dessas variáveis for passada como parâmetro, 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, toda alteração que a função realizar no valor passado como parâmetro afetará 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; e também na própria chamada da função. Nos dois casos utiliza-se o modificador “&”.
Vejamos um exemplo que ilustra os dois casos:
$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. */
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 no lugar do argumento. Quando algum parâmetro é
declarado desta maneira, a passagem do mesmo na chamada da função torna-se opcional.
É bom lembrar que quando a função tem mais de um parâmetro, o que tem valor default deve
ser declarado por último:
~ 20 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
teste(azul);
/* A função não vai funcionar da maneira esperada, ocorrendo um erro no interpretador. A
declaração correta é: */
teste2(azul);
11.4. Contexto
11.5. Escopo
O escopo de uma variável em PHP define a porção do programa onde ela pode ser utilizada.
Na maioria dos casos todas as variáveis têm escopo global. Entretanto, em funções definidas pelo
usuário um escopo local é criado. Uma variável de escopo global não pode ser utilizada no interior
de uma função sem que haja uma declaração.
Exemplo:
$vivas = “Testando”;
function Teste() {
echo $vivas;
}
Teste();
~ 21 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
O trecho acima não produzirá saída alguma, pois a variável $vivas é de escopo global, e não
pode ser referida num escopo local, mesmo que não haja outra com nome igual que cubra a sua
visibilidade. Para que o script funcione da forma desejada, a variável global a ser utilizada deve ser
declarada.
Exemplo:
$vivas = “Testando”;
function Teste() {
global $vivas;
echo $vivas;
}
Teste();
Uma declaração “global” pode conter várias variáveis, separadas por vírgulas. Uma outra
maneira de acessar variáveis de escopo global dentro de uma função é utilizando um array pré-
definido pelo PHP cujo nome é $GLOBALS. O índice para a variável referida é o próprio nome da
variável, sem o caracter $. O exemplo acima e o abaixo produzem o mesmo resultado:
Exemplo:
$vivas = "Testando";
function Teste() {
echo $GLOBALS["vivas"]; // imprime $vivas
echo $vivas; // não imprime nada
}
Teste();
~ 22 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
~ 23 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
13. Arrays
Um array, também conhecido como vetor ou lista, é uma das formas elementares de estrutura
de dados presente nas linguagens de programação. No PHP, um array pode conter elementos de
qualquer tipo (inteiro, string, booleano, etc.), diferentemente de outras linguagens que exigem a
definição do array para um único tipo de dado.
Um array pode ser unidimensional ou bidimensional, em que um elemento do array aponta
para outro array.
Os elementos de um array no PHP podem ser acessados por meio de índices (0, 1, 2, ...) ou
por chaves associativas (“cor”, “nome”, ...).
O PHP disponibiliza uma grande quantidade de funções para manipulação de arrays, as quais
são muito úteis no dia-a-dia da programação.
A função sizeof(array,modo) ou count(array,modo) retorna a quantidade de elementos de um
array. O parâmetro modo é opcional e admite os valores 0 e 1 (ou COUNT_RECURSIVE). Zero é o
valor-padrão e indica ao PHP para contar apenas o primeiro nível do array informado. Caso 1 ou
COUNT_RECURSIVE seja informado, a função retorna o número total de elementos do array,
incluindo todos os níveis existentes.
~ 24 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
Exemplo:
<?php
$_arr = Array(2,7,”a”=>array(5,8,9),”b”,13,17);
echo count($_arr);
echo “<br/>”;
echo count($_arr, COUNT_RECURSIVE);
?>
O resultado sera 6/9.
* array_sum(array) – retorna a soma de todos os elementos numéricos, ou que possam ser convertidos
em números do array.
* array_search(valor, array, modo) – faz uma pesquisa no array informado, procurando o valor
informado na função. Caso o valor seja encontrado, retorna o índice correspondente no array, caso contrário
retorna FALSE. Se o valor for encontrado várias vezes no array, a função irá retornar o primeiro índice em
que o valor aparece.
~ 25 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
13.4. Foreach
O foreach permite que seja realizada uma varredura completa em arrays, e deve ser utilizado somente
com estes. Quaisquer outras variáveis ou mesmo uma variável não inicializada causará um erro no script. O
que foreach faz é varrer todo o array e retornar seus valores ou opcionalmente suas chaves e valores.
Existem duas sintaxes para foreach. A primeira retorna somente os valores e a segunda retorna tanto
as chaves quanto os valores do array informado. São elas:
1ª – foreach(array as variável_valor);
2ª – foreach(array as variável_chave => variável_valor).
Desta forma temos que a cada iteração o valor do elemento atual, ou a chave e o valor do elemento
atual são retornados nas variáveis especificadas e o ponteiro do array é movido para o próximo elemento do
array. Caso não exista mais nenhum elemento no array o foreach é terminado.
Exemplo:
<?php
$arr = array(10,15,23,56,101,205);
foreach($arr as $vlr){
echo “$vlr <br/>”;
}
$arr_2 = array(“um” => “one”,
“dois” => “two”,
“três” => “three”,
“quatro” => “four”,
“cinco” => “five”);
foreach($arr_2 as $chv => $vlr){
echo “$chv = $vlr <br/>”;
}
?>
Caso o valor informado seja multidimensional, o conteúdo retornado em variável_valor será também
um array. Desta forma, para acessarmos os valores finais deste array, devemos utilizar vários comandos
foreach aninhados, por exemplo:
<?php
$arr[0][0] = 10;
$arr[0][1] = 50;
$arr[1][0] = 12;
$arr[1][1] = 23;
$arr[1][3] = 35;
~ 26 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
$arr[2][1] = 10;
foreach($arr as $chv => $vlr){
foreach($vlr as $chv_1 => $vlr_1){
echo “\$arr [$chv][$chv_1] = $vlr_1 <br/>”;
}
}
?>
O resultado do script é:
$arr[0][0] = 10
$arr[0][1] = 50
$arr[1][0] = 12
$arr[1][1] = 23
$arr[1][3] = 35
$arr[2][1] = 10
14. Arquivos
De vez em quando é necessário ler, alterar ou criar arquivos no servidor de Internet, como por
exemplo, para criar contadores de acesso, estatísticas de visitas ou guardar algumas informações para
visualizações posteriores que são demoradas para serem criadas pelo servidor, e que não seria muito
bom gerá−las sempre que um visitante as quisesse ver.
O PHP fornece um conjunto de funções muito boas para isto, e com alguns cuidados, os
scripts funcionarão tanto em Windows como em Linux sem nenhuma alteração. Todas essas funções
podem ser encontradas no manual do php, em "Filesystem functions".
A primeira função que se deve conhecer para trabalhar com arquivos é a que cria uma ligação
entre o script e o arquivo propriamente dito:
Esta função devolve um ponteiro para um arquivo, que é utilizado em outras funções para
lidar com arquivos. O primeiro parâmetro, arquivo, é uma string que indica o local do arquivo a ser
aberto, aqui vai a primeira dica: não utilize o modo de referência do windows, como
c:\www\arquivo.txt, pois não irá funcionar num servidor Linux. Evite também ler e gravar arquivos
fora do diretório onde o seu site está hospedado, às vezes torna−se difícil criar um diretório fora do
diretório do site, e, se um dia quiser transferir o seu site para uma outra máquina, pode acontecer que
esqueça daquele diretório isolado. Vamos supor que o site tem um subdiretório "tmp" e que tem
dentro um arquivo novidades.txt. Para abrir o arquivo usamos:
<?php
$fd = fopen( "tmp/novidades.txt", "r" );
...
?>
~ 27 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
Note que mesmo que este script seja executado em windows ele irá funcionar. Nada melhor
que programar com uma linguagem que funciona em vários sistemas operacionais sem alterações.
O segundo parâmetro para informar ao PHP que o arquivo deve ser aberto só para leitura, os
modos possíveis podem ser:
r − só leitura, coloca o ponteiro no início do arquivo;
r+ − leitura e gravação, coloca o ponteiro no início do arquivo;
w − só gravação, limpa o arquivo (deixa−o com 0 bytes) e coloca o ponteiro no início do
arquivo. Se o arquivo não existir, tenta criá−lo.
w+ − leitura e gravação, limpa o arquivo (deixa−o com 0 bytes) e coloca o ponteiro no início
do arquivo. Se o arquivo não existir, tenta criá−lo.
a − só gravação, coloca o ponteiro no final do arquivo. Se o arquivo não existir, tenta criá−lo.
a+ − leitura e gravação, limpa o arquivo (deixa−o com 0 bytes) e coloca o ponteiro no final
do arquivo. Se o arquivo não existir, tenta criá−lo.
O terceiro parâmetro é opcional, se seu valor for 1, o php irá procurar nos diretórios
informados na configuração "include_path" do php.ini.
Se a função fopen falhar ao abrir ou ao criar o arquivo, ela retorna false. Note que se for
utilizado o parâmetro "r"(somente leitura) ou "r+" e o arquivo não existir, a função fopen não irá
tentar criá−lo, simplesmente retornará um erro, e mostrará um aviso no browser do utilizador.
Depois de aberto ou criado o arquivo, é sempre bom deixar a mesa arrumada após o serviço,
portanto devemos fechar o arquivo. É muito fácil:
O parâmetro fp é o ponteiro de arquivo que foi retornado pela função fopen(), no nosso caso
$fd. Esta função retorna true se o arquivo foi fechado e false se não foi possível fechar o arquivo. O
arquivo precisa ser fechado no mesmo script que o abriu.
Nem só de abrir e fechar arquivos vive um script php, é necessário fazer alguma coisa com
eles. A "coisa" mais fácil é mostrar o conteúdo do arquivo no browser do utilizador, para isso
utilizamos a função "int fpassthru( int fp )". Então, para mostrar o arquivo novidades.txt, que contém
as últimas notícias da semana diretamente para o browser do utilizador, o script fica assim:
<?php
$fd = fopen( "tmp/novidades.txt", "r" ) or die( "ops, avise o webmaster, tem arquivo
faltando no servidor");
fpassthru( $fd );
?>
A função fpassthru lê a partir da posição atual do ponteiro até ao final do arquivo e fecha o
arquivo, portanto, neste caso não é necessário utilizar a função fclose(). Ao executar este script,
notará que o arquivo novidades.txt saiu com as linhas juntas, para resolver isto coloca um <br> no
final de cada linha do arquivo ou deixa o script entre as tags <pre>. Se tentar colocar alguns scripts
php dentro do arquivo novidades.txt notará que eles serão mostrados no browser do utilizador e não
~ 28 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
serão processados pelo php. Se quiser adicionar um script php á página, utiliza include ou require. Se
só for necessário mostrar o arquivo novidades diretamente no browser sem precisar de posicionar o
ponteiro, utilize a função readfile, que abre o arquivo, mostra e fecha o mesmo:
<?php
if (!readfile( "tmp/novidades.txt") ) die ("ops, chame o webmaster!");
?>
Claro, existem muitas funções para ler o arquivo: (todas elas dependem do ponteiro do
arquivo, e não do fato de fechar o arquivo)
Lê o arquivo a partir da posição atual do ponteiro no arquivo até ao tamanho em bytes ou até
o final do arquivo, o que acontecer primeiro, e devolve como uma string.
<?php
// este script faz a mesma coisa que o anterior
if( $fd = fopen( "tmp/novidades.txt", "r" ) ) {
while( !feof( $fd ) ) {
$novidades = fread( $fd, 1024 );
print $novidades;
}
fclose($fd);
}
?>
Enquanto não chegar ao final do arquivo ( feof() ), lê até 1024 bytes do arquivo para a
variável $novidades e imprime seu conteúdo.
Lê só um caractere do arquivo. Não utilize esta função para ler mais do que um caractere de
um mesmo arquivo, não é eficiente, é mais eficiente ler o arquivo em blocos para a memória e fazer
o processamento na memória, pois o acesso ao disco é extremamente lento se comparado com o
acesso à memória, e aceder ao disco para ler um só caractere para processar é um enorme desperdício
de recursos do servidor.
Se precisa ler o arquivo linha á linha, utilize esta função. Ela lê até que 1 byte seja lido, que
encontre o final de uma linha (que é incluída no resultado), ou final do arquivo e devolve como uma
string. Para ler até 10 bytes de um arquivo, utilize:
$texto = fgets( $fd, 11 );
~ 29 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
Idêntica à função fgets, só que os tags html e php serão ignoradas. Se for necessário deixar
algumas tags passarem pela função, utilize o parâmetro opcional tagspermitidas, por exemplo, para
ler um arquivo novamente, mas deixe só as tags <br>, <b></b> e <p></p> serem exibidas, use:
$texto = fgetss( $fd, 1024, "<br><b><p>" );
Mesmo podendo selecionar quais tags que podem passar pela função, se este arquivo vier de
fora, ou seja, é um arquivo que uma pessoa manda pela internet para mostra no site, alguém pode
mandar algum código javascript malicioso dentro de uma tag, e executar comandos indevidos na
máquina do visitante do seu site. Cuidado!
Lê o arquivo inteiro e coloca cada linha do arquivo numa tabela. Esta função utiliza como
parâmetro o nome do arquivo, portanto não é necessário abrir nem fechar o arquivo para usar esta
função. Vamos ao exemplo:
Supondo que o arquivo novidades.txt tem uma novidade por linha, similar a este:
novidade.txt:
Queremos mostrar cada linha do arquivo novidades com um fundo diferente, e ainda por cima
as linhas que contém um * no início devem ser exibidas em negrito:
<html>
<head>
<title>Novidades</title>
</head>
<body>
<?php
$txt = file("tmp/novidades.txt");
if(!$txt) {
print "Sem novidades por hoje, só o webmaster é que vai
receber um arquivo";
exit();
}
// count retorna o número de índices da tabela
$tot = count($txt);
?>
<table width="500" align="center" bgcolor="white" cellpadding="1"
cellspacing="0">
<?php
for($i=0;$i<$tot;$i++) {
// ct vai ler o primeiro caractere da linha
~ 30 ~
Curso de Sistemas de Informação
PHP
_______________________________________________________________________________________________________________________
$ct=$txt[$i][0];
// Chop elimina espaços do final da string e finais de linha
também
$linha = Chop($txt[$i]);
// Seleciona a cor de fundo para a linha
if( $cor == "#DCDCDC" )
$cor = "#DCDCFF";
else
$cor = "#DCDCDC";
print "<tr><td bgcolor='$cor'>";
// strip_tags elimina todas as tags html e php, como fgetss
// se a linha começa com um *, le a partir do próximo caractere
// o ponto serve para concatenar as strings
if( $ct == "*" )
print "<b>".strip_tags(substr($linha,1))."</b>";
else
print strip_tags($linha);
print "</td></tr>";
}
?>
</table>
</body>
</html>
~ 31 ~