Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fabyo

Módulo 06

Recommended Posts

Curso de PHP online

 

Modulo 6

 

Introdução

 

o Upload de Arquivos

o Conexão com banco de dados acess

o Funções matemáticas

o Imap

 

 

Upload de Arquivos

 

Upload de arquivos com o método POST

O PHP é capaz de receber o upload de qualquer browser que siga a norma RFC-1867 (o que inclui Netscape Navigator 3 ou posterior,

Microsoft Internet Explorer 3 com um patch da Microsoft, ou posterior sem patch). Isto permite que se faça o upload de arquivos de texto

e binários. Com as funções de autenticação e manipulação de arquivos do PHP, você tem o controle completo de quem pode fazer o upload de

arquivo e o que fazer com o arquivo após seu upload.

 

Tenha certeza que seu formulário de upload de arquivo tenha enctype="multipart/form-data" em outro caso o upload do arquivo não irá funcionar.

 

$_FILES['arquivo']['name']

O nome original do arquivo no computador do usuário.

 

$_FILES['arquivo']['type']

O tipo mime do arquivo, se o browser deu esta informação. Um exemplo pode ser "image/gif".

 

$_FILES['arquivo']['size']

O tamanho, em bytes, do arquivo.

 

$_FILES['arquivo']['tmp_name']

O nome temporário do arquivo, como foi guardado no servidor.

 

$_FILES['arquivo']['error']

 

is_uploaded_file

 

is_uploaded_file -- Diz se o arquivo foi enviado via HTTP POST

 

bool is_uploaded_file ( string filename)

 

Retorna TRUE se o arquivo com o nome filename foi uploaded via HTTP POST. Isto é útil para ter certeza que um usuário malicioso, não está tentando

confundir o script em trabalhar em arquivos que não deve estar trabalhando --- por exemplo, /etc/passwd.

 

Este tipo de confirmação é importante principalmente se existe alguma chance que qualquer coisa feita com os arquivos carregados poderiam revelar

o seu conteúdo para o usuário, ou mesmo para outros usuários no mesmo sistema.

 

is_uploaded_file() está disponível somente em versões do PHP 3 depois da 3.0.16 e em versões do PHP 4 posteriores a 4.0.2. Se você ainda está utilizando

uma versão anterior, você pode utilizar o seguinte código para se proteger:

 

Nota: O exemplo seguinte não funcionará em versões do PHP posteriores a 4.0.2. Isto depende de uma funcionalidade interna do PHP que mudou depois dessa versão.

 

PHP
  1. <?php
  2. /* Teste de arquivo carregado pelo usuário */
  3. function is_uploaded_file($filename) {
  4. if (!$tmp_file = get_cfg_var('upload_tmp_dir')) {
  5. $tmp_file = dirname(tempnam('', ''));
  6. }
  7. $tmp_file .= '/' . basename($filename);
  8. /* Pode haver uma barra no final do php.ini... */
  9. return (ereg_replace('/+', '/', $tmp_file) == $filename);
  10. }

  11. /* Utilize isto se por acaso você não tiver
  12. * move_uploaded_file() em versões antigas: */
  13. if (is_uploaded_file($HTTP_POST_FILES['arquivo'])) {
  14. [b]copy[/b]($HTTP_POST_FILES['arquivo'], "/place/to/put/uploaded/file");
  15. } else {
  16. echo "Possível ataque de carregamento de arquivo: filename '$HTTP_POST_FILES[arquivo]'.";
  17. }
  18. ?>

 

move_uploaded_file

(PHP 4 >= 4.0.3, PHP 5)

 

move_uploaded_file -- Move um arquivo carregado para uma nova localização

Descrição

bool move_uploaded_file ( string nomedoarquivo, string destino)

 

Esta função primeiro checa o arquivo informado nomedoarquivo é um arquivo válido uploadeado (significando que ele foi carregado pelo mecanismo do

PHP de HTTP POST). Se o arquivo é válido, ele será movido para o nomedoarquivo dado pelo destino.

 

Se nomedoarquivo não é um arquivo carregado válido, então não haverá nenhuma ação e move_uploaded_file() irá retornar FALSE.

 

Se nomedoarquivo é um arquivo uploadeado válido e não pode ser movido por alguma razão, nenhuma ação irá ocorrer, e move_uploaded_file() irá retornar FALSE.

Adicionalmente, um aviso será emitido.

 

Este tipo de confirmação é importante principalmente se existe alguma chance que qualquer coisa feita com os arquivos carregados poderem revelar o seu

conteúdo para o usuário, ou mesmo para outros usuários no mesmo sistema.

 

Nota: Quando o safe-mode está ativo, o PHP verifica se o(s) arquivo(s) e/ou diretório(s) que serão afetados por esta operação tem o mesmo UID (proprietário) do

script que está sendo executado.

 

Nota: move_uploaded_file() não é afetado pelas restrições de UIN normais do safe mode. Isto não é inseguro porque move_uploaded_file() somente opera sobre arquivos

carregados pelo PHP.

 

 

Atenção

Se o arquivo destino já existir, então ele será sobrescrito.

 

 

Veja também is_uploaded_file() e a seção Manipulando o upload de arquivos para um exemplo de utilização desta função.

 

 

Explicação das mensagens de erro

Desde o PHP 4.2.0, PHP retorna um código de erro apropriado na array do arquivo. O código de erro pode ser encontrado em ['error'] na array que é criada durante o

upload do arquivo. Em outras palavras, o erro deve ser encontrado em $_FILES['arquivo']['error'].

 

Tratamentos de Erros

 

UPLOAD_ERR_OK

Valor: 0; não houve erro, o upload foi bem sucedido.

UPLOAD_ERR_INI_SIZE

Valor 1; O arquivo no upload é maior do que o limite definido em upload_max_filesize no php.ini.

UPLOAD_ERR_FORM_SIZE

Valor: 2; O arquivo ultrapassa o limite de tamanho em MAX_FILE_SIZE que foi especificado no formulário HTML.

UPLOAD_ERR_PARTIAL

Valor: 3; o upload do arquivo foi feito parcialmente.

UPLOAD_ERR_NO_FILE

Valor: 4; Não foi feito o upload do arquivo.

Nota: Estas tornaram-se constantes no PHP 4.3.0

 

Variáveis de upload de arquivos HTTP: $_FILES

Nota: Introduzida na versão 4.1.0. Em versões anteriores, use $HTTP_POST_FILES.

 

Contém um array associativo dos itens carregador no script atual através do método HTTP POST.

 

Esta é uma variável 'superglobal', ou automaticamente global. Isto significa que ela é disponível em todos os escopos (níveis) de um script. Você não precisa fazer

um global $_FILES; para pode acessá-la dentro de funções ou métodos, como era necessário com $HTTP_FILES_VARS.

 

Exemplo de um upload:

 

<html>

<head>

<title>Upload</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body>

<form action="upload.php" method="post" enctype="multipart/form-data" name="form1">

<input type="file" name="arquivo">

<input type="submit" name="Submit" value="Enviar">

</form>

</body>

</html>

 

upload.php

 

<?

//Fabyo Guimaraes

class Upload

{

var $arquivo = "";

//array com os codigos dos erros de upload

var $erro = array ( "0" => "upload execultado com sucesso!",

"1" => "O arquivo é maior que o permitido pelo Servidor",

"2" => "O arquivo é maior que o permitido pelo formulario",

"3" => "O upload do arquivo foi feito parcialmente",

"4" => "Não foi feito o upload do arquivo"

);

//função que verifica se o arquivo foi enviado, e se obteve sucesso returna true e cria a variavel para ser manipulado

function Verifica_Arquivo()

{

$this->arquivo = isset($_FILES['arquivo']) ? $_FILES['arquivo'] : FALSE;

return is_uploaded_file($this->arquivo['tmp_name']) ? true : false;

}

 

//função que envia o arquivo para o servidor se nao existir a pasta no servidor ele cria obs: linux usar chmod

function Envia_Arquivo()

{

// se o arquivo foi enviado corretamente ele envia

if($this->Verifica_Arquivo() == true)

{ set_time_limit(0);

$diretorio = "pasta/";

if(!file_exists($diretorio))

{

mkdir($diretorio);

}

//se ja existir ele renomeia o arquivo novo para nao sobrescrever o existente

while ( file_exists ( $diretorio.$this->arquivo['name'] ))

{

$this->arquivo['name'] = preg_replace ( "/^(.+?)(_?)(\d*)(\.[^.]+)?$/e", "'\$1_'.(\$3+1).'\$4'", $this->arquivo['name']);

}

move_uploaded_file($this->arquivo['tmp_name'], $diretorio . $this->arquivo['name']);

echo "<span style=\"color: white; border: solid 1px; background: blue;\">".$this->erro[$this->arquivo['error']]."</span>";

}

se o arquivo nao foi enviado ou tenha dado algum erro ele mostra a mensagem de erro

elseif( isset($this->arquivo['tmp_name']) )

{

echo "<span style=\"color: white; border: solid 1px; background: red;\">".$this->erro[$this->arquivo['error']]."</span>";

}

}

}

 

?>

 

Notem que essa classe cuida para obter sucesso no envio do arquivo ,mas ela não esta tratando do tipo(type) de arquivo

caso você queria enviar imagens para o servidor você pode limitar tamanho, dimensao da imagem e tipo de extensao

e se for arquivo você pode limitar a extensão só para o tipo que você quiser, caso tenha duvidas em como tratar o tipo

de arquivo só postar no forum

 

Conexão com banco de dados acess

 

Para conectar ao banco de dados acess você pode fazer assim:

 

odbc_connect("DRIVER=Microsoft Access Driver (*.mdb);DBQ=caminho do banco de dados", "usuario", "senha");

obs: nao precisa ter nenhum programa adicional para execultar o banco acess só o odbc

 

um exemplo :

 

//caso nao tenha nome e senha só deixar em branco

$con = @odbc_connect("DRIVER=Microsoft Access Driver (*.mdb);DBQ=C:/root/acess/banco.mdb;", "", "");

 

//testa se tiver algum erro sera mostrado a mensagem de erro

PHP
  1. if( odbc_error() == true)
  2. {
  3. echo odbc_errormsg();
  4. exit();
  5. }

 

Listando os arquivos do banco

PHP
  1. $execute = odbc_exec($con, "SELECT * from tabela");
  2. odbc_close($con);

  3. while($coluna = odbc_fetch_array($execute)){

  4. $campo = $coluna["campo"];

  5. echo "$campo<br>";

  6. }

 

Salvando no banco de dados

PHP
  1. $nome = $_POST["nome"];
  2. $senha = $_POST["senha"];

  3. $execute = odbc_exec($con,"INSERT INTO tabela (nome, senha) VALUES ('$nome', '$senha')");
  4. odbc_close($con);

 

Excluindo um dado do banco

PHP
  1. $id = $_GET["id"];

  2. $execute = odbc_exec($conexao,"Delete from tabela where id = $id");
  3. odbc_close($con);

 

Mais detalhes www.php.net/odbc

 

 

Funções matemáticas

 

abs

 

Retorna o valor Valor absoluto de um número.

Se o argumento número é do tipo float, o número retornado também é float

 

Exemplo:

 

<?php

$abs = abs(-4.2); // $abs = 4.2; (double/float)

$abs2 = abs(5); // $abs2 = 5; (inteiro)

$abs3 = abs(-5); // $abs3 = 5; (inteiro)

?>

 

floor -- Arredonda frações para baixo

 

<?php

echo floor(4.3); // 4

echo floor(9.999); // 9

?>

 

round -- Arredonda um número

 

<?php

echo round(3.4); // 3

echo round(3.5); // 4

echo round(3.6); // 4

echo round(3.6, 0); // 4

echo round(1.95583, 2); // 1.96

echo round(1241757, -3); // 1242000

echo round(5.045, 2); // 5.04

echo round(5.055, 2); // 5.06

?>

 

 

number_format -- Formata um número com os milhares agrupados

 

echo number_format( "1000.000", 2, ",", ".");

esse exemplo acima ira retornar 1.000,00

 

max -- Localiza o maior número

 

<?

echo max(1, 3, 5, 6, 7); // 7

echo max(array(2, 4, 5)); // 5

?>

 

min -- Localiza o menor número

 

<?

echo min(2, 3, 1, 6, 7); // 1

echo min(array(2, 4, 5)); // 2

?>

 

count -- Conta o número de elementos de uma variável

 

<?php

$a[0] = 1;

$a[1] = 3;

$a[2] = 5;

$result = count($a);

// $result == 3

 

$b[0] = 7;

$b[5] = 9;

$b[10] = 11;

$result = count($ B) ;

// $result == 3;

?>

 

sqrt -- Raiz quadrada

 

<?

echo sqrt(9); // 3

echo sqrt(10); // 3.16227766 ...

?>

 

rand -- Gera um número aleatório

 

PHP
  1. <?
  2. echo rand(0,9);
  3. ?>

 

Mais detalhes : www.php.net/ref.math.php

 

Imap

 

O que é IMAP?

O protocolo IMAP foi originalmente desenvolvido na Universidade de Stanford em 1986.

Trata-se de um método de acesso a mensagens eletrônicas armazenadas em um servidor local ou remoto.

IMAP quer dizer Internet Message Access Protocol [RFC 2060] e sua versão mais recente e' a IMAP4rev1 [RFC 2060]

 

descomente a linha do php.ini extension=php_imap.dll

 

obs: nesse exemplo nao tem suporte a MIME

Nesse exemplo ele faz:

 

tratamento de erros

ve quantos emails você tem

pega o assunto,remetente,data/hora e a mensagem

 

<?php

 

/* Fabyo Guimaraes

 

$servidor = "seu_servidor";

$usuario = "usuario";

$senha = "senha";

 

@ini_set('display_errors', '0');

$mbox = imap_open("{pop3.$servidor/pop3:110}", $usuario . "@" . $servidor, $senha , OP_HALFOPEN);

 

$erro[] = imap_last_error();

// testo se tem email no servidor

if ($erro[0] == "Mailbox is empty") {

echo "Nao tem nenhuma mensagem";

exit;

}

// verifico se esta certo o usuario e senha

elseif ($erro[0] == "POP3 connection broken in response") {

echo "Usuario ou a senha estao errados";

exit;

}

// testo se o servidor esta certo

elseif ($erro[0] == "Host not found (#11004): pop3.$servidor") {

echo "O servidor $servidor esta errado";

exit;

}

// se a $erro estiver vazia ele continua

if ($erro[0] == "") {

$numero_mensagens = imap_num_msg($mbox);

$numero_mens_nao_lidas = imap_num_recent($mbox);

 

if ($numero_mensagens == 1) {

echo "você tem $numero_mensagens mensagem";

} else {

echo "você tem $numero_mensagens mensagens";

}

 

echo "<br><br>";

 

for($i = 1;$i <= imap_num_msg($mbox);$i++) {

 

$headers = imap_header($mbox, $i);

$assunto = $headers->subject;

$message_id = $headers->message_id;

$toaddress = $headers->toaddress;

$to = $headers->to;

$remetente = $to[0]->personal;

$email_remetente = $to[0]->mailbox;

$servidor_remetente = $to[0]->host;

$data = $headers->date;

$data = strtotime($data);

$data = date("d/m/Y H:i:s", $data);

 

echo "Assunto = $assunto - Remetente = $email_remetente@$servidor_remetente Data = $data <a href=\"imap.php?id=$i\">Ler Mensagem</a><br>";

}

 

echo "<br>";

if (isset($_GET["id"])) {

$id = $_GET["id"];

 

$mensagem = imap_fetchbody($mbox, $id, 1);

echo nl2br(quoted_printable_dequote($mensagem));

}

 

imap_close($mbox);

}

 

?>

mais detalhes:

 

http://br.php.net/manual/en/ref.imap.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Escrevi esse codigo para acessar o bd access em um servidor remoto mas não deu certo será que poderia me ajudar?To procurando isso a mais de 3 dias mas não consigo e o cara do servidor falo que não é problema no servidor é sim na programação !!!Abraços...<?php$con = @odbc_connect("DRIVER=Microsoft Access Driver (*.mdb);DBQ=teste.mdb;", "", "") or die("Erro na conexão com o banco de dados. Por favor entre em contato com o adiministrador."); $sql = odbc_exec($con,"SELECT * FROM tb_teste"); $i=0; while(odbc_fetch_row($sql)) { $i++; echo odbc_result($sql,"id"); echo odbc_result($sql,"nome"); echo odbc_result($sql,"nick"); echo odbc_result($sql,"email"); echo odbc_result($sql,"website"); echo "<br>"; } ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando eu tento dar um:17: $filename = '../../images/'.$HTTP_POST_FILES['imagem']['name'];18: copy( $HTTP_POST_FILES['imagem'], $filename );aparece esse erro aqui... Warning: copy(Array): failed to open stream: No such file or directory in F:\apache2triad\htdocs\mambo\components\com_fp\sub_upload.php on line 18

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tendo um problema aqui que não consigo resolver. Criei um código simples para upload, mas não funciona. o código de erro retorna zero, mas o arquivo não é carregado, ou seja, nao passa pela condicao verdadeira do if. Abaixo envio o codigo dos dois forms:FORMULÁRIO upload.php:<form enctype="multipart/form-data" action="upload_ok.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="106883"> Enviar este arquivo: <input name="foto" type="file"> <input type="submit" value="Enviar Arquivo"></form>PÁGINA DESTINO upload_ok.php:<?php$diretorio = "imagens/";$arquivo = $_FILES['foto']['name'];} print "<pre>";if (move_uploaded_file($arquivo["tmp_name"], $diretorio.$arquivo)) { print "O arquivo é valido e foi carregado com sucesso. Aqui esta alguma informação:\n";} else { echo "caminho no servidor= " . getcwd() . "\n"; echo "diretorio + arquivo= " .$diretorio.$arquivo . "\n"; echo "erro= ". $_FILES['foto']['error']."\n"; print "Possivel ataque de upload!($ Aqui esta alguma informação:\n"; print_r($_FILES);}print "</pre>";?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi fabyo,Ja tentei de tudo mas não consegui exibir os registros.mue banco de dados esta na pasta C:/apache/htdocs/cursophp/cursophp.md e a pagina de acesso tambem(user.php).Se possível ja manda extraindo o resultado de dois campos(user,pw)valeu pela força que tem nos dado.<?php$con = @odbc_connect("DRIVER=Microsoft Access Driver (*.mdb);DBQ=C:/localhost/cursophp/cursophp.mdb","","");if (obdc_error()==true){echo obdc_errormsg();exit();}$execute = odbc_exec($con, "SELECT * from td_user");odbc_close($con);while($coluna = odbc_fetch_array($execute)){$campo = $coluna["user"];echo "$campo<br>";}?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parabéns, ficou muito bom! mas estou com uma dúvida sobre imap. Como faço pra habilitar a extensão php_imap.dll se não acho o php.ini no servidor? já entrei em todos os diretórios e até agora, nada! devo fazer o upload do php.ini pro diretorio www?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.