NÃO ELOGIE POLÍTICO!
Conteúdo de Exatas e Humanas!
Utilize os textos, contanto que fale de mim (bem ou mal)... e se for para fins comerciais, eu quero a minha parte!
sábado, 16 de novembro de 2024
O Bostileiro
terça-feira, 5 de novembro de 2024
Enviar mensagem amigável ao usuário trabalhando com as opções do php.ini
O PROBLEMA
<input type=”file” id=”meuinput” multiple>
Primeiro veremos as diretivas do php.ini:
- file_uploads = On (Permite uploads de arquivos HTTP);
- max_file_uploads = 10 (Número máximo de arquivos que podem ser enviados em uma única requisição);
- post_max_size = 2M (Tamanho máximo dos dados POST que o PHP aceitará, valor "0" (zero) desabilita o limite. É ignorada se a leitura dos dados POST está desabilitada por meio de ‘enable_post_data_reading = Off’, ou seja, para post_max_size funcionar, ‘enable_post_data_reading’ deve estar no padrão (comentada) ou descomentada com On;
- enable_post_data_reading = On;
- upload_max_filesize = 2M (Tamanho máximo permitido para envio de um arquivo).
O arquivo upload.php faz o trabalho pesado.
upload.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 'E:/www/Desenvolvimento/projetoMSG/pdfparser-master/pdfparser-master/alt_autoload.php';
$uploaddir = 'E:/www/Desenvolvimento/projetoMSG/upload/';
//require_once '/var/www/html/projetoMSG/pdfparser-master/pdfparser-master/alt_autoload.php';
//$uploaddir = '/home/debina/Desenvolvimento/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 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();
}
CONCLUSÃO
Você pode (e deve) melhorar os arquivos e adaptá-los para as suas necessidades.
Em pesquisa na internet notei uma falta de artigos, tutoriais, etc, neste sentido de configurar mensagens em PHP após o envio de arquivos.
A estilização em CSS, caso for colocar em produção os arquivos, aconselho a colocar num arquivo CSS em separado e não deixar inline como está.