Professional Documents
Culture Documents
6 - Conversões de Tipos
11- Funções de E-mail
Type Round-up
Resources Understanding E-mail
What are resources? TCP/IP server
How to handle resources Mail Transfer Agent, aka SMTP server
Type Testing Mail spool
Assignment and Coercion Mail User Agent, aka local mail client
Integer overflow Mail-retrieval program, aka POP/IMAP server
Finding the largest integer Mailing list manager
Receiving E-mail with PHP
Implementing from scratch
7 - Uso Avançado de Funções Modifying other people’s PHP
Variable Numbers of Arguments Cosmetic changes
Default arguments Sending E-mail with PHP
Arrays as multiple-argument substitutes Windows configuration
Multiple arguments in PHP and above Unix configuration
Call-by-Value The mail function
Call-by-Reference More Fun with PHP E-mail
Variable Function Names Sending mail from a form
An Extended Example Sending mail from a database
Sending attachments with MIME mail
A custom PHP mail application
8 - Matemática Sending mail from a cronjob
Mathematical Constants
Tests on Numbers 12 - Autenticação de Usuário
Base Conversion
Exponents and Logarithms Designing a User-Authentication System
Trigonometry Avoiding Common Security Issues
Arbitrary Precision (BC) Turn off register_globals
An arbitrary-precision example Check for string length and safety
Converting code to arbitrary-precision One-way encrypt passwords
Registration
Login/Logout
9 - Segurança User Tools
Possible Attacks Forgotten password
Site defacement Changing sensitive user data
Accessing source code Edit non-sensitive user data
Administrator Tools
Authorization: Basic auth, cookie, database, and IP Login as user
Bibliografia sugerida
PHP Guia do Desenvolvedor – Sterling Hughes
PHP4 Guia do Programador – Blake Schwendiman
Prog. Em PHP - Conceitos e Aplicações Walace Soares São Paulo Erica Sim
NIEDERAUER, Juliano. DESENVOLVENDO WEBSITES COM PHP. São Paulo: Novatec, 2004.
TIM Converse, JOYCE Park .PHP: A Bíblia.2.ed. Rio de janeiro:Campus,1997.
http://www.php.net
Variáveis
1. Numéricas 3. Arrays
2. Strings 4. Escopo
Operadores
1. Atribuição 3. Lógicos
2. Comparação 4. Aritméticos
Condicionais
1. IF, ELSE
2. ELSEIF
3. SWITCH, CASE
Controle de fluxo
1. WHILE
2. DO... WHILE
3. FOR
Funções
Introdução
Esta seção fornece uma pequena visão geral da linguagem de programação PHP.
Como mencionei na introdução deste livro, não pretendo passar muito tempo analisando os
conceitos gerais da programação. Aqui, você encontrará a sintaxe PHP para os elementos
comuns da programação, como variáveis, constantes e funções. Os exemplos neste capítulo
não são destinados a mostrar as melhores práticas de programação, mas simplesmente a
sintaxe e o uso. Para obter uma referência completa da linguagem, verifique a seção de
documentação no site da Web do PHP, http://www.php.net. Informações gerais da sintaxe.
<? echo "short PHP tags method of escaping from HTML<br>"; ?>
<?php echo "escape using full PHP tags<br>"; ?>
<script language="php">
echo "some -HTML editors don't like processing instructions<br>";
</script>
<% echo "you may prefer ASP-style tags<br>"; %>
Listagem 3: Comentários
<?php
echo "Hello,World!<br>"; // This is a 1-line C++ style comment
/* This is a multiline comment block. */
echo "Hello, again.<br>"; # This is a shell-style comment ?>
<?php
/* The following line will print, "This will print nothing."
*/
?>
This will print <?php # echo "something"; ?> nothing.<br>
<?php
/*
echo "This is a problem."; /* This comment will cause a problem
?>
*/
Tipos
O PHP suporta os seguintes tipos: números com ponto flutuante, inteiros, strings,
arrays e objetos. O tipo de variável é geralmente determinado pelo contexto da variável em vez
de ser definido explicitamen¬te pelo programador. É importante lembrar disto ao desenvolver
aplicações PHP, pois a conversão de tipos implícita pode causar erros incomuns (e difíceis de
encontrar). Por exemplo, a seguinte instrução é válida e resultará no número 9 sendo exibido:
<?php
$int1 = 523; // decimal
$int2 = -523; // negative decimal
$int3 = 01013; // octal representation of 523
$int4 = 0x20B; // hex representation of 523
$floatl = 523.197; // standard float notation
$float2 = 5.23197e2; // scientific float notation. /* Print all the
numbers. Displays "523, -523, 523, 523, 523.197, 523.197". */
print( "$intl, $int2, $int3, $int4, $floatl, $float2<br>" ); ?>
print( "$aStr4<br>" );
$aStr5 = 'Don\'t evaluate $aStr2';
// $aStr5 = "Don't evaluate $aStr2" print( "$aStrS<br>" );
// prints "My name is Thatcher and My name is $aStr2";
print( "$aStr3" . " and " . "$aStr4" );
?>
Strings
As strings no PHP são delimitadas por aspas duplas (") ou aspas simples ('). A
diferença é como a string é interpretada. Se uma string for delimitada por aspas duplas, as
variáveis na string serão expandidas. Você poderá usar o caractere de barra invertida (\) nas
strings com aspas duplas para especificar caracteres especiais (seqüências de escape), como
mostrado na Tabela 2.1.
Tabela 2.1 As seqüências de escape nas strings com aspas duplas
Seqüência de caracteres Significado
\n nova linha
\r retorno automático
\t tabulação horizontal
\\ barra invertida
\” aspa dupla
\$ cifrão
As strings com aspas simples não expandem as variáveis internas. E mais, as
únicas seqüências de escape válidas nas strings com aspas simples são as seqüências de
escape de barra invertida (\\) e aspa simples (\'). Essas seqüências de escape permitem que
aspas simples e barras invertidas estejam presentes nas strings com aspas simples. Você
poderá concatenar as strings usando o operador ponto (.). A seção sobre os operadores, neste
capítulo, tem mais informações sobre esse procedimento. Parecidos com a linguagem de
programação C, os caracteres individuais em uma string podem ser acessados tratando a string
como um array de caracteres.
Listagem 5: Exemplos de string
<?php
$aStrl = "This is a simple string.";
print ("$aStrl<br>" );
$aStr2 = "Thatcher";
print( "$aStr2<br>" );
$aStr3 = "My name is $aStr2";
// $aStr3 = "My name is Thatcher"
print( "$aStr3<br>" );
$aStr4 = "My name is \$aStr2";
// $aStr4 = "My name is $aStr2"
print ( "$aStr4<br>" );
$aStr5 = ‘Don\’t evaluate $sStr2’;
// $aStr5 = "Don\’t evaluate $sStr2";
print ( "$aStr5<br>" );
// prints "My Name is Tatcher and my name is $sStr2"
print ("$aStr3"." And "."$aStr4" );
$aNotNumber = "abc";
$aVar4 = $aNotNumber * 1; // attempt to cast to number, returns 0
print( "\$aVar4 = $aVar4, type = " . gettype( $aVar4 ) . "<br>" );
Variáveis e constantes
As variáveis do PHP são atribuídas pelo cifrão (S), seguido de seu nome.Todos os
nomes das variáveis levam em conta as letras maiúsculas e minúsculas. Os nomes de variáveis
válidos têm que começar com uma letra ou sublinhado seguido de um número de letras,
números ou sublinhados. Para os nomes das variáveis, uma letra é considerada como sendo a-
z, A-Z ou qualquer caractere ASCII na faixa 127255 (0x7f - 0xff).
As variáveis podem ser atribuídas pelo valor ou pela referência. Quando uma
variável é atribuída pelo valor, o valor inteiro da expressão original é atribuído á variável de
destino. Depois da atribuição, a variável original é independente, portanto uma alteração em
uma variável não afetará a outra.
Quando uma variável é atribuída pela referência, a nova variável simplesmente
refere-se à variável original. As alterações feitas em qualquer variável serão refletidas na
outra. Para fazer uma atribuição pela referência, simplesmente anexe o símbolo ampersand (&)
ao nome da variável.
Variáveis predefinidas
Além das variáveis definidas pelo usuário, o PHP fornece diversas variáveis
predefinidas para qualquer script no qual são executadas. A lista de variáveis disponível
depende do contexto do script (por exemplo, se estiver sendo executado de maneira
independente ou através de um servidor Web), da versão do PHP e do tipo do servidor Web (se
presente). Como a lista de variáveis predefinidas depende desses fatores, algumas variáveis
poderão não estar disponíveis em todos os casos. O PHP também gera variáveis para cookies e
formulários enviados através de POST ou GET.
As seguintes seções exibem um subconjunto de variáveis disponíveis ao se
executar o PHP4 no Apache 1.3.11. Use a função phpinfo() para listar as variáveis
disponíveis em seu ambiente de desenvolvimento. Você poderá encontrar um conjunto mais
completo de variáveis predefinidas na seção de referência no final deste livro. ATabela 2.2
mostra um subconjunto de variáveis de ambientes Apache; a Tabela 2.3 mostra um
subconjunto das variáveis-ambientes do sistema e a Tabela 2.4 mostra um subconjunto das
variáveis geradas pelo PHP. Os operadores aritméticos são mostrados na Tabela 2.5, os
operadores de bitwise na Tabela 2.6 e os operadores de comparação na Tabela 2.7. A Tabela
2.8 mostra os operadores de aumento/diminuição e a Tabela 2.9 exibe os operadores lógicos.
Finalmente, a Tabela 2.10 mostra os operadores de atribuição.
Tabela 2.2 Um subconjunto das variáveis-ambientes Apache
Variável Definição
Escopo da variável
Em geral, todas as variáveis PHP têm um único escopo. Esse escopo se estende
sobre os arquivos incluídos e requeridos. Nas funções definidas pelo usuário, o escopo da
função local é introduzido. As variáveis globais terão que ser declaradas como globais dentro de
uma função se forem usadas na mesma. Finalmente, o PHP suporta as variáveis estáticas nas
funções para permitir que as variáveis locais da função mantenham seus valores entre as
chamadas.
Escopo de uma variável é o termo técnico para as regras quando um nome
(digamos, uma variável ou uma função) têm o mesmo valor em dois lugares diferentes. Toda a
variável em PHP que esteja fora de uma função possui o escopo global e estende-o durante
toda uma "linha dada" da execução. Ou seja, se você atribuir a uma variável um determinado
valor no início de um script em PHP, seu valor se manterá durante o resto do script; e se não
for atribuído novamente outro valor, permanecerá o mesmo em toda a execução (exceto dentro
do corpo das funções). A atribuição de uma variável não afetará o valor das variáveis com o
mesmo nome em outros arquivos PHP nem não o nivelará em usos repetidos do mesmo
arquivo. Por exemplo, digamos que você tem dois arquivos, startup.php e
next_thing.php, que são visitados tipicamente nessa ordem por um usuário. Digamos
também que perto do topo do código do arquivo startup.php, você tem a linha: $username
= "Jane Q. User"; a qual é executada somente em determinadas situações. Agora, você
pode esperar que, após o ajuste da variável em startup.php, ela estaria pré-ajustada
também automaticamente quando o usuário tiver visitado next_thing.php, mas isto não
acontece. Cada vez que uma página PHP é executada, ele associa e reassocia variáveis
enquanto está sendo executado, e aquelas variáveis desaparecem no fim da execução da
página. As atribuições das variáveis em um arquivo não afetam variáveis do mesmo nome em
um arquivo diferente. Obviamente, há muitas situações em que você gostaria de segurar a
informação por mais tempo. Para casos deste tipo, existem outras soluções que veremos mais
tarde.
Constantes
O PHP fornece várias constantes predefinidas e permite a definição de constantes
adicionais. Você poderá encontrar a lista completa de constantes predefinidas na seção de
referência no final deste livro. Para definir novas constantes, use a função define(). Note que as
constantes PHP não são macros do tipo C e, portanto. têm que ser valores escalares.
$aVal = ( 1 === "1" )?"The values are identical" : "The values are not
identical";
while
O tipo mais simples de loop no PHP, o loop while comporta-se como no C e em
outras linguagens de alto nível.
do..while
Embora parecido com o loop while, o loop do..while verifica a condição do
loop depois da primeira execução das instruções de loop. Isto assegura que as instruções de
loop serão executadas pelo menos uma vez.
for
O loop for é a instrução de loop mais complexa no PHP, mas é sintaticamente
equivalente à Instrução for da linguagem C. A sintaxe é a seguinte:
Exibirá no navegador:
1, 1, 1
2, 3, 4
3, 5, 7
foreach
A instrução foreach é um mecanismo conveniente para fazer uma iteração nos
arrays. O Perl, o VBScript e outras linguagens suportam uma construção parecida. O PHP
suporta duas sintaxes:
A primeira forma faz um loop no array dado (array_expr). Para cada iteração do
loop, o valor do elemento do array atual é atribuído à variável (value_varname) e o ponteiro
do array é avançado. A segunda forma faz o mesmo, mas atribui adicionalmente a chave do
elemento do array atual à variável key_varname.
switch
A instrução switch simplifica a avaliação de diversas condições. É geralmente
usada para substituir uma instrução if..elseif..else complexa quando o código contém
diversas ocorrências de elseif. A sintaxe e implementação da instrução switch no PHP é
igual no C. Uma ótima vantagem da implementação PHP é que você pode usar urna string
como a expressão switch. Para os programadores Delphi/Pascal, uma das coisas mais difíceis a
lembrar em uma instrução switch do tipo C é a instrução break. Às vezes, omitir a instrução
break em um switch é conveniente. Os seguintes exemplos mostram muitos usos comuns da
instrução switch.
switch(expression)
{
case value-1:
statement-1
statement-2
...
[break;]
case value-2:
statement-3
statement-4
...
[break;]
...
[default:
default-statement]
}
break
O comando break cancela a execução do comando for, foreach, while, do-while ou
switch atual.
O comando break aceita um argumento numérico opcional que diz a ele quantas
estruturas aninhadas englobadas devem ser quebradas.
<?php
do {
// some code
if ($condition)
break;
// some more code
} while (FALSE);
?>
ou
<?php
switch ($dummy) {
default:
// some code
if ($condition)
break;
// some more code
}
?>
continue
O comando continue é usado dentro de estruturas de loops para saltar o resto
da iteração do loop atual e continuar a execução na avaliação e no início da próxima iteração.
Nota: Note que no PHP a instrução switch é considerada uma estrutura de loop
quando relacionada ao comando continue.
O comando continue aceita um argumento numérico opcional que diz a ele de
quantos níveis de loops aninhados ele deve saltar até o fim.
$i = 0;
while ($i++ < 5) {
echo "Fora<br />\n";
while (1) {
echo " Meio<br />\n";
while (1) {
echo " Dentro<br />\n";
continue 3;
}
echo "Isto nunca será exibido.<br />\n";
}
echo "Nem isso.<br />\n";
}
?>
include e require
O PHP fornece dois mecanismos para incluir arquivos externos: include() e
require(). A instrução include() é uma função PHP comum; require() é uma
construção da linguagem especial e tem algumas restrições em seu uso. Em ambos os casos,
sempre que um arquivo é incluído usando qualquer uma das instruções, a análise sai do modo
PHP e vai para o modo HTML no início do arquivo de destino. O analista retoma o modo PHP no
final do arquivo. Isto significa que qualquer código no arquivo de destino que deve ser
executado como um script PHP terá que ser incluído nas tags inicial e final PHP válidas.
A função include() é avaliada sempre que encontrada e pode estar contida em
loops ou instruções condicionais. Isto significa que os arquivos podem ser incluídos
condicionalmente ou os grupos de arquivos podem ser incluídos usando um loop. A função
include() também permite que o arquivo de destino especifique um valor de retorno e possa
atribuir esse valor a uma variável. O processamento de um arquivo em uma instrução
include() terminará se uma instrução de retorno for encontrada.
A instrução require() é diferente da instrução include(), no sentido de que não
está sujeita a nenhuma estrutura de controle. Isto significa que os arquivos não podem ser
incluídos condicionalmente usando require(). A instrução será executada uma vez se
aparecer em um loop ou mesmo se aparecer em uma instrução condicional que seja avaliada
como falsa. Outra diferença é que um arquivo em uma instrução require() não retornará um
valor.Tentar retornar um valor em uma instrução require() causará um erro de análise.
Funções
O PHP suporta a criação de funções definidas pelo usuário. As funções não têm
que ser declaradas antes de serem referidas no PHP4. O PHP suporta os seguintes recursos em
relação às funções: nomes dafunção variáveis, número de argumentos variável, argumentos
defaults, argumentos transmitidos pe o valor e argumentos transmitidos pela referência. Em um
bloco da função, o PHP permite que qualquer código PHP seja executado, inclusive o código
que chama outras funções. Essa capacidade permite que o PHP forneça funções recursivas. O
PHP não suporia a sobrecarga de funções ou a capacidace de indefinir ou redefinir previamente
as funções definidas.
Por default, os argumentos são transmitidos para as funções pelo valor. Para
transmitir um valor pela referência, prefixe o nome da variável com um símbolo &. Ao se usar
argumentos defaults, qualquer argumento default terá que estar à direita de todos os
argumentos não defaults. Para obter listas de argumentos com comprimento variável, as
funções func_num_args(), func_get_arg() e func_get_args() estão disponíveis
para recuperar informações sobre os argumentos transmitidos. Os seguintes exemplos mostram
o uso geral das funções no PHP.
// passed by reference