Enviar mensagem ao usuário trabalhando com as opções do php.ini
Veremos como enviar uma mensagem amigável de “Este arquivo excede o tamanho permitido” (ou algo parecido) quando se permite upload via POST de determinados arquivos na aplicação/site em PHP.
[ Hits: 2.687 ]
Por: Buckminster em 26/11/2024
<!DOCTYPE html> <html lang="pt-br" class="no-js"> <head> <title>Upload de Arquivos</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <!-- remove this if you use Modernizr --> <script> (function(e,t,n) { var r=e.querySelectorAll("html")[0];r.className=r.className.replace(/(^|\s)no-js(\s|$)/,"$1js$2"); }) (document,window,0); </script> <script>javascript:window.history.forward(0);</script> <script> if (window.history.replaceState) { window.history.replaceState(null, null, window.location.href); } </script> <style> #tudo{ margin-top:3%; alignment-adjust:middle; vertical-align:middle; text-align:center;/* "remédio" para o hack do IE */ } /* Esconde o input */ input[type='file'] { /*display: none;*/ width: 0; height: 0; opacity: 0; } /* Aparência que terá o seletor de arquivo */ label { background-color: #3498db; border-radius: 5px; color: #fff; cursor: pointer; margin: 10px; padding: 6px 20px; } #enviar_arquivo{ background-color:#00ff7f; border-color:#00ff7f; border-radius:5px; cursor: pointer; } </style> </head> <body> <div id="tudo" class="container">Upload de Arquivos<br>É permitido somente arquivo PDF com, no máximo, 2MB.<br>Arquivo PDF com texto e imagem, será lido somente o texto.<br><br> <!-- O tipo de encoding de dados, enctype, DEVE ser especificado abaixo --> <form id="form2" name="form2" enctype="multipart/form-data" action="upload.php" method="post"> <!--O input hidden com MAX_FILE_SIZE deve preceder o campo input file--> <input type="hidden" name="MAX_FILE_SIZE" value="2097152"><!-- Setar "upload_max_filesize" no php.ini --> <!-- O Nome do elemento input determina o nome da array $_FILES accept="application/pdf" --> <!--input type="file" name="arquivo" id="arquivo" accept="application/pdf,.pdf"--> <input type="file" name="arquivo" id="arquivo" class="inputfile" accept="application/pdf,.pdf"> <label for="arquivo"> <span>Selecione um arquivo</span> </label><br><br> <input type="submit" name="enviar_arquivo" id="enviar_arquivo" value="Enviar"> </form> </div> <!--Fim div tudo--> <script src="./customiza.js"></script> </body> </html>O arquivo customiza.js faz a troca dos dizeres Selecione um arquivo pelo nome do arquivo selecionado.
// Início 'use strict'; ;( function ( document, window, index ) { var inputs = document.querySelectorAll( '.inputfile' ); Array.prototype.forEach.call( inputs, function( input ) { var label = input.nextElementSibling, labelVal = label.innerHTML; input.addEventListener( 'change', function( e ) { var fileName = ''; if( this.files && this.files.length > 1 ) fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length ); else fileName = e.target.value.split( '\\' ).pop(); if( fileName ) label.querySelector( 'span' ).innerHTML = fileName; else label.innerHTML = labelVal; }); // Firefox bug fix input.addEventListener( 'focus', function(){ input.classList.add( 'has-focus' ); }); input.addEventListener( 'blur', function(){ input.classList.remove( 'has-focus' ); }); }); }( document, window, 0 )); //FimO arquivo upload.php faz o trabalho pesado.
<?php if(!isset($_SESSION) || (session_status() == PHP_SESSION_NONE) || (session_status() !== PHP_SESSION_ACTIVE) || (session_id() === "" )) { session_start(); } $_SESSION = array(); session_unset(); session_destroy(); //require_once 'D:/www/caminho/do/projetoMSG/pdfparser-master/pdfparser-master/alt_autoload.php'; //$uploaddir = 'D:/www/caminho/do/projetoMSG/upload/'; require_once '/var/www/html/projetoMSG/pdfparser-master/pdfparser-master/alt_autoload.php'; $uploaddir = '/home/caminho/do/projetoMSG/upload/'; //Sete os parâmetros 'post_max_size' e 'upload_max_filesize' com o mesmo valor no php.ini. //Recebe o dado necessário do formulário: $dados = filter_input(INPUT_SERVER,'CONTENT_LENGTH'); //$enviar = filter_input(INPUT_POST, 'enviar_arquivo', FILTER_UNSAFE_RAW); // //Função que converte string em bytes: function convertToBytes($string) { $unit = strtoupper(substr($string, -1)); $value = substr($string, 0, -1); switch($unit) { case 'K': return $value * 1024; case 'M': return $value * 1024 * 1024; case 'G': return $value * 1024 * 1024 * 1024; default: return $value; } } // Converte a string 'XM' (X é um número) do php.ini em bytes usando a função convertToBytes: $uploadmaximo = ini_get('upload_max_filesize'); $bytesup = convertToBytes($uploadmaximo); //$postmaximo = ini_get('post_max_size'); //$bytespost = convertToBytes($postmaximo); //Convertendo $dados para array: $value = (array)$dados; /*var_dump($_FILES['arquivo']['size']);*/ $arquivos = (!empty($_FILES['arquivo'])); switch($arquivos) { case (!empty($arquivos['size']) > (2097152)): //2MB echo "Este arquivo excede o tamanho de 2MB!"; break; } //var_dump($uploadmaximo); //var_dump($postmaximo).'<br>'; //var_dump($bytesup); //var_dump($value); //Selecionando o elemento desejado no array: //$element = (array_values($value)); //Verifica se a variável $value está vazia e envia para a página inicial caso o usuário der um refresh na página: if (empty($value[0])) { header("Location: index.html"); exit(); } //Verifica se o tamanho do arquivo é superior ao limite do php.ini e envia mensagem: if ($value[0] > $bytesup) { //echo "<p style='color: #f00;'>Este arquivo excede o tamanho de 2MB!</p>"; include_once 'index.html'; echo "<style> #tudo { animation:fadeInAnimation ease 2s; animation-iteration-count:1; animation-fill-mode:none; } @keyframes fadeInAnimation { 0% { opacity:0; } 50% { opacity:0; } 100% { opacity:1; } } .captcentro{ position:fixed; margin:0 auto; top:20.5%; left:50%; transform:translate(-50%, -50%); animation:hideAnimation 0s ease-in 4s; animation-fill-mode:forwards; border:2px solid #fff; padding:15px; background-color:#000000; border-radius:10px; font-size:20px; text-align:center; /*text-decoration:underline white;*/ } @keyframes hideAnimation { to { visibility:hidden; width:0; height:0; } } @media only screen and (max-width:576px) { .captcentro{ /*width:280px;*/ position:fixed; margin:0 auto; top:19.5%; left:50%; transform:translate(-50%, -50%); animation:hideAnimation 0s ease-in 4s; animation-fill-mode:forwards; border:2px solid #fff; padding:10px; background-color:#000000; border-radius:10px; font-size:16px; text-align:center; /*text-decoration:underline white;*/ } @keyframes hideAnimation { to { visibility:hidden; width:0; height:0; } } } </style>"; //header("Refresh: 0"); echo "<div class='captcentro'><span style='color:red; font-size:20px;'><b>O arquivo excede o tamanho de 2MB!</b></span></div>"; //header("Refresh: 0; url=pagina2.php"); exit(); } $arquivo = $_FILES['arquivo']; //var_dump($arquivo); //Verifica se o arquivo é PDF: if (($arquivo['type'] === '.pdf') or ($arquivo['type'] === 'application/pdf') or ($value[0]) === ($value)) { //Captura a exceção da classe Parser do PDFParser e envia mensagem amigável ao usuário: try { $parser = new \Smalot\PdfParser\Parser(); //var_dump($parser); //$pdf = $parser->parseFile($_FILES['arquivo']['tmp_name']); $pdf = $parser->parseContent(file_get_contents($_FILES['arquivo']['tmp_name'])); $text = $pdf->getText(); } catch (Exception $e) { //echo "<p style='color: #f00;'>Este arquivo está corrompido, vazio ou protegido!<br>Tente outro arquivo.</p>"; // $e->getMessage(), "\n"; include_once 'index.html'; echo "<style> #tudo { animation:fadeInAnimation ease 2s; animation-iteration-count:1; animation-fill-mode:none; } @keyframes fadeInAnimation { 0% { opacity:0; } 50% { opacity:0; } 100% { opacity:1; } } .captcentro{ position:fixed; margin:0 auto; top:20.5%; left:50%; transform:translate(-50%, -50%); animation:hideAnimation 0s ease-in 4s; animation-fill-mode: forwards; border:4px solid #ffffff; padding:15px; background-color:#ffff00; border-radius:10px; font-size:20px; text-align:center; /*text-decoration:underline white;*/ } @keyframes hideAnimation { to { visibility: hidden; width:0; height:0; } } @media only screen and (max-width:576px) { .captcentro{ /*width:280px;*/ position:fixed; margin:0 auto; top:19.5%; left:50%; transform:translate(-50%, -50%); animation:hideAnimation 0s ease-in 4s; animation-fill-mode:forwards; border:4px solid #ffffff; padding:10px; background-color:#ffff00; border-radius:10px; font-size:16px; text-align:center; /*text-decoration:underline white;*/ } @keyframes hideAnimation { to { visibility:hidden; width:0; height:0; } } } </style>"; echo "<div class='captcentro'><span style='color:red;'><b>O arquivo está corrompido, vazio ou protegido!</b></span></div>"; exit(); } //Verifica se o arquivo foi enviado por POST: if (is_uploaded_file($_FILES['arquivo']['tmp_name'])) { if (!is_dir($uploaddir)) { mkdir($uploaddir); } $uploadfile = $uploaddir . ($_FILES['arquivo']['name']); $parser = new \Smalot\PdfParser\Parser(); //var_dump($parser); //$pdf = $parser->parseFile($_FILES['arquivo']['tmp_name']); $pdf = $parser->parseContent(file_get_contents($_FILES['arquivo']['tmp_name'])); $text = $pdf->getText(); //echo $text; //Move o arquivo temporário para a pasta de destino: move_uploaded_file($_FILES['arquivo']['tmp_name'], $uploadfile); //echo "<p style='color: #f00;'>O arquivo ". $_FILES['arquivo']['name'] ." foi enviado com sucesso!</p>\n<br><br>"; require_once 'index.html'; echo "<style> #tudo { animation:fadeInAnimation ease 2s; animation-iteration-count:1; animation-fill-mode:none; } @keyframes fadeInAnimation { 0% { opacity:0; } 50% { opacity:0; } 100% { opacity:1; } } .captcentro{ position:fixed; margin:0 auto; top:20.5%; left:50%; transform:translate(-50%, -50%); animation:hideAnimation 0s ease-in 4s; animation-fill-mode:forwards; border:2px solid #ffffff; padding:15px; background-color:#ffd700; border-radius:10px; font-size:20px; text-align:center; /*text-decoration:underline white;*/ } @keyframes hideAnimation { to { visibility:hidden; width:0; height:0; } } @media only screen and (max-width:576px) { .captcentro{ /*width:280px;*/ position:fixed; margin:0 auto; top:19.5%; left:50%; transform:translate(-50%, -50%); animation:hideAnimation 0s ease-in 4s; animation-fill-mode:forwards; border:2px solid #ffffff; padding:10px; background-color:#ffd700; border-radius:10px; font-size:16px; text-align:center; /*text-decoration:underline white;*/ } @keyframes hideAnimation { to { visibility:hidden; width:0; height:0; } } } </style>"; echo "<div class='captcentro'><span style='color:red; font-size:20px;'><b>O arquivo ". $_FILES['arquivo']['name'] ." foi enviado com sucesso!</b></span></div>"; exit(); } exit(); } //Verifica se o tamanho do arquivo é menor ou igual ao limite do php.ini e exibe mensagem: if (($arquivo['size'] !== 0) or ($value[0]) === ($arquivo['size'])) { if (($arquivo['type'] !== '.pdf') or ($arquivo['type'] !== 'application/pdf')) { //echo "<p style='color: #f00;'>Este arquivo não é PDF!</p>"; include_once 'index.html’; echo "<style> #tudo { animation:fadeInAnimation ease 2s; animation-iteration-count:1; animation-fill-mode:none; } @keyframes fadeInAnimation { 0% { opacity:0; } 50% { opacity:0; } 100% { opacity:1; } } .captcentro{ position:fixed; margin:0 auto; top:20.5%; left:50%; transform:translate(-50%, -50%); animation:hideAnimation 0s ease-in 4s; animation-fill-mode:forwards; border:2px solid #fff; padding:15px; background-color:#000000; border-radius:10px; font-size:20px; text-align:center; /*text-decoration:underline white;*/ } @keyframes hideAnimation { to { visibility:hidden; width:0; height:0; } } @media only screen and (max-width:576px) { .captcentro{ /*width:280px;*/ position:fixed; margin:0 auto; top:19.5%; left:50%; transform:translate(-50%, -50%); animation:hideAnimation 0s ease-in 4s; animation-fill-mode:forwards; border:2px solid #fff; padding:10px; background-color:#000000; border-radius:10px; font-size:16px; text-align:center; /*text-decoration:underline white;*/ } @keyframes hideAnimation { to { visibility:hidden; width:0; height:0; } } } </style>"; echo "<div class='captcentro'><span style='color:red;'><b>O arquivo não é PDF!</b></span></div>"; exit(); } } //Condição que envia mensagem e chama o 'index.html' caso o usuário clicar no botão enviar sem selecionar arquivo: if (($value[0]) !== ($arquivo['size'])) { header("Location: index.html"); exit(); }
Customizar a Instalação do Linux Debian com Preseed
Manual traduzido do Squid - Parte 3
Instalação do PostgreSQL, Apache2 e PHP8 no Debian Buster 10 e no Stretch 9
Encapsulando BIND 9 e Apache 2 para obter maior segurança
Organizando fotos de camêra digital
PEAGLE: Serviço Web de busca indexada em seu servidor local
Upload de imagens com criação de thumbnails em PHP
Manipulação de arquivos com PHP
Trabalhando com arquivos em PHP
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Overclocking Permanente para Drastic no Miyoo Mini Plus
Problemas de chaves (/usr/share/keyrings) no Debian
Converter os repositórios Debian para o novo formato com as chaves
Rede wifi com mesmo ip da rede eth (2)
como resolver o problema de som do linux mint mate (3)
Primeiras impressões do Debian 13 (2)