Ir para conteúdo

POWERED BY:

Arquivado

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

Rodolfo Andrade

Upload de Arquivos (file_exists)

Recommended Posts

Galera, estou trabalhando em um projeto que possui uma funcionalidade de upload e download de arquivos.

Porém, estou com um probleminha e não consigo resolver mesmo depois de várias pesquisas.

O upload do arquivo está sendo feito e cadastrando as informações no banco normalmente. Mas se for feito o upload do arquivo com o mesmo nome, o arquivo que já existe é sobrescrito.

Tentei criar uma condição pra que o arquivo seja renomeado caso já exista através do file_exists(), mas não funciona de jeito nenhum.

Gostaria da ajuda de vocês quanto a isso!

<?php 

require ("conectfile.php");
require ("zipar.class.php");

$msg = false; //mensagem de erro.

if (isset($_POST['enviar'])) {
	$arq = $_FILES['arquivo']['name'];
	$arq = str_replace(" ","_",$arq);// o método "str_replace" faz substituição de caracteres.
	$arq = str_replace("á","a",$arq);
	$arq = str_replace("à","a",$arq);
	$arq = str_replace("ã","a",$arq);
	$arq = str_replace("â","a",$arq);
	$arq = str_replace("é","e",$arq);
	$arq = str_replace("ê","e",$arq);
	$arq = str_replace("í","i",$arq);
	$arq = str_replace("ô","o",$arq);
	$arq = str_replace("õ","o",$arq);
	$arq = str_replace("ó","o",$arq);
	$arq = str_replace("ú","u",$arq);
	$arq = str_replace("ü","u",$arq);
	$arq = str_replace("ç","c",$arq);
	$arq = strtolower($arq);//o método "strtolower" converte as letras para minúsculo
	$drct = "C:/xampp/htdocs/testes/up_down/";
	$a = 1;

	$insrt = $cnct_arq -> prepare("INSERT INTO arq_teste (id, arquivo, data_arq)
									VALUES (null, '$arq.zip', NOW())");
		$insrt -> execute();

	if ($insrt->rowCount()>0 && file_exists($drct.$arq))/*verifica se o arquivo existe*/{
		
		//condição de verificação de duplicidade do nome do arquivo.
		rename($arq, "(".$a.")".$aqr);//renomeia o arquivo "rename(nome_antigo, nome_novo)"

		while(file_exists($drct."(".$a.")".$aqr)){
			$a++;
		}

		echo "Arquivo renomeado!";

		move_uploaded_file($_FILES['arquivo']['tmp_name'],$drct.$arq);
		$zip = new zipar();
		$zip->ziparArq($arq, $arq.".zip", $drct);
		unlink($drct.$arq);//exclui o arquivo original.
		$msg = "Arquivo enviado com sucesso!";

	}elseif ($insrt->rowCount()>0){
		move_uploaded_file($_FILES['arquivo']['tmp_name'],$drct.$arq);
		$zip = new zipar();
		$zip->ziparArq($arq, $arq.".zip", $drct);
		unlink($drct.$arq);//exclui o arquivo original.
		$msg = "Arquivo enviado com sucesso!";
	}else{
		$msg = "Falha ao enviar o arquivo.";
	}
}

 ?>
 <form method="post" action="formuploadfile.php" enctype="multipart/form-data">
<h2>Envio de arquivos</h2>

  <label>Selecionar arquivo: </label>

  <input type="file" name="arquivo" />
  
  <input type="submit" name="enviar" value="Enviar" />

  <?php if ($msg != false){
	echo "<p> $msg </p>";
}
?>

</form>
<table cellpadding="3" cellspacing="0" border="0">
	<thead>
		<tr>
			<td width="200">NOME DO ARQUIVO</td>
			<td width="250">DATA DE MODIFICAÇÃO</td>
			<td width="200">DOWNLOAD</td>
		</tr>
	</thead>
	<tbody>
		<?php 
			$sqlShow = "SELECT * FROM arq_teste";
			try{
				$show = $cnct_arq -> prepare($sqlShow);
				$show -> execute();
			}catch(PDOException $e){
				echo $e->getMessage();
			}
			
			while($showfield = $show->fetch(PDO::FETCH_ASSOC)){
		?>
		<tr>
			<td><?php echo $showfield["arquivo"] ?></td>
			<td><?php echo $showfield["data_arq"] ?></td>
			<td><a href="up_down/<?php echo $showfield["arquivo"] ?>">Download</a></td>
		</tr>
	<?php
	}
	?>
	</tbody>
</table>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

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