PHP (PHP Hypertext Preprocessor) André Tavares da Silva andre.silva@udesc.br
Datas No PHP a função date() é usada para formatar um tempo ou data. string date(string $format [,int $timestamp]) Ex.: echo date("d/m/y"); $amanha = mktime(0,0,0,date("m"),date("d")+1,date("y")); echo "Amanhã será ".date("y-m-d", $amanha); http://br.php.net/manual/pt_br/function.date.php
Includes As funções include() ou require() inserem o conteúdo de um arquivo PHP dentro de outro. As duas funções são idênticas exceto na forma como elas lidam com erros. A função include() gera um aviso (warning) e a página continua a sua execução. Já a função require() gera um erro fatal e a execução do para naquele ponto. <?php include("cabecalho.php");?>
Manipulação de Arquivos A função fopen() abre um arquivo: $file = fopen("arquivo.txt", "r"); A função fclose() fecha um arquivo e feof()checa se o apontador de arquivo está no final. <?php $file = fopen("arquivo.txt","r"); if (feof($file)) echo "End of file"; fclose($file);?>
Manipulação de Arquivos A função fgets() lê uma linha de um arquivo e fgetc() lê um único caractere. <?php $file = fopen("arquivo.txt","r"); if (feof($file)) echo fgets($file); fclose($file);?>
Upload de Arquivos Exemplo de formulário: <form action="upload_file.php" method="post" enctype="multipart/form-data"> <label for="file">arquivo:</label> <input type="file" name="file" id="file" /> <input type="submit" name="submit" value="enviar" /> </form>
Manipulação de Arquivos O array $_FILES permite acessar os arquivos enviados de um computador cliente para o servidor. A primeira chave do array é o nome do campo no formulário que enviou o arquivo. A segunda chave pode ser "name", "type", "size", "tmp_name" ou "error": $_FILES["file"]["name"] - Nome do arquivo enviado. $_FILES["file"]["type"] - Tipo do arquivo enviado. $_FILES["file"]["size"] - Tamanho em bytes do arquivo. $_FILES["file"]["tmp_name"] - Nome da cópia temporária do arquivo no servidor. $_FILES["file"]["error"] - Código de erro gerado durante o processo de envio.
Manipulação de Arquivos <?php if ($_FILES["file"]["error"] > 0) { echo "Erro: ". $_FILES["file"]["error"]."<br>"; } else { echo "Arquivo enviado: ". $_FILES["file"]["name"]. "<br>"; echo "Tipo: ". $_FILES["file"]["type"]."<br>"; echo "Tamanho: ". ($_FILES["file"]["size"]/1024)." Kb<br>"; echo "Guardado em: ". $_FILES["file"]["tmp_name"]; }?>
Manipulação de Arquivos Exemplo de restrição a upload de arquivos.gif e.jpg de até 30KB: if ((($_FILES["file"]["type"] == "image/gif") ($_FILES["file"]["type"] == "image/jpeg") ($_FILES["file"]["type"] =="image/pjpeg")) && ($_FILES["file"]["size"] < 30000)) {
Manipulação de Arquivos Salvando arquivo em uma pasta arquivos : if(file_exists("arquivos/". $_FILES["file"]["name"])) { } echo $_FILES["file"]["name"]. " já existe."; else { } move_uploaded_file( $_FILES["file"]["tmp_name"], "arquivos/".$_files["file"]["name"]); echo "Guardado em: arquivos/". $_FILES["file"]["name"];
Enviando e-mail A função mail(para, assunto, mensagem, cabeçalhos, parâmetros) envia e-mails: if (isset($_request['email'])) { } $email = $_REQUEST['email'] ; $assunto = $_REQUEST['assunto'] ; $mensagem = $_REQUEST['mensagem'] ; mail("fulano@empresa.com", "Assunto: $assunto", $mensagem, "From: $email" ); echo "Obrigado pela sua mensagem!";
Enviando e-mail A função mail(para, assunto, mensagem, cabeçalhos, parâmetros) envia e-mails: if (isset($_request['email'])) { } $email = $_REQUEST['email'] ; $assunto = $_REQUEST['assunto'] ; $mensagem = $_REQUEST['mensagem'] ; mail("fulano@empresa.com", "Assunto: $assunto", $mensagem, "From: $email" ); echo "Obrigado pela sua mensagem!"; Ver e-mail injection na aula sobre segurança
Tratamento de Exceções O código para lidar com a exceção deve incluir: Try - Uma função que usa uma exceção deve estar dentro de um bloco "try". Se a exceção não acontece, o código irá continuar normalmente. Throw - Esta é a forma como você lança uma exceção. Cada "throw" deve ter pelo menos um "catch". Catch - Um bloco "catch" recebe a exceção que é um objeto contendo informações sobre a exceção.
Tratamento de Exceções O que o PHP suporta além do básico try-catch: Criar classes de exceções customizadas extendendo (por herança) a classe Exception podendo usar métodos como getline(), getfile() e getmessage(); Possibilidade de múltiplas exceções para o mesmo try; É possível lançar uma exceção uma segunda vez dentro do bloco catch. Neste caso, quando uma exceção é lançada, é possível tratá-la de forma diferente do padrão. Um exemplo é relançando uma exceção com uma mensagem de erro mais amigável para o usuário.
Tratamento de Exceções O que o PHP suporta além do básico try-catch: Criar classes de exceções customizadas extendendo (por herança) a classe Exception podendo usar métodos como getline(), getfile() e getmessage(); Possibilidade de múltiplas exceções para o mesmo try; É possível lançar uma exceção uma segunda vez dentro do bloco catch. Neste caso, quando uma exceção é lançada, é possível tratá-la de forma diferente do padrão. Um exemplo é relançando uma exceção com uma mensagem de erro mais amigável para o usuário.
Filtros em PHP Um filtro no PHP é usado para falidar e filtrar dados vindos de fontes inseguras: dados de formulário, cookies, dados de serviços externos, variáveis do servidor, resultados de consultas a bancos de dados. Filtragem de entradas é um dos mais sérios problemas de segurança.
Filtros em PHP filter_var() - Filtra uma única variável com um filtro especificado. filter_var_array() - Filtra várias variáveis com o mesmo ou diferentes filtros filter_input() - Recebe uma variável de input e a filtra. filter_input_array() - Recebe diversas variáveis e as filtra com o mesmo ou diferentes filtros.
Filtros em PHP Existem dois tipos de filtros: Filtros de validação: usados para validar a entrada de usuário, retornando o tipo esperado no sucesso ou FALSE na falha Filtros de limpeza: usados para permitir ou não determinados caracteres em uma string. Sempre retorna a string.
Filtros em PHP - validação Opções e flags são usados para adicionar opções de filtragem nos diferentes filtros. Diferentes filtros têm diferentes opções e flags. Exemplo para validação de número inteiro usando a função filter_var() e as opções "min_range" e "max_range": <?php $var = 300; $int_options = array("options"=>array("min_range"=>0, "max_range"=>256)); if(!filter_var($var,filter_validate_int,$int_options)) { echo("número inteiro válido"); } else { echo("número inteiro inválido"); }?>
Filtros em PHP - limpeza Para limpar uma URL enviada de um formulário: <?php if(!filter_has_var(input_post, "url")) { echo("input type does not exist"); } else { $url = filter_input(input_post, "url", FILTER_SANITIZE_URL); }?>
Filtros em PHP múltiplas entradas <?php $filters = array( "nome" => array("filter"=>filter_sanitize_string), "idade"=> array("filter"=>filter_validate_int, "options"=>array("min_range"=>1, "max_range"=>120)), "email"=> FILTER_VALIDATE_EMAIL); $result = filter_input_array(input_get, $filters); if (!$result["idade"]) { echo("a idade deve estar entre 1 and 120 anos.<br />"); } else if(!$result["email"]) { echo("e-mail não é válido.<br />"); } else { echo("entrada do usuário é válida"); }?>
FILTER_CALLBACK É possível criar uma função e usá-la como filtro através de FILTER_CALLBACK, tendo ainda mais controle sobre a filtragem de dados. Associa-se a função ao elemento "options" em um array. No exemplo, os espaços em branco são substituídos por "_": <?php function convertspace($string) { return str_replace(" ", "_", $string); } $string = "OTES02 Aula15 PHP cont"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertspace"));?>
Tratamento de erros A função exit([string $status]) termina a execução da página, exibindo o valor de $status. die() é um apelido para a exit(). <?php if(!file_exists("hello.txt")) die("arquivo não encontrado"); else $file=fopen("welcome.txt","r");?> <?php $file = fopen("hello.txt", 'r') or exit("hello.txt não encontrado");?>
Tratamento de erros Também é possível fazer em PHP: Criar um tratador de erros customizado error_function(error_level,error_message [,error_file[,error_line[,error_context]]]) Modificar o tratador de erros para funcionar para apenas alguns erros a fim de tratá-los diferentemente; Enviar log de erros para um arquivo especificado ou para um destino remoto (e-mail, por exemplo), usando a função error_log(). O padrão do PHP é enviar o log de erros para o sistema do servidor ou para um arquivo configurado no arquivo "php.ini".