Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

diokhan

verificar se ficheiro ja existe

Mensagens Recomendadas

diokhan

boas, eu no meu projecto em php tenho um upload de ficheiros e preciso verificar se o ficheiro já existe, ate aqui tudo certo e a funcionar, mas agora preciso de verificar se o ficheiro já existe e se já existir perguntar ao utilizador se desejar actualizar o ficheiro existente e se actualizar dar mensagem a dizer que foi actualizado, senão sai e diz que o ficheiro já existe e não foi actualizado.

sei que é uma validação com javascript, penso eu :hmm:


...Join the dark side...and get a free cookie...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Fazes o upload normal, e guardas o ficheiro com uma extensão tipo .tmp no fim, ou algo parecido criado por ti, só de exemplo, e no valor de retorno do upload trazes a verificação que precisas, e lês no javascript o que vem do php. Se fizeres tudo bem no php, ele retornará a informação a dizer que o ficheiro ja existe. A partir daí, abres um modal ou algo parecido a perguntar se o user que alterar o ficheiro ou não. Se quiser, fazes um request normal em ajax para que o php apague o ficheiro existente e meta la o que foi feito upload, tirando a extensão temporária, se disser não fazes um request normal em ajax na mesma mas apagas o ficheiro temporário.

Não é o melhor, mas serve.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

Só uma ideia rápida:

<?php

if ( file_exists("oteuficheiro.txt") ){

echo '

<script type="text/javascript">

	if ( confirm("O ficheiro existe. Substituir?") ){

		// Metes aqui a abrir o endereço php com ajax ou não que substitui o ficheiro
		alert("Vai substituir aqui...");

	}

</script>

';

}else{
echo 'ok, nao existe faz o que quiseres...';
}

?>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
diokhan

desde já obrigado pela dica, eu peguei no teu código e fiz isto:

if (file_exists($target.$_FILES["file"]["name"]))
{
echo'<script type="text/javascript">';
	if ( confirm("File already exist!<br>Overwrite?") )
	{
		if(copy($_FILES['uploaded']['tmp_name'], $target)){
			$erro = 1; // Success
			header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
		}else{
			$erro = -1; // Error
			header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
		}
		$return = 1;
	}
echo'</script>';
}else{
$erro = 2; // File already exist
header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}

mas ao fazer o upload, sou enviado para a pagina upload.php e fica tudo em branco, não me aparece a janela de confirmação :hmm:


...Join the dark side...and get a free cookie...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Não é nada disso :P

Convém fazer tudo na mesma página.

Quando disse que "não era o melhor" é porque assim fazias o upload e só depois vias que já existia o ficheiro, quando era melhor ele verificar logo "à cabeça" se ja existia ou não, mas é complicado fazer isso, para não dizer que não dá.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
diokhan

e como posso fazer então? de alguma forma eficaz? eu já estou sem ideias, nem sei por onde começar a pensar neste momento :P


...Join the dark side...and get a free cookie...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

Pegando na maneira que disse irias ter de utilizar ajax ou redireccionar para um outro script levando como parâmetros os nomes dos ficheiros a substituir... não o podes fazer assim pois tens o código php no meio de um script js...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
diokhan

ok, acho que já percebi a ideia obrigado, amanha já vou tentar resolver isto no trabalho :P


...Join the dark side...and get a free cookie...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
diokhan

boas,

tentei fazer assim mas não funcionou muito bem:

<script type="text/javascript">
confirm("File already exist! Overwrite?");
//var nameProject = <?=$row[NAME_PROJECT]?>;
//var idProject = <?=$row[iD_PROJECT]?>;
if ( confirm )
{
	window.location = "./../../upload2.php?nameProj="+nameProject+"&id="+idProject;
}
</script>

estou a fazer mal? :hmm:

PS: se deixar comentada as linhas que declaro as variáveis aparece a mensagem de confirmação, senão não aparece :P


...Join the dark side...and get a free cookie...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
diokhan

eu primeiro faço assim:

<?php 
$path = $_GET[nameProj];
$id = $_GET[id];

$target = "upload/$path/";
mkdir("upload/$path", true);

$erro = 0;
$target = $target . basename( $_FILES['uploaded']['name']) ;

if ($_FILES['uploaded']['size'] > 350000)
{
$erro = 4; // File too large
header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}
$return = 0;

if (file_exists($target.$_FILES["file"]["name"]))
{
$erro = 2; // File already exist
header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}

if ($return == 1){
if(copy($_FILES['uploaded']['tmp_name'], $target)){
	$erro = 1; // Success
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}else{
	$erro = -1; // Error
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}
}
?>

depois verifico o $erro:

if ($erro == 2){
$nameProject = $row[NAME_PROJECT];
$idProj = $row[iD_PROJECT];
?>
<script type="text/javascript" language="javascript">
var nameProject = "<?php echo $nameProject; ?>";
var idProject = "<?php echo $idProj; ?>";
confirm("File already exist! Overwrite?");
if ( confirm )
{
	window.location = "upload2.php?nameProj="+nameProject+"&id="+idProject;
 }
</script>
<?php
//echo "<strong><font color=#006633>File already exist!</font></strong>";
}

se for actualizar faz isto:

<?php
$path = $_GET[nameProj];
$id = $_GET[id];

$target = "upload/$path/";
mkdir("upload/$path", true);

$erro = 0;
$target = $target . basename( $_FILES['uploaded']['name']) ;

if ($_FILES['uploaded']['size'] > 350000)
{
$erro = 4; // File too large
header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}
$return = 0;

if ($return == 1){
if(copy($_FILES['uploaded']['tmp_name'], $target)){
	$erro = 1; // Success
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}else{
	$erro = -1; // Error
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}
}
?>


...Join the dark side...and get a free cookie...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
diokhan

sim, uso este:

<script type="text/javascript" src="./javascript/ajaxupload.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var button = $('#button1'), interval;
new AjaxUpload(button, {
	action: './Quality/qualityRead.php?id=<?php echo $idProject; ?>', 
	name: 'uploaded',
	onSubmit : function(file, ext){
		// change button text, when user selects file			
		button.text('Uploading');

		// If you want to allow uploading only 1 file at time, you can disable upload button
		this.disable();

		// Uploading. -> Uploading.. -> Uploading...
		interval = window.setInterval(function(){
			var text = button.text();
			if (text.length < 13){
				button.text(text + '.');					
			} else {
				button.text('Uploading');				
			}
		}, 200);
	},
	onComplete: function(file, response){
		button.text('Verify Quality');

		window.clearInterval(interval);

		// enable upload button
		this.enable();						
	}
});
});
</script>


...Join the dark side...and get a free cookie...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Vocês puxam muito por nós pa .. Têm de passar mais tempo a aprender programação, porque depois passam a ser mais objectivos.

Há montes de tutoriais na net de como fazer um request em ajax, mas pronto .. É que assim acabamos por fazer o trabalho para as pessoas de graça, ao invés de ajudar com dúvidas de programação, e também tempos contas para pagar, e o tempo disponível é pouco. Pior que isso é que se não "ajudarmos" as pessoas elas deixam de cá vir.

Mas pronto ..

<script type="text/javascript" src="./javascript/ajaxupload.js"></script>
<script type="text/javascript">
        $(document).ready(function(){
        var button = $('#button1'), interval;
        new AjaxUpload(button, {
                action: './Quality/qualityRead.php?id=<?php echo $idProject; ?>',
                name: 'uploaded',
                onSubmit : function(file, ext){
                        // change button text, when user selects file                  
                        button.text('Uploading');
                                                       
                        // If you want to allow uploading only 1 file at time, you can disable upload button
                        this.disable();
                       
                        // Uploading. -> Uploading.. -> Uploading...
                        interval = window.setInterval(function(){
                                var text = button.text();
                                if (text.length < 13){
                                        button.text(text + '.');                                       
                                } else {
                                        button.text('Uploading');                              
                                }
                        }, 200);
                },
                onComplete: function(file, response){
                        button.text('Verify Quality');
                                               
                        window.clearInterval(interval);

                        // a imaginacao e amiga do programador
                        if (response == "1") // se for "1" é porque o ficheiro ja existe
                        {
                               var c = confirm("O ficheiro ja existe, deseja substituir?");
if (c== true)
{
   // request ajax para substituir os ficheiros
}
else
{
   // request ajax para apagar o ficheiro que foi recentemente feito upload
  }

                         }                       
                               
                        // enable upload button
                        this.enable();                                         
                }
        });
        });
        </script>

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
diokhan

obrigado pela ajuda, eu tanto estou aqui para aprender como para ajudar os outros quando posso, eu não peço para me fazerem o trabalho, peço uma ajuda uma dica de como começar que eu vou aprender e desenvolver mais

mas desde já agradeço


...Join the dark side...and get a free cookie...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
diokhan

eu fiz outra solução, deixo aqui o script:

<?php 
$path = $_GET[nameProj];
$id = $_GET[id];

$target = "upload/$path/";

// verifica se já existe a directoria
if (file_exists($uploads))
{

}else{
mkdir("upload/$nameProject", true);
}

$erro = 0;
$target = $target . basename( $_FILES['uploaded2']['name']) ;

if ($_FILES['uploaded2']['size'] > 350000)
{
$erro = 4; // File too large
header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}
$return = 0;

if (!file_exists($target.$_FILES["file"]["name"]))
{
if (copy($_FILES['uploaded2']['tmp_name'], $target))
{
	$erro = 1; // Success
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}else{
	$erro = -1; // Error
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}

}else{
if (empty($overwrite))
{
	$erro = 2; // Success
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}else{
                 // efectua o backup se necessario
	/*$now	= date('Y-m-d');
	$backup = $target."(backup)".$_FILES["file"]["name"];
	if (!copy($target.$_FILES["file"]["name"], $backup))
	{
		echo "<br/><b>Attempted Backup Failed!</b>\n";
	}*/
	if (copy($_FILES['uploaded2']['tmp_name'], $target.$_FILES["file"]["name"]))
	{
		$erro = 3; // Success
		header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
	}
	else
	{
		$erro = 5; // Success
		header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");	
	}
}
}
?>

e do outro lado a form:

echo"<form action='./upload.php?nameProj=$row[NAME_PROJECT]&id=$idProject' method='POST' enctype='multipart/form-data'>
						<tr>
							<td colspan=2 align=center>
							<h2 align=center>Update File:</h2>
							<input type='file' name='uploaded2'><br>
							Check this box <input autocomplete='off' type='checkbox' name='overwrite' /> to overwrite existing files.
							<br>
							<input type='submit' value='Upload file'>
							</td>
						</tr>
						<tr>
							<td colspan=2 align=center>";
								if ($erro == 0){
									// show nothing
								}elseif ($erro == -1){
									echo "<strong><font color=#006633>Error!<br>Failed to insert the file!</font></strong>";
								}elseif ($erro == 1){
									echo "<strong><font color=#006633>Success!<br>Your file was successfully added!</font></strong>";
								}elseif ($erro == 4){
									echo "<strong><font color=#006633>Your file is too large!</font></strong>";
								}elseif ($erro == 2){
									echo "<strong><font color=#006633>File already exist!</font></strong>";
								}elseif ($erro == 3){
									echo "<strong><font color=#006633>Success!<br>File updated!</font></strong>";
								}elseif ($erro == 5){
									echo "<strong><font color=#006633>Error!<br>Failed to update the file!</font></strong>";
								}
							echo"</td>
						</tr>
					</form>";

mas agradeço a ajuda dada


...Join the dark side...and get a free cookie...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
diokhan

eu fiz também por outro método, em javascript, mas estou com um problema

<?php 
$path = $_GET[nameProj];
$id = $_GET[id];

$target = "upload/$path/";

if (file_exists($uploads))
{

}else{
mkdir("upload/$nameProject", true);
}

// se existe
if (file_exists($target.$_FILES['uploaded2']['name'])){
?>
<script type="text/javascript" language="javascript">
	if ( confirm ("File already exist! Overwrite?") ){
    	window.location = '?opcao=editProject&id=<?php echo $id; ?>&over=1';
	}else{
		window.location = 'restrito.php?opcao=editProject&id=<?php echo $id; ?>&erro=5';
	}
</script>
<?php

// se nao existe 
}else{

$erro = 0;
$target = $target . basename( $_FILES['uploaded2']['name']) ;

if ($_FILES['uploaded2']['size'] > 350000)
{
	$erro = 4; // File too large
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}
if (copy($_FILES['uploaded2']['tmp_name'], $target))
{
	$erro = 1; // Success
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}else{
	$erro = -1; // Error
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}
}

// se existe espera pela resposta do utilizador
$over = $_GET[over];
// se resposta = 1 actualiza
if ($over == 1){
$erro = 0;
$target = $target . basename( $_FILES['uploaded2']['name']) ;

if ($_FILES['uploaded2']['size'] > 350000)
{
	$erro = 4; // File too large
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}
if (copy($_FILES['uploaded2']['tmp_name'], $target))
{
	$erro = 1; // Success
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}else{
	$erro = -1; // Error
	header ("Location: restrito.php?opcao=editProject&id=$id&erro=$erro");
}
}
?>

ao fazer o upload ele verifica se o ficheiro existe, se existe pergunta se pretende actualizar, mas se digo que sim depois da-me erro ao inserir e não faz o upload, sei que o erro esta na linha em highlight, se alguém puder ajudar me a reparar isto agradeço


...Join the dark side...and get a free cookie...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.