2017-05-07 5 views
0

파일/다른 PHP 작업 삭제를 위해 $ _GET 변수를 끝에 추가하는 링크를 만듭니다. 내 PHP 코드의

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

부분은 변수를 검색하고있는 경우, 파일을 제거 해제 기능을 실행하지만 웹 페이지를 다시로드 할 때, 그것은 분명히 다시 파일을 제거하려고합니다. 새로 고침 후 처리를 중지하기 위해 한 번 실행 한 후에 $ _GET을 제거 할 수있는 방법이 있습니까?

<?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

'unlink' 다음에이'header ("Location : test.php");를 추가 할 수 있습니다. –

+1

나는 여러분이보다 강력한 보안 조치를 취할 수 있기를 바랍니다. 매우 신뢰할 수있는 사람들 만이 CSRF 방식이 아닌 파일을 삭제할 수 있습니다. – johannes

+0

@johannes, 예, thats는 스크립트에서만 처리됩니다. 특정 사용자가이 권한을 얻는 경우 (수퍼 유저) –

답변

1

ajax를 사용하여 파일을 삭제하면 새로 고침되지 않습니다.

<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> 

는 PHP 파일에서 당신은 포스트

<?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"; 
    } 
} 
?> 

와 PIN이 가능하지만 덧글이 잠재적 인 보안 문제에 열려 말한대로. 프로덕션 환경에서이 접근법을 사용하면 보안을 관리해야합니다.

관련 문제