2017-05-07 4 views
0

Je crée un lien qui ajoute une variable $ _GET à la fin pour l'utilisation de la suppression de fichiers/autres tâches PHP.

<a href="test.php?delete_file=<?php echo $filename; ?>">Delete file</a> 

Une partie de mon code PHP recherche la variable et si elle existe, elle exécute la fonction unset pour supprimer le fichier, mais quand je recharger la page Web, il essaie évidemment de supprimer à nouveau le fichier. Est-il possible de supprimer le $ _GET après qu'il a été exécuté une fois pour arrêter le traitement après une actualisation?

<?php 
if (isset($_GET['delete_file'])) { 
    if (file_exists($full_path.$_GET['delete_file'])) { 
     unlink($_GET['delete_file']); 
    } else { 
     echo "File ".$full_path.$_GET['delete_file']." doesn't exist"; 
    } 
} 
?> 

<a href="test.php?delete_file=<?php echo $filename; ?>">Delete file</a> 
+0

Vous pouvez ajouter ce 'header (" Location: test.php ");' après 'unlink'. –

+1

J'espère que vous avez des mesures de sécurité plus fortes en place, de sorte que seuls les très très très personnes de confiance peuvent supprimer des fichiers, et non d'une manière CSRF ... – johannes

+0

@johannes, oui, tout est pris en charge dans le script ainsi que seulement certains utilisateurs obtiennent cette permission (super utilisateurs) –

Répondre

1

Vous pouvez utiliser ajax pour supprimer des fichiers afin qu'ils ne soient pas actualisés.

<a href="javascript:deletefile('<?php echo $filename; ?>')">Delete file</a> 
<script> 
     function deletefile(filename){ 
       var data = {delete_file:filename }; 
       $.ajax({ 
         url: 'delete.php', 
         type: 'post', 
         data: data, 
         success: function(response) { 
          // .. do something with response .. 
          // you can use window.location to refresh page 
          // or if you have js method to refresh page. you can call it here 
         } 
       }); 
     } 
     </script> 

Dans le fichier php vous pouvez retrive avec le post

<?php 
if (isset($_POST['delete_file'])) { 
    if (file_exists($full_path.$_POST['delete_file'])) { 
     unlink($_POST['delete_file']); 
    } else { 
     echo "File ".$full_path.$_POST['delete_file']." doesn't exist"; 
    } 
} 
?> 

Mais comme les commentateurs dire est ouvert aux problèmes de sécurité potentiels. Vous devez prendre soin de la sécurité si vous utilisez cette approche dans la production.