2016-09-21 3 views
-5

2 일 후부터 코드에 걸렸습니다. 나는 이미 100 개 이상의 튜토리얼/가이드를 시도했지만 그들 중 누구도 내 문제를 해결하지 못했습니다. 주로 데이터베이스 용 가이드입니다.PHP로 디렉토리에있는 파일을 지우지 마십시오 데이터베이스가

내 웹 사이트에 이미지를 표시 할 준비가 된 갤러리 플러그인을 사용하고 있습니다. 이 갤러리는 데이터베이스를 사용하지 않습니다. 그것을 위해 나는 업로드 기능을 가진 관리자 패널을 만들었습니다. 이제 관리자 패널에서 업로드 된 사진을 삭제하는 기능을 찾고 있습니다. 한 번에 하나의 그림 또는 여러 옵션이 더 좋을 것입니다.

지금은 전에 내가 업로드 main.php에서 내가 관리자 페이지에서 이미지를 표시하고이 코드 :이 delete.php

<?php 
$filename = $_POST['fname']; 
$path = $_POST['directory']; 
if(file_exists($path."/".$filename)) { 
unlink($path."/".$filename); //delete file 
} 
?> 

에 코드를 삭제하려

<?php 
$folder_path = 'gallery-images/'; //image's folder path 

$num_files = glob($folder_path . "*.{jpeg,jpg,gif,png,bmp}", GLOB_BRACE); 

$folder = opendir($folder_path); 

if($num_files > 0) 
{ 
while(false !== ($file = readdir($folder))) 
{ 
    $file_path = $folder_path.$file; 
    $extension = strtolower(pathinfo($file ,PATHINFO_EXTENSION)); 
    if($extension=='jpg' || $extension =='png' || $extension == 'gif' || $extension == 'bmp') 
    { 
    ?> 
      <a href="<?php echo $file_path; ?>" id="fname"><img src="<?php echo $file_path; ?>" height="250" /></a> 
      <?php 
    } 
} 
} 
else 
{ 
echo "the folder was empty !"; 
} 
closedir($folder); 
?> 

그리고 그래서 확인 버튼과 삭제 버튼으로 서버에서 파일을 삭제하는 기능이 필요합니다. 지금 바로 클릭 한 번으로 파일을 엽니 다. 이 기능은 관리자 만 사용할 수 있으므로 비슷한 주제로 읽으면 삭제 기능이 안전하다고 생각합니다.

미리 감사드립니다.

편집 1 :

지금까지이 코드가 성공적으로 서버에서 파일 (@Jocelyn에서 답) 삭제 :

죄송합니다, 그것은 수행합니다

<h3><a href="?delete=1">Delete Now!</a></h3> 

<?php 
    if(isset($_GET['delete'])) 
    { 
     unlink(__FILE__); 
    } 
?> 

Change this unlink(__FILE__); to unlink("$file_path"); 

EDIT (2) 서버에서 파일을 삭제하지만 해당 디렉토리의 모든 파일을 삭제합니다.

내가 클릭 한 파일 하나만 삭제할 수 있습니까?

지금 바로 코드의 링크 하나에서 나타나는 모든 사진, 나는 그게 문제라고 생각합니다.

링크의 사진이 등장하고있는 이것이다 :

<a href="?delete=1" id="delete" name="delete"><img src="<?php echo $file_path; ?>" height="250" /></a> 
+0

시도한 내용을 Google에 보여줄 수 있습니까? –

+0

이'$ _POST [ 'fname']'와'$ _POST [ 'directory']' – arunrc

+4

을 얻은 곳에서 버튼을 추가/사용하는 방법에 대해 묻고 있습니까? 현재 귀하의 코드가 작동합니까? 여기에 의견에 답변하십시오. 그렇지 않은 경우 답으로 답변하십시오. 나는 여기에서 영원히 설 수 없다. –

답변

0

당신이 delete.php 스크립트 파일 이름을 보내 아약스를 사용하여 목표를 달성하는 방법의 매우 신속하게 함께 자갈길 예. 테스트를 거치지 않았기 때문에 문제가있을 수 있으므로 의심의 여지가 없습니다.하지만 출발점입니다.

이 단지 요청 된 파일을

<?php 
$file = $_GET['delete']; 
if(isset($_GET['delete'])) 
    { 
     unlink("./gallery-images/$file"); 
     header("Location:home.php"); 
    } 
?> 

이을 삭제 Delete.php입니다 :

<?php 
    /* delete.php */ 
    $img=!empty($_GET['name']) ? $_GET['name'] : false; 
    $result=false; 


    if($img){ 
     /* 

      here you would typically check that the path sent via ajax exists 
      and then use unlink to delete the file before sending a response 
      to the ajax callback function - the callback would then inform the 
      user that the file has been deleted (or not!) 

      For testing though a simple message will suffice so that files are not deleted unnecessarily!!! 

      -- uncomment the line below to actually attempt deletion of file. 
     */ 


     if(file_exists($img)){ 
      #$result = @unlink($img); 
      clearstatcache(); 
     } 


     echo $result ? 'The file '.$img.' was deleted' : 'The file '.$img.' could not be deleted'; 
    } 
?> 




<?php 
    $root='c:/wwwroot'; 
?> 
<!-- /* admin page that lists images */ --> 
<html> 
    <head> 
     <title>Delete images - no database</title> 
     <script> 
      function ajax(imagename,callback){ 
       var xhr=new XMLHttpRequest(); 
       xhr.onreadystatechange=function(){ 
        if(xhr.status==200 && xhr.readyState==4){ 
         callback.call(this, xhr.response); 
        } 
       }; 
       xhr.open('GET', 'delete.php?name='+imagename, true); 
       xhr.send(); 
      } 
      function deleteimage(e){ 
       e.preventDefault(); 
       ajax.call(this, e.target.dataset.path+'/'+e.target.dataset.name, cbdeleteimage); 
      } 
      function cbdeleteimage(r){ 
       alert(r); 
      } 
      function bindEvents(){ 
       var col=document.querySelectorAll('img.delete'); 
       for(var n in col)if(col[ n ].nodeType==1) col[n].addEventListener('click', deleteimage, false); 
      } 

      document.addEventListener('DOMContentLoaded', bindEvents, false); 
     </script> 
    </head> 
    <body> 
     <?php 

      $dir = 'gallery-images/';  /* YOUR path */ 
      $dir = $root . '/images/misc/'; /* MY test path */ 

      $files=preg_grep('@(\.jpg|\.jpeg|\.png|\.bmp|\.gif)@i', glob($dir . '*.*')); 
      $html=array(); 


      foreach($files as $file){ 
       if($blocal) $file=str_replace($root, '', $file); /* remove MY site root from file names */ 
       $name = pathinfo($file, PATHINFO_BASENAME); 
       $path = pathinfo($file, PATHINFO_DIRNAME); 

       $html[]="<img class='delete' src='{$file}' data-name='{$name}' data-path='{$path}' />"; 
      } 


      echo implode(PHP_EOL, $html); 
     ?> 
    </body> 
</html> 
+0

시도해보세요. 아무 일도 일어나지 않습니다. 사진이 표시되지만 1 빈 팝업을 클릭하면 아무 것도 표시되지 않습니다. –

+0

나는 몇 가지 실수를 눈치 챘다. - 내가 말했듯이, 매우 빠르게 수작업으로 응 답하고 시험하지 않았다. – RamRaider

+0

어쨌든 도와 주셔서 감사합니다. 리디렉션을 도와 주실 수 있습니까? 맨 아래에서 다시 내 질문을 확인하십시오. –

0

그래서이 자신의 작품에 붙어 나 같은 noobs에 완벽하게 괜찮 최종 코드는 upload.php 파일 이름을 자동 증가 값으로 변경하여 업로드 :

<?php 

// Upload and Rename File 

if (isset($_POST['submit'])) 
{ 
    $filename = $_FILES["file"]["name"]; 
    $file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention 
    $file_ext = substr($filename, strripos($filename, '.')); // get file name 
    $filesize = $_FILES["file"]["size"]; 
    $allowed_file_types = array('.png','.jpg','.jpeg'); 
    $count = count (glob ('gallery-images/*')); 

    if (in_array($file_ext,$allowed_file_types) && ($filesize < 10000000)) 
    { 
     // Rename file 
     $newfilename = ($count + 1) . $file_ext; 
     if(file_exists("gallery-images/" . $newfilename)) 

     { 
      // file already exists error 
      echo "You have already uploaded this file."; 
     } 
     else 
     {  
      move_uploaded_file($_FILES["file"]["tmp_name"], "gallery-images/" . $newfilename); 
      header("Location: home.php"); 
      exit; 
     } 
    } 
    elseif (empty($file_basename)) 
    { 
     // file selection error 
     echo "Please select a file to upload."; 
    } 
    elseif ($filesize > 10000000) 
    { 
     // file size error 
     echo "The file you are trying to upload is too large."; 
    } 
    else 
    { 
     // file type error 
     echo "Only these file typs are allowed for upload: " . implode(', ',$allowed_file_types); 
     unlink($_FILES["file"]["tmp_name"]); 
    } 
} 

?> 

이것은 집입니다.

업로드 양식 : 디렉토리에서

<form action="upload.php" method="post" enctype="multipart/form-data"> 
    Select image to upload: <br /> 
    <input type="file" name="file" id="file"><br /><br /> 
    <input type="submit" value="Upload Image" name="submit"> 
</form> 

디스플레이 사진 :

<?php 
$folder_path = 'gallery-images/'; //image's folder path 
$num_files = glob($folder_path . "*.{jpeg,jpg,png}", GLOB_BRACE); 
$folder = opendir($folder_path); 
$file = '$file_path'; 

if($num_files > 0) 
{ 
while(false !== ($file = readdir($folder))) 
{ 
    $file_path = $folder_path.$file; 
    $extension = strtolower(pathinfo($file ,PATHINFO_EXTENSION)); 
    if($extension=='jpg' || $extension =='png' || $extension == 'jpeg' || $extension == 'bmp') 
    { 
    ?> 
    <a href="delete.php?delete=<?php echo $file; ?>" onclick="return deleletconfig()" id="delete" name="delete"><img src="<?php echo $file_path; ?>" height="175" /></a> 
<?php 
    } 
} 
} 
else 
{ 
echo "the folder was empty !"; 
} 
closedir($folder); 
?> 

삭제 확인 팝업 스크립트 :

<script> 
function deleletconfig(){ 

var del=confirm("Are you sure you want to delete this record?"); 
if (del==true){ 
} 
return del; 
} 
</script> 

희망이 될 것입니다 PHP는 삭제 기능을 사용하여 이미지를 표시합니다 학습자에게 도움이됩니다. 감사합니다. .

관련 문제