如何从PHP中的文件夹中删除图像

时间:2015-03-15 08:43:33

标签: php

我试图从数据库以及PHP5中的文件夹中删除图像,但我无法将其删除。这是我的代码:

 <?php

   $obj=new Crud("localhost","root","","3g");
   class Crud{
     public $mysqli;
     public $data;

     public function __construct($host,$username,$password,$db_name) {
       $this->mysqli = new mysqli($host, $username, $password, $db_name);

       if (mysqli_connect_errno()) {
         echo "Error: Could not connect to database.";
         exit;
       } /*else{
         echo"Your Database successfully connected";    
       }*/
     }

     public function __destruct() {
       $this->mysqli->close();  
     }

     public function read() {
       $query="SELECT * FROM fashion";
       $result= $this->mysqli->query($query);
       $num_result=$result->num_rows;

       if ($num_result>0) {
         while($rows=$result->fetch_assoc()){
           $this->data[]=$rows;
           //print_r($rows);
         }

         return $this->data;
       }
     }

     public function delete($id){
       $query="DELETE FROM fashion WHERE id='$id'";
       $result= $this->mysqli->query($query) or die(mysqli_connect_errno() . "Data cannot inserted");

       if ($result) {
         header('location:fashion.php');    
       }
     }
   }
 ?>

通过使用上述代码,记录仅从数据库中删除,但图像仍保留在文件夹中。

3 个答案:

答案 0 :(得分:1)

要从文件夹中删除图片,您必须使用unlink

$file = "yourimage.jpg";
unlink($file);

如果图像在任何其他目录中,则必须指定完整目录路径  $file = "www/images/yourimage.jpg";

答案 1 :(得分:0)

您正在寻找的解决方案是执行该操作的unlink函数 - 取消链接和删除文件。

您需要文件的名称以及PHP当前工作目录中文件的路径才能使其正常工作。 Kamrans答案显示了这一点。

所以:

    public function delete($id){
            $query = "SELECT filepath FROM fashion WHERE id = ? LIMIT 1";
            $fileLocale = $this->mysqli->prepare($query);
            $fileLocale->bind_param("i",$id);
            $fileLocale->execute();

        $result =  $fileLocale->get_result(); 
$fileLocale->close();
        while ($row = $result->fetch_array(MYSQLI_NUM))
        {
/***
* only 1 result is returned so easy to collect 
***/
            foreach ($row as $r)
            {
                $filepath = $r;
            }
        }
    unset($r,$row);       
    /*** 
    $filepath is now the string of the location of the file.
    ***/
        if (unlink($filepath)){
                   $query="DELETE FROM fashion WHERE id=? LIMIT 1";
                   $delete = $this->mysqli->prepare($query);
        $delete->bind_param("i",$id);
        $delete->execute();
        $affectedRows  = $delete->affected_rows;      
                   if ($affectedRows == 1) {
                     header('location:fashion.php');   
                die(); 
                   }
  • 使用header时,始终在其后面放置die命令。
  • 使用unlink删除文件,成功时返回TRUE。
  • filepath是数据库中存储文件位置的列。
  • 使用OOP原则连接和使用数据库,使用预准备语句而不是查询,对您或您的代码的风险降低。
  • LIMIT添加到您的SQL语句中,以便在出现问题时,例如,不会弄乱整个表格。安全措施。

答案 2 :(得分:-1)

在删除数据库引用之前,使用它来填充文件名,这是我假设存储在数据库中的名称。如果$ id是文件名,只需将其添加到系统命令中即可删除该文件。这假定是Linux。

 public function delete($id){

   exec('rm /path to file/' . $id);//delete the file via system command.

   $query="DELETE FROM fashion WHERE id='$id'";
   $result= $this->mysqli->query($query) or die(mysqli_connect_errno() . "Data cannot inserted");

   if ($result) {
     header('location:fashion.php'); 
     die();   
   }
 }