mar
31
2009
1

Minicurso PHP: 3ª Parte – Introdução ao PHP: Estruturas de Repetição ou Iteração (loops)

Olá Pessoal,

Com um puta atraso de uns quatro dias (minha alergia à poeira é uma M***), posto o conteúdo referente à estruturas de repetição (loops) no PHP. Durante essa semana irei postar uma lista de exercícios para vocês praticarem todo o conteúdo do blog, e o índice desse minicurso (para terem uma idéia clara do que virá depois), e estou fazendo alguns testes para implementar vídeo-aulas (aquele vídeo-tutorial de instalação do Apache, PHP e MySQL foi o começo). [MODE TYPE="CHANTAGEM_EMOCIONAL"]É claro que quanto mais vocês comentarem os posts, seja com reclamações, sugestões, dúvidas e elogios (de preferências :-) , maior é o meu incentivo em desenvolver esse material… [/MODE]

Voltando aos loops… Essas são estruturas extremamente importantes e relevantes para o contexto de programação. O uso inteligente de loops nos poupa “muito trabalho de corno” (Nota do Autor – um amontoado de código desnecessário), e só esse motivo já é mais do que suficiente para você absorver tudo o que puder do assunto. Vamos então! Não vou explicar o que é um loop etc., isso é escopo do minicurso de Lógica de Programação (em desenvolvimento), e conhecer o básico de seu funcionamento é pré-requisito para esse minicurso online de PHP. Se não sabe o que é um loop, espere até o minicurso de Algoritmo (não tarda), ou dê uma pesquisada na web sobre o tema.

FOR

A primeira estrutura de repetição que estudaremos é o FOR. Ele consiste de um contador, uma condição de saída e um operador de incremento ou decremento. A idéia básica de seu funcionamento é: PARA um dado valor do CONTADOR, e uma DADA CONDIÇÃO VERDADEIRA, execute um bloco de instruções e AUMENTE/DIMINUA o CONTADOR. Veja na prática:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
/* Primeiro exemplo - "$i = 0" verifica o valor do contador, iniciado em 0;
"$i < 10" é a condição de permanência do LOOP (roda enquanto $i for menor que 10);
"$i++" é o operador de incremento, ele acrescenta um ao valor do contador
no fim de cada volta (é a mesma coisa que $i = $i + 1) */
for ($i = 0; $i < 10; $i++) {
echo "$i; ";
}
 
/* Segundo exemplo - Usando um for para percorrer um array */
$nomes = array("João", "Maria", "Juca", "Ana", "Daniela");
$tamNomes = count($nomes); //count() é uma função que retorna o tamanho de um array
for ($i = 0; $i < $tamNomes; $i++) {
echo $tamNomes[$i]."; ";
}
?>

WHILE

Uma outra estrutura de repetição muito usada no PHP é o WHILE. O WHILE é uma mistura de loop com condicional. Seu processo de avaliação de condicionais é bem parecido com um IF. Funciona da seguinte forma: ENQUANTO uma dada CONDIÇÃO for VERDADEIRA, ele irá executar repetidamente um bloco de instruções. Veja na prática:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
//Exemplo 01
$num = 5;
while ($num > 1) {
echo $num;
$num--;
}
 
//Exemplo 02
$idade = 14;
$ano = 2009;
while ($idade <= 18) {
echo $ano." - ".$idade."<br />";
$idade++;
$ano++;
}
 
?>

Percebam que a cada volta do loop é feita uma verificação. Caso o valor retornado na condição seja TRUE o loop executará o bloco de instruções entre { }, reiniciando a verificação. Como incrementamos ou decrementamos as variáveis, em um dado momento a condição irá retornar FALSE, parando a execução do loop. O WHILE é muito usado para varreduras de resources (arquivos, consulta ao banco de dados etc.).

DO-WHILE

Existe uma variante da estrutura WHILE, onde a verificação é feita no fim do loop, ao invés do começo, e com isso garantindo a execução do bloco de instruções uma vez ao menos. Essa estrutura é conhecida como DO-WHILE. Como eu disse, a sintaxe é muito parecida com o WHILE, a única coisa que muda é o momento onde se faz a verificação. Veja o código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
/* WHILE - Verificação antes da execução do código
Como $num não é menor que 1, o bloco de instruções não será executado */
$num = 5;
while ($num < 1) {
echo $num;
$num++;
}
 
/* DO-WHILE - Verificação depois da execução do código
O bloco de instruções será executado uma vez, e somente
depois será verificado que $num é maior que 1 */
do {
echo $num;
$num++;
} while ($num < 1)
?>

Entendeu? Ainda não? Relaxa, é bem simples: como dizia um amigo meu – no WHILE perguntamos para depois atirar, no DO-WHILE a gente atira e depois pergunta… :-P

Quando usar um ou outro? Bem, se o bloco de instruções só pode ser executado caso a condição seja TRUE, então usamos o WHILE. Agora, se é preciso executar as instruções uma vez ao menos, independente da condição, aí usamos o DO-WHILE.

FOREACH

O FOREACH é uma estrutura de repetição específica para arrays. Sua sintaxe é uma versão simplificada do FOR. Na prática, ele desmembra um array em seus itens, tratando cada índice e valor de forma isolada, por meio da cláusula AS. O FOREACH possui duas formas de aplicação, uma simplificada e outra mais completa. Apresentaremos ambas, porém a versão completa é mais usual. Veja o FOREACH na prática:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$nomes = array("João", "Maria", "Juca", "Ana", "Daniela");
 
//Exemplo 1: Versão compacta - Não trabalha com a chave do elemento
foreach ($nomes as $valor) {
echo "$valor - ";
}
 
//Exemplo 2: Versão completa - Trabalha com a chave e valor do elemento
foreach ($nomes as $chave => $valor) {
echo "$chave => $valor;<br />";
}
?>

Reparem que “$chave” corresponde ao índice do elemento, e valor é o conteúdo desse elemento. Com essa estrutura podemos fazer inúmeras coisas interessantes no PHP. O FOREACH é um loop para percorrer ESPECIFICAMENTE arrays e objetos (a partir da versão 5 do PHP), ou seja se você tentar usá-lo em qualquer outra situação, o PHP retornará uma mensagem de erro. Em resumo: você pode usar outros loops para percorrer arrays, mas não pode usar o FOREACH para percorrer nada além de arrays e objetos.

CONTINUE E BREAK

Em algumas situações precisamos parar a execução do loop e: ir para a próxima iteração (volta do loop); sair definitivamente do loop. Nessas situações usamos os comandos CONTINUE e BREAK. O BREAK nós vimos no SWITCH-CASE (tutorial passado): serve para interromper a estrutura de repetição. Já o CONTINUE serve para encerrarmos a volta atual do loop e ir para a próxima. Veja ambos em ação:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$nomes = array("João", "Maria", "Juca", "Ana", "Daniela");
 
//Exemplo 1: Continue
foreach ($nomes as $chave => $valor) {
    if ($valor == "Ana") {
        continue;
    }
    else {
        echo "$chave => $valor;<br />";
    }
}
 
 
//Exemplo 2: Break
foreach ($nomes as $chave => $valor) {
    if ($valor == "Ana") {
           break;
    }
    else {
        echo "$chave => $valor;<br />";
    }
}
?>

Bem, é isso. Mais uma etapa cumprida! Pesquise um pouco mais sobre loops e pratique. Amanhã falaremos sobre FUNÇÕES. Na quinta, para fechar o ciclo básico do PHP abordaremos o tema “requisição de arquivos – include() e require()”. Até lá.

Abraços,
Diego.

mar
30
2009
1

Aviso

Olá Pessoal,

Por uma série de razões técnicas e médicas (maldita reação alérgica!!!) não consegui postar nos últimos dias. Vou compensar o atraso e mais tarde retomaremos nossa programação normal… :-D

Abraços,
Diego.

mar
26
2009
1

Minicurso PHP: 3ª Parte – Introdução ao PHP: Estruturas Condicionais ou de Controle

Olá Pessoal,

Gostando do minicurso? Espero que sim. Contribuam para o Projetista Digital postando suas dúvidas, comentários e sugestões na seção de comentários. Gostamos muito de recebê-los. Aviso dado, voltemos com a programação normal.

Conforme prometido trataremos hoje de estruturas condicionais em PHP. As condicionais nos permitem dotar os nossos programas de poder decisório. Ou seja, é possível tomar uma decisão ou outra, baseado numa condição ser ou não satisfeita.

IF – ELSE IF – ELSE

A estrutura condicional básica do PHP é o “if”. O IF possui um bloco de instruções delimitadas por { e }, a ser executado caso uma condição em parênteses seja ou não satisfeita. Veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$a = 5;
$b = 10;
 
//Verifico se os números são iguais
if ($a == $b) {
    echo "São iguais";
}
 
//Verifico se são diferentes
if ($a <> $b) {
    echo "São diferentes";
}
 
//Verifico se não são idênticos
if ($a > $b) {
    echo "A é maior do que B";
}
?>

Reparou que o bloco de código entre { e } só é executado caso a condição dada entre parênteses retorne um valor lógico TRUE? Pois é. O IF funciona dessa forma: analisa uma ou várias condições entre parênteses, caso o booleano retornado seja TRUE, ele executa o código entre chaves ( { e } ), caso o valor seja FALSE ele não executa nada… E se eu quiser executar um outro bloco de instruções caso a condição retorne FALSE? Para isso usamos uma outra estrutura chamada ELSE. O ELSE possui seu próprio de bloco instruções, delimitados por { e }, que somente será executado caso a condição analisada no IF retorne FALSE. É uma estrutura opcional para complementar o IF. A idéia geral é SE condição for verdadeira EXECUTE esse bloco de instruções CASO CONTRÁRIO execute esse outro bloco de instruções. Veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$a = 5;
$b = 10;
 
//Verifico se os números são iguais
if ($a == $b) {
    echo "São iguais";
}
else {
    echo "São diferentes";
}
 
//Verifico se são diferentes
if ($a <> $b) {
    echo "São diferentes";
}
else {
    echo "São iguais";
}
 
//Verifico se não são idênticos
if ($a > $b) {
    echo "A é maior do que B";
}
else {
    echo "B é maior do que A";
}
?>

Simples, né? Vamos continuar. E se eu precisar analisar uma série de condições simultaneamente? Vamos analisar as alternativas descritas nos códigos abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
$nome = "Diego";
 
//Analiso várias expressões em uma única condicional
if ($nome == "Diogo" || $nome == "Rafael" || "$nome == "Diego") {
    echo "Nome válido";
}
else {
    echo "Entre com um nome válido";
}
 
//Analiso várias condições em condicionais distintas, usando a estrutura ELSE IF (Senão Se) para analisar condicionais alternativas
if ($nome == "Diogo") {
    echo "Seu nome é Diogo";
}
else if ($nome == "Rafael") {
    echo "Seu nome é Rafael";
}
else if ("$nome == "Diego") {
    echo "Seu nome é Diego";
}
else {
    echo "Entre com um nome válido";
}
 
//Analiso as condições fazendo uso de IFs aninhados
$idade = 23;
$programador = TRUE;
 
if ($nome == "Diogo" || $nome == "Rafael" || "$nome == "Diego") {
if($idade > 18) {
        if ($programador) {
                echo "Seu nome é $nome, é maior de idade e trabalha como Programador";
        }
}
}
?>

Repararam no funcionamento dos IFs aninhados? As condições IDADE e PROGRAMADOR somente serão verificados se a primeira condição (NOME) for satisfeita. Esse tipo de estrutura é muito útil para projetos futuros. Outra novidade é o ELSE IF. Isso permite que analisemos várias condições, executando blocos de instruções diferentes para cada uma delas.

OPERADOR TERNÁRIO

Existe ainda uma forma compacta de escrever a estrutura condicional básica (IF – ELSE): o operador ternário. O operador ternário funciona da seguinte forma – $variavel = (condição) ? “valor 1″ : “valor 2″, onde $variavel é o nome da variável que receberá o valor, “condição” é uma condição a ser avaliada, “valor 1″ é o valor atribuído à “$variavel” caso a condição retorne TRUE, e “valor 2″ é o valor atribuído à “$variável” caso a condição retorne FALSE. Veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$idade = 18;
 
//Iremos reescrever essa condicional em uma linha apenas, usando operador ternário
if ($idade >= 18) {
$status = "Maior de Idade";
}
else {
$status = "Menor de Idade";
}
echo $status;
 
//Usando o operador ternário
$status = ($idade >= 18) ? "Maior de Idade" : "Menor de Idade";
echo $status;
?>

Legal, né? E bem simples de entender. O operador ternário nada mais é do que uma forma resumida e compacta de escrever um IF – ELSE para armazenar um valor em uma variável. Percebam que ele tem uma aplicação bem específica: atribuição de valores. Não é um substituto do IF – ELSE, apenas uma alternativa para um dado tipo de aplicação.

SWITCH – CASE

A terceira forma de trabalhar com condicionais em PHP é o comando switch. Nada mais é do que a comparação de uma variável a uma série de valores. Seu funcionamento corresponde a uma série de IFs um embaixo do outro. A estrutura do switch é a seguinte:

switch (variável) {
case valor1:
Bloco de Instruções
case valor2:
Outro bloco de instruções

case valor n:
Bloco de Instruções N
default:
Bloco de Instruções Default
}

Em cada cláusula “case” analisamos um valor possível para “variável”, e caso seja retornado TRUE na comparação executamos o bloco de instruções correspondente. Caso todos os “case” retornem FALSE é executada a cláusula “default” (parecido com o ELSE). Veja um exemplo prático de switch:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$acao = "inserir";
 
switch ($acao) {
case "inserir":
echo "A ação escolhida foi INSERIR";
case "atualizar:
echo "A ação escolhida foi ATUALIZAR";
case "apagar":
echo "A ação escolhida foi APAGAR";
default:
echo "Escolha uma ação válida";
}
?>

Ops… Que foi? O swtich não funcionou? Relaxa… Quando não aplicamos o comando “break” ao fim de cada “case”, o switch não entende que precisa parar naquele ponto, e continua executando o código até o fim (cláusula “default”). Agora veja como ficará o nosso código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$acao = "inserir";
 
switch ($acao) {
case "inserir":
echo "A ação escolhida foi INSERIR";
break;
case "atualizar:
echo "A ação escolhida foi ATUALIZAR";
break;
case "apagar":
echo "A ação escolhida foi APAGAR";
break;
default:
echo "Escolha uma ação válida";
}
?>

Agora sim. Tudo funcionando! Pois bem, com isso fechamos o tema estruturas condicionais. Amanhã falaremos sobre LOOPS e sábado sobre FUNÇÕES. Fechando esse ciclo de INTRODUÇÃO AO PHP. Já na segunda falaremos sobre passagem de parâmentros entre páginas (GET e POST), formulários PHP e envio de emails com PHP. Portanto, continuem visitando o Projetista Digital diariamente.

Abraços,
Diego.

mar
24
2009
0

Minicurso PHP: 3ª Parte – Introdução ao PHP: Tipos de Dados e Operadores

Olá Pessoal,

Dando continuidade com o nosso minicurso online PHP para Iniciantes, vamos tratar hoje de Tipos de Dados e Operadores em PHP. É um assunto importante, espero que aproveitem bastante.

TIPOS DE DADOS

O PHP suporta oito tipos de dados: string, inteiro, booleano (lógico), float, arrays, objetos, resource e NULL. Existem também pseudo-tipos que não serão abordados nesse tutorial. Uma coisa importante sobre tipos PHP: essa não é uma linguagem tipada, ou seja, não definimos os tipos de dados na declaração de variáveis e constantes. Em PHP os tipos são definidos automaticamente no momento da execução do código. Vamos descrever rapidamente cada um dos tipos listados acima:

String

Uma string é uma cadeia de caracteres alfanuméricos. Sempre que precisarmos trabalhar com texto, utilizaremos variáveis do tipo string. O PHP possui uma série de funções para manipulação de strings. Estudaremos esse assunto em uma etapa posterior desse mini-tutorial. Para declarar strings podemos usas apóstrofos ou aspas duplas. Veja o código abaixo:

1
2
3
4
5
6
<?php
//Declarando strings com aspas simples (apóstrofos)
$nome = 'Diego';
//Declarado strings com aspas duplas
$sobrenome = "Marques";
?>

Inteiro e Float (Double ou Ponto Flutuante)

O tipo inteiro (integer) engloba todos os números do conjunto Z (números inteiros). Admite valores negativos e positivos. Usamos valores inteiros para armazenar números e realizar cálculos numéricos. O tipo Float engloba o tipo inteiro, e admite valores do conjunto dos números reais, ou seja, fracionários. Números fracionários são divididos por “.”, por exemplo: 2.5, ou 2.3333. Veja o código abaixo:

1
2
3
4
5
6
<?php
$preco = 30;
$desconto = 2.5;
$total = $preco - ($preco * $desconto/100);
echo $total;
?>

Booleanos (Lógicos)

Valores lógicos ou booleanos são aqueles que expressam o resultado de uma sentença lógica: verdadeiro ou falso. Para especificar um booleano, usaremos as palavras-chave TRUE ou FALSE. Valores lógicos são utilizados como verificação em condicionais e alguns loops. Veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
<?php
$maiorIdade = TRUE;
//Verifico se é maior de idade
if ($maiorIdade) {
    echo "Pode entrar";
}
else {
    echo "Volte";
}
?>

Arrays

Arrays são listas de dados, armazenados na memória. Nos arrays associamos dados de diferentes tipos à chaves, e através delas resgatamos cada valor individualmente. Um array admite diferentes tipos dados em suas posições, sendo possível criar um array misto. Dos tipos suportados por um array, listamos: strings, numéricos, booleanos, arrays (podemos salvar um array dentro de outro) e objetos. Veja abaixo como declarar um array:

1
2
3
4
5
6
<?php
$nomes = array("Huguinho", "Zezinho", "Luisinho");
$perfil = array("João" => array("Contador", 26, 5.500, true), "Maria" => array("Professora", 30, 2.200, false));
var_dump($nomes);
print_r($perfil);
?>

Resource

Resource (recurso) é um tipo de dados especial no PHP que faz uma referência a um recurso externo. Algumas funções especiais do PHP usam recursos, como por exemplo mysql_connect() – conexão ao banco de dados, e fopen() – abrir arquivos. Como um resource sustenta manipuladores de arquivos não é possível converter nenhum valor para um resource.

OPERADORES

O PHP possui uma série de operadores para manipulação de variáveis. Vamos estudá-los rapidamente:

Operadores Aritméticos

Lembra da aritmética básica do colégio? Pois esses operadores no permitem fazer a mesma coisa:

$a + $b Efetua a soma de valores numéricos;
$a – $b Efetua a subtração de valores numéricos;
$a * $b Multiplica valores numéricos;
$a / $b Divide valores numéricos;
$a % $b Retorna o resto da divisão de $a por $b.

Veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$a = 5;
$b = 10;
echo $a + $b;
echo "<br />";
echo $a - $b;
echo "<br />";
echo $a * $b;
echo "<br />";
echo $a / $b;
echo "<br />";
echo $a % $b;
echo "<br />";
?>

Operadores de Comparação

Os operadores de comparação nos permitem, como o próprio nome diz, comparar dois valores. O resultado dessa comparação será um valor lógico (TRUE ou FALSE). Veja a tabela dos operadores de atribuição:

$a == $b Igual Verdadeiro (TRUE) se $a é igual a $b.
$a === $b Idêntico Verdadeiro (TRUE) se $a é igual a $b, e eles são do mesmo tipo.
$a != $b Diferente Verdadeiro se $a não é igual a $b.
$a <> $b Diferente Verdadeiro se $a não é igual a $b.
$a !== $b Não idêntico Verdadeiro de $a não é igual a $b, ou eles não são do mesmo tipo.
$a < $b Menor que Verdadeiro se $a é estritamente menor que $b.
$a > $b Maior que Verdadeiro se $a é estritamente maior que $b.
$a <= $b Menor ou igual Verdadeiro se $a é menor ou igual a $b.
$a >= $b Maior ou igual Verdadeiro se $a é maior ou igual a $b.

Veja esses operadores em ação:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
$a = 5;
$b = 10;
 
//Verifico se os números são iguais
if ($a == $b) {
    echo "São iguais";
}
 
//Verifico se são idênticos
if ($a === $b) {
    echo "São idênticos";
}
 
//Verifico se são diferentes
if ($a <> $b) {
    echo "São diferentes";
}
 
//Verifico se não são idênticos
if ($a !== $b) {
    echo "São diferentes";
}
 
//Verifico se $a é maior do que $b
if ($a > $b) {
    echo "A é maior do que B";
}
 
//Verifico se $a é menor do que $b
if ($a < $b) {
    echo "A é menor do que B";
}
 
//Verifico se $a é maior ou igual a $b
if ($a >= $b) {
    echo "A é maior ou igual a B";
}
 
//Verifico se $a é menor ou igual a $b
if ($a <= $b) {
    echo "A é menor ou igual a B";
}
?>

Em comparações, o PHP entende o valor 0 (zero) como equivalente ao valor lógico FALSE. Para evitar problemas em situações onde 0 deva ser entendido como um inteiro, dentro de uma comparação, usamos saídas como as de baixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$a = 0;
//O valor ZERO de $a será entendido como FALSE na comparação
if ($a == false) {
echo "É falso";
}
 
//Verificando se $a é idêntico a FALSE, evito a confusão com o valor 0
if ($a === false) {
echo "Não é idêntico";
}
 
//Verificando se $a é idêntico a ZERO
if ($a === 0) {
echo "É falso";
}
?>

Operadores de Atribuição

Operadores de atribuição servem para apontar um valor à uma variável, ou seja, atribuem valores à variáveis. O operador de atribuição básico é o “=”, podemos combiná-lo com operadores aritméticos, de string e arrays. Veja abaixo alguns exemplos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//Atribuo o valor 5 à variável $a
$a = 5;
 
//Incremento $a em 10
$a += 10;
 
//Decremento $a em 10
$a -=10;
 
//Multiplico $a por 10
$a *= 10;
 
//Divido $a por 10
$a /= 10;
?>

Operadores Lógicos

Manipulam valores lógicos, combinando expressões a serem agrupadas em testes condicionais. Veja a tabela de operadores lógicos:

$a and $b E Verdadeiro (TRUE) se tanto $a quanto $b são verdadeiros.
$a or $b OU Verdadeiro se $a ou $b são verdadeiros.
$a xor $b XOR Verdadeiro se $a ou $b são verdadeiros, mas não ambos.
! $a NÃO Verdadeiro se $a não é verdadeiro.
$a && $b E Verdadeiro se tanto $a quanto $b são verdadeiros.
$a || $b OU Verdadeiro se $a ou $b são verdadeiros.

Veja alguns códigos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$a = 5;
$b = 10;
 
//Verifico se $a < $b e $a é par
if (($a < $b) && ($a % 2 === 0)) {
echo "A é menor do que B e é par";
}
 
$maiorIdade = true;
if ($maiorIdade || $a > $b) {
echo "Uma das opções é falsa";
}
 
$menorIdade = false;
if (!$menorIdade) {
echo "É maior de idade";
}
 
?>

No tutorial de amanhã entraremos no tema estruturas condicionais. Até lá.

Abraços,
Diego.

mar
23
2009
0

Minicurso PHP: 3ª Parte – Introdução ao PHP: Variáveis, Constantes, Imprimindo dados na tela e Comentários

Olá Pessoal,

Já vimos para que serve o PHP, e o que precisamos para fazê-lo funcionar. Vamos agora adentrar no fantástico mundo da programação Server-Side, usando o PHP como linguagem principal. Todo mundo já está com o PHP funcionando direitinho, né? Ok, então vamos escolher um software para edição de código PHP. Muita gente usa o Dreamweaver como ferramenta de desenvolvimento HTML e CSS, e por isso acaba mantendo o hábito também para o PHP e outras linguagens. Bem, eu não uso o Dreamweaver. Alguns motivos práticos, outros éticos (não é interessante depender de uma ferramenta cuja licença é demasiado cara, me obrigando a pirateá-la) e alguns técnicos. Em resumo, dava pra escrever uma série de artigos sobre o porque não gosto do Dreamweaver, mas esse não é o foco do blog. Quer usar o Dreamweaver? Use. Não faz diferença pro andamento do minicurso. Agora, se quer começar com o pé direito, recomendo em primeiro lugar a minha opção profissional: Aptana Studio. O Aptana é um ótimo editor, ao meu ver melhor que o Dreamweaver, com vários recursos interessantes que fazem bastante diferença conforme sua vida profissional avança, e os projetos tornam-se mais complexos. Além de possuir um ótimo editor de XHTML, CSS e JavaScript (bem superior ao do Dreamweaver), e você pode baixar plugins para trabalhar com outras linguagens: Phyton, Ruby e possui um servidor Ajax. E é gratuito.

Existem outros editores de PHP como PHP Editor, Notepad++, PHP Expert Editor, TSWebEditor, Maguma Studio etc. A decisão é por sua conta. Mas se eu fosse vocês ficaria com o Aptana… :-P

VARIÁVEIS E CONSTANTES

Bem, vamos começar a escrever código PHP!!!! O PHP é uma linguagem a ser embutida em código HTML, ou seja, no servidor misturamos código HTML e PHP numa mesma página. O PHP será interpretado e gerará código HTML, e somente HTML será enviado para o browser. Essa é a lógica de funcionamento dum servidor web. Bem, o HTML funciona na base de etiquetas (tags). E o PHP? Bem, o PHP é uma linguagem de scripts e para ser interpretado corretamente pelo servidor, seus códigos precisam estar entre delimitadores. Veja os delimitadores em funcionamento:

1
2
3
4
<?php
//Tudo o que estiver entre "<?php" e "?>" será interpretado como código PHP a ser processado pelo servidor
echo "Oi Mundo!";
?>

Legal, onde escrever os scripts já sabemos. Agora, como declarar variáveis em PHP? É um procedimento bem simples. Basta escrever $nome_da_variavel = valor. As variáveis em PHP iniciam com um sinal de $, seguido do nome da variável. A nomenclatura de variáveis em PHP segue o padrão de outras linguagens: deve iniciar com letras, não aceita espaços etc. Use sempre nomes sugestivos para as variáveis, evitando futuras dores de cabeça seja no desenvolvimento do aplicativo ou na manutenção do mesmo. Veja o código abaixo:

1
2
3
4
5
6
7
<?php
$nome = "Jonas da Silva";
$emprego = "Estagiário Desenvolvimento";
$salario = 450.00;
$idade = 17;
$maiorIdade = false;
?>

Repararam que todas as variáveis tem nomes claros, que as distinguem de qualquer outra variável do programa? Fica bem mais fácil trabalhar desse jeito. Algumas regras básicas para nomenclatura de variáveis: não use números no início das variáveis, espaços em branco e caracteres especiais; coloque nomes claros e sugestivos, com menos de doze caracteres (legibilidade de código); busque usar letras minúsculas, palavras separadas por “_” ou somente a primeira letra de cada palavra em maiúsculo, se a variável for composta por mais de uma palavra.

Além de variáveis o PHP nos permite trabalhar com CONSTANTES (espaços na memória cujo valor não muda durante a execução do programa, ao contrário das variáveis que possuem valores voláteis). Para usar constantes no PHP precisaremos da função define(”NOME_DA_CONSTANTE”, “Valor_da_Constante”). Escrevemos constantes normalmente em caixa alta. Outro fato importante: os nomes das constantes NÃO são precedidos de $, como nas variáveis. Veja um exemplo de declaração de constantes:

1
2
3
4
<?php
define ("CPMF", 0.05);
define ("LITRO_GASOLINA", 2.37);
?>

É importante que vocês saibam: o PHP é case-sensitive. Ou seja, diferencia letras maiúsculas de minúsculas. Isso quer dizer o que? Na prática é assim: $nome e $Nome não são a mesma coisa. São variáveis completamente diferentes… Se você declara $nome e manda imprimir $Nome, acontecerá um erro, pois $Nome ainda não existe… É preciso ter muito cuidado, pois nomes de funções, variáveis, arrays, constantes etc., todos seguem a mesma regra: há diferença entre caixa alta e baixa. Muita gente se esquece desse pequeno detalhe e gasta horas até descobrir onde está o erro… :-P

Existem casos onde precisaremos de variáveis cujo nome seja modificável em função de uma dada situação. É o que chamamos de variable variables (variáveis variantes). Nada mais é do que usar o conteúdo de uma variável A como nome de uma variável B. Ou seja, se $A = “teste”, a variável B se chamará $teste. Legal né? Na verdade é muito útil em uma série de situações. Vocês verão conforme programarem seus primeiros projetos… Tá, e como usamos variáveis variantes? Simples: basta usar dois $$. Veja o código:

1
2
3
4
5
<?php
$a = "mensagem";
$$a = "Oi mundo, estou usando variáveis variantes";
echo $mensagem; //O valor impresso será: Oi mundo, estou usando variáveis variantes
?>

Outra coisa importante: quando atribuímos um valor de uma variável “$a” à “$b”, criamos um segundo espaço na memória, onde $b é uma variável independente, ainda que possua o mesmo valor de $a, qualquer modificação em $b não alterará em nada o valor de $a. Veja o código a seguir:

1
2
3
4
5
6
7
8
<?php
$a = "Diego";
$b = $a;
$b = "Maria";
echo $a; //imprime Diego
echo "<br />";
echo $b; //imprime Maria - ou seja, qualquer alteração em $b não modifica $a, apesar de termos igualado seus valores na linha 3
?>

E se quisermos relacionar $a e $b de forma que, qualquer mudança em $b reflita em $a, e vice-versa? Ou seja, se eu quiser relacionar as duas variáveis ao mesmo espaço de memória (variáveis são espaços de memória)? É simples, basta adicionar um & antes de atribuir $a à $b. Veja como ficaria o código:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$a = "Diego";
$b = &$a;
$b = "Maria";
echo $a; //imprime Maria
echo "<br />";
echo $b; //imprime Maria - ou seja, qualquer alteração em $b reflete $a, e vice-versa
$a = "João";
echo $a; //imprime João
echo "<br />";
echo $b; //imprime João
?>

IMPRIMINDO DADOS NA TELA

O PHP possui uma série de comandos de saída de dados, ou seja, para imprimir conteúdo na tela do usuário. O primeiro deles você já viu nos códigos acima: é o comando “echo”. Esse comando imprime o conteúdo de uma ou várias constantes e variáveis na tela do usuário. Usamos “echo” praticamente em todas as vezes que precisamos imprimir conteúdo na tela. Veja o código abaixo:

1
2
3
4
5
6
7
<?php
$nome = "Diego Marques";
echo "Seu nome é ", $nome, ".<br />";
echo 5;
define ("CPMF", 0.05);
echo "A CPMF é de ", CPMF;
?>

Podemos imprimir strings na tela do usuário com a função print(). Veja o código:

1
2
3
4
5
<?php
$nome = "Diego Marques";
print($nome);
print("<p>Seja bem vindo!</p>");
?>

A função var_dump() apresenta o conteúdo de uma variável de forma detalhada, apresentando o tipo e o valor da variável. No caso da análise de um array ou objeto, a função imprimirá todas as posições ou atributos, de forma organizada e alinhada. Veja um exemplo:

1
2
3
4
5
6
7
8
<?php
$nome = "Diego";
var_dump($nome);
$sobrenome = " Marques";
var_dump($nome, $sobrenome);
$nomes = array("Huguinho", "Zezinho", "Luisinho");
var_dump($nomes);
?>

A função print_r() possui um comportamento idêntico ao de var_dump: exibir o conteúdo de uma variável de forma detalhada. O único diferencial é: print_r() apresenta o conteúdo em um formato com maior legibilidade, facilitando o trabalho em certos casos. Veja o código abaixo:

1
2
3
4
5
6
7
8
<?php
$nome = "Diego";
print_r($nome);
$sobrenome = " Marques";
print_r($nome, $sobrenome);
$nomes = array("Huguinho", "Zezinho", "Luisinho");
print_r($nomes);
?>

Tanto var_dump() quando print_r() são funções extremamente úteis para debug de código, uma vez que detalham o conteúdo de variáveis para o programador.

COMENTÁRIOS

Assim como em qualquer outra linguagem o PHP admite o uso de comentários, seções do código que não serão interpretadas pelo servidor web, permitindo que o programador faça anotações no próprio código. É importante realizar comentários no código indicando funcionalidades, início e fim de seções, explicações de scripts etc., para que você não se perca em seu script, e facilite o trabalho de futuras manutenções. Veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
<?php
//Esse é um comentário de uma linha no PHP. Todo o conteúdo escrito nessa linha não será interpretado pelo servidor
 
/*
    Esse é o comentários de várias
    linhas no PHP. Todo o conteúdo
    escrito entre os delimitadores não
    será interpretado pelo servidor.
*/
?>
mar
20
2009
0

Minicurso PHP: 2ª Parte – Configurando Apache + PHP + MySQL

INSTALANDO O APACHE + PHP + MySQL no Windows XP – Módulos separados

Muita gente antes de mim já escreveu tutoriais de instalação e configuração da tríade PHP, Apache e MySQL. Inclusive eu sempre recomendo aos meus alunos o seguinte tutorial do site Linha de Código (uma ótima leitura, diga-se de passagem). Não irei reinventar a roda e criar o meu próprio tutorial. Seria perda de tempo. Ao invés disso vou postar uma vídeo-aula da instalação e configuração dessa tríade, seguindo o artigo do Linha de Código. Em primeiro lugar baixe os programas necessários:

Apache – http://www.baixaki.com.br/download/apache-for-windows.htm
PHP – http://www.baixaki.com.br/download/php.htm
MySQL – http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-noinstall-5.1.32-win32.zip/from/http://mysql.cce.usp.br/

Agora assista as vídeo-aulas e configure a tríade:


Instalando e Configurando PHP + Apache + MySQL – Parte 1 from Diego Marques on Vimeo.


Instalando e Configurando PHP + Apache + MySQL – Parte 2 from Diego Marques on Vimeo.

USANDO UM INSTALADOR AUTOMÁTICO

Se você não conseguir instalar a tríade com o tutorial anterior, pode fazer uso de um instalador automático: um software que instala automaticamente todo o pacote. Se por um lado fica mais fácil instalar o pacote completo, por outro você tem o fato de nem sempre as versões do Apache, PHP e MySQL serem as mais atuais. Mas é uma boa forma de começar a trabalhar, tendo em vista a importância de aprender a usar os módulos de forma separada no futuro. Veja abaixo a lista dos principais instaladores automáticos do mercado:

WAMP – http://www.baixaki.com.br/download/wamp5.htm
EasyPHP – http://www.baixaki.com.br/download/easyphp.htm
XAMPP – http://www.baixaki.com.br/download/xampp.htm

mar
19
2009
0

Minicurso PHP: 1ª Parte – O que é PHP?

O QUE É?

É uma linguagem de programação para sistemas web, uma das mais populares. É usada em vários sites de pequeno e grande porte. É fácil de ser reconhecida devido a extensão “.php” das páginas escritas nessa linguagem. Com PHP podemos construir lojas virtuais, portais de notícias, redes sociais e qualquer outro tipo de site ou aplicação web. Um exemplo de aplicação web de grande porte, escrita em PHP, é a Wikipédia.

HISTÓRIA

Extraído da Wikipédia:

“A linguagem surgiu por volta de 1994, como um pacote de programas CGI criados por Rasmus Lerdof, com o nome Personal Home Page Tools, para substituir um conjunto de scripts Perl que ele usava no desenvolvimento de sua página pessoal. Em 1997 foi lançado o novo pacote da linguagem com o nome de PHP/FI, trazendo a ferramenta Forms Interpreter, um interpretador de comandos SQL.

Mais tarde, Zeev Suraski desenvolveu o analisador do PHP 3 que contava com o primeiro recurso de orientação a objetos, que dava poder de alcançar alguns pacotes, tinha herança e dava aos desenvolvedores somente a possibilidade de implementar propriedades e métodos.

Pouco depois, Zeev e Andi Gutmans, escreveram o PHP 4, abandonando por completo o PHP 3, dando mais poder à máquina da linguagem e maior número de recursos de orientação a objetos. O problema sério que apresentou o PHP 4 foi a criação de cópias de objetos, pois a linguagem ainda não trabalhava com apontadores ou handlers, como é a linguagem Java.

O problema fora resolvido na versão atual do PHP, a versão 5, que já trabalha com handlers. Caso se copie um objeto, na verdade copiaremos um apontador, pois, caso haja alguma mudança na versão original do objeto, todas as outras também sofrem a alteração, o que não acontecia na PHP 4.

Trata-se de uma linguagem extremamente modularizada, o que a torna ideal para instalação e uso em servidores web. Diversos módulos são criados no repositório de extensões PECL (PHP Extension Community Library) e alguns destes módulos são introduzidos como padrão em novas versões da linguagem. É muito parecida, em tipos de dados, sintaxe e mesmo funções, com a linguagem C e com a C++. Pode ser, dependendo da configuração do servidor, embarcada no código HTML. Existem versões do PHP disponíveis para os seguintes sistemas operacionais: Windows, Linux, FreeBSD, Mac OS, OS/2, AS/400, Novell Netware, RISC OS, IRIX e Solaris.

A Wikipédia funciona sobre um software inteiramente escrito em PHP, usando bases de dados MySQL: o MediaWiki.

Construir uma página dinâmica baseada em bases de dados é simples com PHP, (em parte, vale lembrar), este provê suporte a um grande número de bases de dados: Oracle, Sybase, PostgreSQL, InterBase, MySQL, SQLite, MSSQL, Firebird, etc., podendo abstrair o banco com a biblioteca ADOdb, entre outras.

PHP tem suporte aos protocolos: IMAP, SNMP, NNTP, POP3, HTTP, LDAP, XML-RPC, SOAP. É possível abrir sockets e interagir com outros protocolos. E as bibliotecas de terceiros expandem ainda mais estas funcionalidades.

Existem iniciativas para utilizar o PHP como linguagem de programação de sistemas fixos. A mais notável é a PHP-GTK. Trata-se de um conjunto do PHP com a biblioteca GTK, portada do C++, fazendo assim softwares inter-operacionais entre Windows e Linux. Na prática, essa extensão tem sido muito pouco utilizada para projetos reais.”

CLIENT-SIDE & SERVER-SIDE

PHP é uma linguagem SERVER-SIDE. O que isso quer dizer? Uma página web é carregada em um browser (também chamado de navegador). Esse software lê e interpreta código HTML, CSS e JavaScript, apresentando os sites em nossas telas. Essas linguagens interpretadas pelo browser são processadas no computador do usuário, ou seja, no lado cliente: CLIENT-SIDE. Agora, muitas das funcionalidades de um site não são realizadas por essas linguagens: uma busca por um produto, integração do site com o banco de dados e uma série de outros recursos dinâmicos. Isso tudo é processado pelo lado servidor: SERVER-SIDE. É o lado onde ficam armazenadas as páginas do site e softwares necessários para o funcionamento do site: banco de dados, serviços de email etc. Pois bem, é no SERVER-SIDE onde instalamos o servidor web: um software responsável por interpretar os códigos escritos em linguagens de programação de servidor, como o PHP, ASP etc. Código PHP não é interpretado pelo browser, ele precisa ser convertido em HTML pelo servidor, e então esse HTML é enviado para o browser, que por sua vez tem condições de ler essa linguagem (linguagem de formatação, diga-se de passagem). O PHP roda do lado servidor, se comunica com o banco de dados, bibliotecas e outros softwares instalados no server. Processa todas as informações e instruções, gerando código HTML a ser enviado para o browser.

Para saber mais sobre Server-Side, servidores, clientes, Client-Side e afins, visite os links abaixo da Wikipédia:

http://pt.wikipedia.org/wiki/Server-side
http://pt.wikipedia.org/wiki/Servidor
http://pt.wikipedia.org/wiki/Cliente-servidor
http://pt.wikipedia.org/wiki/Servidor_web

REQUISITOS PARA PROGRAMAR EM PHP

PHP é uma linguagem de programação simples de aprender e manusear. Mas para aprendê-la de forma plena e compreender os pormenores desse tutorial, são necessários conhecimentos de Lógica de Programação (Algoritmos). Em muito breve teremos um minicurso de Lógica de Programação, e você poderá vê-lo por aqui. Ninguém quer aprender PHP para deixar a integração com um banco de dados de lado. É óbvio! Então conhecimentos de SQL e MySQL (o banco que usaremos em nossos minicursos) são pré-requisitos para extrair o máximo proveito dessa linguagem, e construir sites e aplicativos eficientes. Teremos minicursos de banco de dados também (em muito breve): Análise e Modelagem de Dados, SQL – Construindo Querys e Gerenciando o MySQL Server.

O QUE É PRECISO PARA RODAR PHP?

Para rodar o PHP é preciso baixar a versão mais recente da linguagem, que você encontra no site oficial, e de um servidor web para carregar o PHP na memória e interpretar os scripts escritos com a linguagem. O servidor web mais usado e preferido entre 9 a cada 10 desenvolvedores PHP é o Apache. É seguro, estável, possui farta documentação, é gratuito, e é o servidor utilizado em praticamente todas as hospedagens web. Tem quem prefira o IIS da Microsoft, mas não é o caso do pessoal desse blog. Aprender a configurar o Apache é parte fundamental do trabalho do Programador Web. Para integrar o PHP ao banco de dados MySQL, será necessário baixar a versão mais recente do MySQL Server no site oficial do desenvolvedor. Como instalar e configurar? Veja no próximo tutorial.

mar
18
2009
0

Gerenciando Arquivos e Diretórios com PHP: Parte 3 – Upload de Arquivos

Olá Pessoal,

Vamos fechar nossa parte de arquivos e diretórios com um tema bem legal: upload de arquivos. Acho que nem é preciso dizer sobre o quanto é importante agregar aos nossos formulários a funcionalidade de envio de arquivos por parte do usuário… Pois bem, para trabalhar com upload de arquivos você precisa saber trabalhar com formulários em PHP, usando o método POST. De preferência bom conhecimento das funções para tratamento de strings e gerenciamento de arquivos/diretórios (aquelas estudadas na parte 1 e parte 2 desse tutorial). Bem, vamos ver o que é preciso para nossos formulários adicionarem a funcionalidade de upload de arquivos.

Upando um arquivo

Primeiramente, você deve declarar o atributo “enctype” da tag

com o valor: “multipart/form-data”. Após isso basta adicionar um campo input com o atributo “type” igual a “file”. Veja o código abaixo da página form.php:

1
2
3
4
<form action="valida.php" method="post" enctype="multipart/form-data">
<label for="arquivo">Arquivo: <input type="file" name="arquivo" id="arquivo" /></label>
<button type="submit">ENVIAR</button>
</form>

Esse formulário já está apto a enviar arquivos para a página “valida.php”, que por sua vez ficará responsável por todas as verificações de segurança. E a partir de agora iremos trabalhar nela. Se você não adicionar enctype=”multipart/form-data” na tag
, o upload de arquivos não funcionará. Esse atributo é obrigatório para formulários que possuem um campo para envio de arquivos.

A variável global $_FILES

Uma vez disparado o formulário com um arquivo para upload, todos os dados desse arquivo estarão na variável superglobal $_FILES["nome_do_arquivo"]. Ela armazena as seguintes informações:

$_FILES["nome_do_arquivo"]["name"] – Retorna o nome do arquivo na máquina do usuário.
$_FILES["nome_do_arquivo"]["tmp_name"] – Retorna o nome temporário do arquivo armazenado no servidor.
$_FILES["nome_do_arquivo"]["size"] – Retorna o tamanho do arquivo em BYTES.
$_FILES["nome_do_arquivo"]["type"] – Retorna o tipo do arquivo.
$_FILES["nome_do_arquivo"]["errors"] – Retorna o código de erro associado a esse arquivo.

Com essas informações podemos fazer inúmeras verificações e validações no arquivo “upado”. Para fins de testes, mandarei imprimir todos os dados de $_FILES. Veja o código de “valida.php”:

1
2
3
<?php
print_r($_FILES["arquivo"]);
?>

Envie diferentes arquivos pela página “form.php” e veja como $_FILES assume novos valores conforme o arquivo “upado” é modificado.

Verificar se um arquivo foi “upado”

Sempre que recebemos dados de um formulário realizamos validações de segurança. Isso evita que alguém mal intencionado aproveite uma brecha do sistema, e tente invadí-lo, buscar dados de nossos usuários ou provocar qualquer outro tipo de dano (Quem nunca acessou um site qualquer, e no lugar do conteúdo habitual viu uma mensagem do tipo “Escrevi e saí correndo…”? Pois é, evitar esse tipo de coisa poupa constrangimentos pra todo mundo). Quando recebemos um arquivo “upado” devemos nos certificar se foi realmente efetuado um upload, dentre outras verificações. A função is_uploaded_file() verifica se de fato o arquivo em questão veio de um formulário via POST, ao invés de qualquer outro meio escuso. Ela recebe o arquivo como parâmetro – para um funcionamento adequado da função, passamos $_FILES["nome_do_arquivo"][tmp_name""] como parâmetro. Retorna TRUE em caso de sucesso, e FALSE em caso de erro. Veja como ficará a página “valida.php”:

1
2
3
4
5
6
7
8
<?php
if (is_uploaded_file($_FILES["arquivo"]["tmp_name"])) {
print_r($_FILES["arquivo"]);
}
else {
echo "Erro";
}
?>

Movendo um arquivo “upado”

Quando fazemos um upload de um arquivo, o mesmo é enviado para um diretório de arquivos temporários (definido no PHP.INI). Resgatamos esse caminho temporário com $_FILES["arquivo"]["tmp_name"]. É preciso, depois de realizadas todas as verificações de segurança, enviá-lo para uma pasta definitiva e com um nome adequado. Para isso usamos a função move_uploaded_file(). Essa função recebe dois parâmetros: o caminho de origem do arquivo (o caminho temporário) e o caminho de destino. Veja como ficará a nossa página “valida.php”:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if (is_uploaded_file($_FILES["arquivo"]["tmp_name"])) {
if (move_uploaded_file($_FILES["arquivo"]["tmp_name"], "repositorio/user/".$_FILES["arquivo"]["name"])) {
echo "Arquivo movido com sucesso";
}
else {
echo "Não foi possível mover o arquivo";
}
}
else {
echo "Erro";
}
?>

Montando um sistema de upload simples

Com o que vimos até agora, iremos montar um sistema de upload de arquivos, restringindo o tamanho do arquivo enviado para 2MB e admitindo apenas imagens – qualquer outro tipo de arquivo não será enviado. Veja como ficará o código da página “valida.php”:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
//Verifico se o arquivo veio pelo método POST a partir de um form
if (is_uploaded_file($_FILES["arquivo"]["tmp_name"])) {
        //Verifico se o tamanho do arquivo excede o limite permitido
if ($_FILES["arquivo"]["size"] > 2100000) {
            echo "Tamanho excedido";
        }
//Verifico se o arquivo é uma imagem, a partir do seu formato
        else if (!($_FILES["arquivo"]["type"] == "image/gif" || $_FILES["arquivo"]["type"] == "image/pjpeg" || $_FILES["arquivo"]["type"] == "image/jpeg" ||
$_FILES["arquivo"]["type"] == "image/png")) {
            echo "Somente imagens - ".$_FILES["arquivo"]["type"];
        }
Verifico se existe algum erro
        else if ($_FILES["arquivo"]["error"] != 0) {
            echo $_FILES["arquivo"]["error"];
        }
        else {
        //Movo o arquivo do diretório temporário para a pasta definitiva
if (move_uploaded_file($_FILES["arquivo"]["tmp_name"], "../repositorio/user/".$_FILES["arquivo"]["name"])) {
                echo "Enviado";
        }
            else {
                echo "Não enviado";
            }
        }
    }
else {
        echo "Erro";
}
?>

E aí está! Um sistema de upload de imagens simples, para colocarmos em prática tudo o que vimos nesse tutorial. Agora você pode incrementar seus formulários e validações, criando pastas, tratando strings etc. Sua imaginação é o limite. Encerramos então a última parte do tutorial sobre arquivos e diretórios. Amanhã postamos conteúdo novo. Não esqueçam de voltar.

Abraços,
Diego.

mar
17
2009
1

Gerenciando Arquivos e Diretórios com PHP: Parte 2 – Diretórios e Pastas

Olá Pessoal,

Vamos dar continuidade a parte 1 desse novo tutorial sobre ARQUIVOS e DIRETÓRIOS.

GERENCIANDO DIRETÓRIOS

Agora entramos nas funções do PHP para gerenciamento de pastas, complementando as funções para gerenciamento de arquivos, vistas anteriormente.

Criar e apagar um diretório

Para criar um diretório precisaremos da função mkdir(), onde passaremos como parâmetro o caminho e nome do diretório a ser criado. Ela retorna TRUE em caso de sucesso e FALSE em caso de erro. Veja a função em ação:

1
2
3
4
5
6
7
8
<?php
if (mkdir("repositorio")) {
echo "Diretório criado com sucesso.";
}
else {
echo "Não conseguimos criar o diretório.";
}
?>

Acabamos de criar uma pasta chamada “repositorio” dentro do mesmo nível dos nossos demais arquivos. Aproveite agora para criar um diretório chamado “teste”, dentro da pasta “repositorio”. E aí, coneguiram criar a pasta? Legal! Agora vamos apagar essa pasta! Não, eu não estou de sacanagem! Falo sério. Vamos apagar a pasta “teste” usando a função rmdir(). O parâmetro passado para essa função será o caminho do diretório que queremos apagar. Ela retorna TRUE em caso de sucesso e FALSE em caso de erro. Veja o código:

1
2
3
4
5
6
7
8
<?php
if (rmdir("repositorio/teste")) {
echo "Excluímos o diretório.";
}
else {
echo "Não excluímos o diretório.";
}
?>

Retornar o diretório atual

Precisa saber o nome do diretório do arquivo aberto? A função getcwd() resolve seu problema. Veja o código:

1
2
3
<?php
echo getcwd();
?>

Abrir, listar os itens e fechar um diretório

Abrir um diretório com PHP é algo bem simples. Basta usar a função opendir(), passando o caminho do diretório a ser aberto como parâmetro. A função retorna FALSE em caso de erro, e um resource com um manipulador do diretório, a ser usado por outras funções, em caso de sucesso. Sua aplicação pode ser visualizada abaixo:

1
2
3
4
<?php
$pasta = opendir("repositorio");
closedir($pasta);
?>

A função closedir() fecha um diretório aberto por opendir(). Uma vez aberto o diretório eu quero ter acesso a todos os itens (arquivos e subdiretórios) dentro dele. Para isso uso a função readdir(), passando como parâmetro o resource manipulador de diretório resultante da função opendir(). A função readdir() retorna o nome do próximo arquivo do diretório. Para percorrer todos os itens de um diretório faremos um loop, passando por todos os registros retornados pela função readdir(). Veja o código:

1
2
3
4
5
6
7
8
9
10
<?php
//Abro o diretório do arquivo atual
$pasta = opendir(getcwd());
//Crio um loop para percorrer todos os registros de um diretório
while (($arquivo = readdir($pasta)) !== false) {
    echo $arquivo."<br />";
}
//Fecho o diretório
closedir($pasta);
?>

Bem, para praticar um pouco que tal um exercício? Liste todos os arquivos da pasta atual do seu diretório, e somente para os arquivos com a extensão .txt, adicione um link com a palavra “MOVER” na frente do nome do arquivo (ficaria assim: arquivo.txt – MOVER). Ao clicar em MOVER o usuário dispararia uma função e moveria o arquivo para a pasta “repositorio” que criamos anteriormente. Um bom desafio: usará seus conhecimentos em GET, funções e arquivos (que você acabou de aprender). Boa sorte!

Amanhã fechamos esse tutorial, falando sobre uploads de arquivos. Até lá.

mar
16
2009
5

Gerenciando Arquivos e Diretórios com PHP: Parte 1 – Arquivos

Olá Pessoal,

Avançando com nosso minicurso de PHP, vamos nos próximos dias tratar do tema ARQUIVOS e DIRETÓRIOS. Uma das principais vantagens de uma linguagem de programação é o fato de podermos ler o conteúdo de um arquivo externo, inserir dados em arquivos existentes, criar pastas e documentos, listar itens em um diretório, apagar pastas e arquivos etc. O PHP ainda nos fornece recursos para trabalhar com upload de arquivos. Enfim, é um tema vasto, com extrema utilidade para o nosso cotidiano de desenvolvedores, veremos hoje as principais funções que o PHP nos fornece em aplicações de simples compreensão. Dividi o tutorial em três partes distintas: gerenciando arquivos, gerenciando diretórios e upload de arquivos. Aproveitem e bons estudos!

GERENCIANDO ARQUIVOS

Criar um arquivo .txt e escrever seu conteúdo

Para iniciar nosso tutorial iremos realizar uma tarefa simples: criar um novo arquivo .txt e escrever conteúdo nele. Vamos organizar nosso conteúdo: crie uma pasta chamada ARQUIVOS no diretório raiz do Apache (HTDOCS para muitos de vocês). Dentro dessa pasta iremos realizar todos os exercícios desse tutorial. Vamos criar um arquivo chamado “escreve.php”, e nele iremos inserir comandos para: abrir/criar um novo arquivo; inserir conteúdo nesse arquivo; e fechar o arquivo. Para abrir/criar um arquivo via PHP iremos usar uma função chamada fopen(). Essa função abre um arquivo existente via PHP, ou tenta criá-lo caso ele não exista. Para usá-la necessitaremos de dois parâmetros: caminho do arquivo e o modo como iremos abrí-lo. A função ficaria da seguinte forma – fopen(”caminho_do_arquivo”, “modo_de_abertura”). O modo como iremos abrir um arquivo admite os seguintes valores:

‘r’ – Abre somente para leitura; coloca o ponteiro do arquivo no começo do arquivo.
‘w’ – Abre somente para escrita; coloca o ponteiro do arquivo no começo do arquivo e reduz o comprimento do arquivo para zero. Se o arquivo não existir, tenta criá-lo.
‘a’ – Abre somente para escrita; coloca o ponteiro do arquivo no final do arquivo. Se o arquivo não existir, tenta criá-lo.
‘x’ – Cria e abre o arquivo somente para escrita; coloca o ponteiro no começo do arquivo. Se o arquivo já existir, a chamada a fopen() falhará, retornando FALSE e gerando um erro de nível E_WARNING. Se o arquivo não existir, tenta criá-lo.

Como queremos criar e abrir um arquivo para escrita, iremos abrí-lo no modo “w”. Veja como ficará o código da página “escreve.php”:

1
2
3
4
<?php
//Abriremos um arquivo chamado "perfil.txt" no mesmo nível de pasta do arquivo "escreve.php"
$arquivo = fopen("perfil.txt", "w");
?>

Arquivo aberto, vamos escrever conteúdo nele. Para isso usaremos a função fwrite(). Essa função precisa de dois parâmetros: arquivo aberto e conteúdo a ser escrito no mesmo. A sua sintaxe ficaria da seguinte forma: fwrite(”arquivo_aberto”, “conteudo”). Veja como ficará o código da página “escreve.php”, com a aplicação da função fwrite():

1
2
3
4
5
6
7
8
<?php
//Abriremos um arquivo chamado "perfil.txt" no mesmo nível de pasta do arquivo "escreve.php"
$arquivo = fopen("perfil.txt", "w");
//Escrevo o conteúdo em $arquivo
fwrite($arquivo, "Nome: Fábio Souza \n Profissão: WebDesigner \n Cidade: Rio de Janeiro \n");
//Fecho $arquivo
fclose($arquivo);
?>

Reparem que utilizo “\n” para forçar uma quebra de linha no arquivo. Outro detalhe importante: para fechar o arquivo aberto por fopen() uso a função fclose(), passando como parâmetro o resource retornado por fopen(). Veja agora como criar e imprimir dados num arquivo usando a função file_put_contents(”caminho_do_arquivo”, “conteudo”, “flag”). Ela funciona como se estivéssemos usando fopen(), fwrite() e fclose() em sequência. Ela admite os três parâmetros expostos acima: arquivo, conteúdo e flags. Segue abaixo os valores possíveis para o parâmetro “flag”:

FILE_USE_INCLUDE_PATH – Procura o arquivo filename nos diretórios de include. Veja include_path para mais informações.
FILE_APPEND - Se o arquivo filename já existir, acrescenta os dados ao arquivo ao invés de sobrescrevê-lo.
LOCK_EX – Adquire um bloqueio exclusivo enquanto estiver escrevendo.

Vou criar uma nova página chamada “escreve2.php”. Vou repetir a ação realizada na página “escreve.php”, apenas utilizarei a função file_put_contents() dessa vez. Veja o código:

1
2
3
4
<?php
//Criaremos um novo arquivo, escreveremos conteúdo e por fim o fecharemos
echo file_put_contents("perfil2.txt", "Nome: Rafael Alves \n Profissão: WebDeveloper \n Cidade: Rio de Janeiro \n");
?>

A função retorna FALSE em caso de erro, ou a quantidade de bytes inseridos no arquivo. Reparem que não colocamos o terceiro parâmetro. Digamos que ao invés de criar o arquivo “perfil2.txt”, seja necessário inserir conteúdo a um arquivo existente, como o “perfil.txt” (criado anteriormente). O que fazer? Simples, basta adicionar a flag “FILE_APPEND”. Veja o código:

1
2
3
4
<?php
//Criaremos um novo arquivo, escreveremos conteúdo e por fim o fecharemos
echo file_put_contents("perfil.txt", "Nome: Rafael Alves \n Profissão: WebDeveloper \n Cidade: Rio de Janeiro \n", FILE_APPEND);
?>

Abrir um arquivo .txt e ler seu conteúdo

Já vimos como abrir um arquivo, escrever conteúdo e fechá-lo. Vamos agora ler o conteúdo de um arquivo. Antes de começar, vou apresentar vocês a função feof(”arquivo_aberto”). Ela verifica se o ponteiro se encontra no fim do arquivo, retornando TRUE em caso de sucesso, e FALSE em caso de erro. Em resumo: ela verifica se estamos no fim do arquivo. Simples assim. A função fgets(”arquivo_aberto”) retorna uma linha do arquivo passado como parâmetro. Com ela podemos ler e imprimir uma linha de um arquivo. Vamos criar uma página “leia.php” e veja como ficaria o código:

1
2
3
4
5
6
7
8
9
10
11
<?php
//Abriremos o arquivo "perfil.txt" em modo de leitura
$arquivo = fopen("perfil.txt", "r");
//Crio um loop para percorrer todo o arquivo até a última linha
while (!feof($arquivo)) {
//Imprimo cada linha do meu arquivo, forçando uma quebra de linha com <br />
echo fgets($arquivo)."<br />";
}
//Fecho $arquivo
fclose($arquivo);
?>

O loop corre todo o arquivo enquanto não estiver na última linha (valor retornado pela função feof()). Uso a função fgets() para imprimir cada linha do arquivo. Agora, existem outras formas de ler o conteúdo de um arquivo. Uma delas é usando a função file_get_contents(). Essa função retorna o conteúdo de um arquivo no formato de uma string, ou FALSE em caso de erro. Vou criar uma página chamada “leia2.php” para aplicar essa função. Veja como ficaria o código:

1
2
3
<?php
echo file_get_contents("perfil.txt");
?>

Complicado, né? Bom, temos também uma outra forma de ler conteúdo de um arquivo, fazendo uso da função file(”caminho_do_arquivo”). Essa função retorna um array, onde cada posição corresponde a uma linha do arquivo passado como parâmetro. Criaremos uma página “leia3.php” para ver a função em ação. O código ficará assim:

1
2
3
4
5
6
7
<?php
$perfil = file("perfil.txt");
$tamPerfil = count($perfil);
for ($i = 0; $i < $tamPerfil; $i++) {
echo "Linha ".$i." - ".$perfil[$i]."<br />";
}
?>

Copiar, renomear e apagar arquivos

Copiar um arquivo é um procedimento bem simples. A função copy() faz todo o trabalho. Temos apenas que passar dois parâmetros: o caminho do arquivo que queremos copiar, e o caminho onde salvar a cópia. Se o arquivo de destino já existir, ele será sobrescrito. A função retorna TRUE em caso de sucesso, e FALSE caso contrário. Veja a função copy() em ação no arquivo “copia.php”, que acabamos de criar:

1
2
3
4
5
6
7
8
<?php
if (copy("perfil.txt", "copiaPerfil.txt")) {
echo "Cópia efetuada com sucesso.";
}
else {
echo "Erro na cópia.";
}
?>

Esse código gerará um arquivo “copiaPerfil.txt” com o mesmo conteúdo de “perfil.txt”. Fácil, né? Agora vamos renomear o arquivo “copiaPerfil.txt” para “perfilParaApagar.txt”. Para isso usaremos a função rename(), que usa dois parâmetros: o arquivo ou diretório que queremos renomear, e o novo nome. A função retorna TRUE em caso de sucesso, e FALSE caso contrário. Veja a função rename() em ação no arquivo “renomeia.php”:

1
2
3
4
5
6
7
8
<?php
if (rename("copiaPerfil.txt", "perfilParaApagar.txt")) {
echo "Renomeamos o arquivo com sucesso.";
}
else {
echo "Não conseguimos renomear o arquivo.";
}
?>

Agora vamos excluir o arquivo “perfilParaApagar.txt”. Usaremos a função unlink() para apagar arquivos. Passaremos como parâmetro o caminho do arquivo que desejamos excluir. A função retorna TRUE em caso de sucesso, e FALSE caso contrário. Veja o código da página “exclui.php”:

1
2
3
4
5
6
7
8
<?php
if (unlink("perfilParaApagar.txt")) {
echo "Excluímos o arquivo com sucesso.";
}
else {
echo "Não conseguimos excluir o arquivo.";
}
?>

Checar se um arquivo existe

Para verificar se um arquivo existe, usaremos a função file_exists(), passando o caminho do arquivo como parâmetro. A função retorna TRUE em caso de sucesso, e FALSE caso contrário. Veja a função em ação na página “verificaExistencia.php”:

1
2
3
4
5
6
7
8
<?php
if (file_exists("perfil.txt")) {
echo "O arquivo existe.";
}
else {
echo "O arquivo não existe.";
}
?>

A função is_file() verifica se o parâmetro passado corresponde a um arquivo regular. Em caso positivo ela retorna TRUE, em caso de erro retorna FALSE. Vejamos o código da página “verificaArquivo.php”:

1
2
3
4
5
6
7
8
<?php
if (is_file("perfil.txt")) {
echo "É um arquivo.";
}
else {
echo "Não é um arquivo.";
}
?>

Por hoje é só. Amanhã retornamos falando sobre diretórios e pastas. Então até a próxima.

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com