Fabyo 66 Denunciar post Postado Abril 4, 2005 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 <?php /* Teste de arquivo carregado pelo usuário */ function is_uploaded_file($filename) { if (!$tmp_file = get_cfg_var('upload_tmp_dir')) { $tmp_file = dirname(tempnam('', '')); } $tmp_file .= '/' . basename($filename); /* Pode haver uma barra no final do php.ini... */ return (ereg_replace('/+', '/', $tmp_file) == $filename); } /* Utilize isto se por acaso você não tiver * move_uploaded_file() em versões antigas: */ if (is_uploaded_file($HTTP_POST_FILES['arquivo'])) { [b]copy[/b]($HTTP_POST_FILES['arquivo'], "/place/to/put/uploaded/file"); } else { echo "Possível ataque de carregamento de arquivo: filename '$HTTP_POST_FILES[arquivo]'."; } ?> 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_OKValor: 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 if( odbc_error() == true) { echo odbc_errormsg(); exit(); } Listando os arquivos do banco PHP $execute = odbc_exec($con, "SELECT * from tabela"); odbc_close($con); while($coluna = odbc_fetch_array($execute)){ $campo = $coluna["campo"]; echo "$campo<br>"; } Salvando no banco de dados PHP $nome = $_POST["nome"]; $senha = $_POST["senha"]; $execute = odbc_exec($con,"INSERT INTO tabela (nome, senha) VALUES ('$nome', '$senha')"); odbc_close($con); Excluindo um dado do banco PHP $id = $_GET["id"]; $execute = odbc_exec($conexao,"Delete from tabela where id = $id"); 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 <?phpecho floor(4.3); // 4 echo floor(9.999); // 9 ?> round -- Arredonda um número <?phpecho 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 <? echo rand(0,9); ?> 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
FuN_4_FuN 0 Denunciar post Postado Abril 5, 2005 Muito bom cara!!! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Abril 8, 2005 Muito bom esse módulo. Uma sugestão é com relação aos exemplos das funções matemáticas. De abs em diante, seria melhor deixar cada exemplo em uma linha. Daquele jeito está confuso de entender. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Abril 8, 2005 ja arrumei la Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Abril 9, 2005 Agora ficou bom, ficou legível. ;) Compartilhar este post Link para o post Compartilhar em outros sites
rsddaros 0 Denunciar post Postado Abril 26, 2005 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
Fabyo 66 Denunciar post Postado Abril 27, 2005 Coloca o path real do banco de dados exemplo: DBQ=c:/root/teste.mdb Compartilhar este post Link para o post Compartilhar em outros sites
ramone6025 0 Denunciar post Postado Abril 28, 2005 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
eduardosobrinho 0 Denunciar post Postado Julho 25, 2005 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
pcdesign 0 Denunciar post Postado Julho 16, 2006 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
Milton Júnior 0 Denunciar post Postado Agosto 16, 2006 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