Как разорвать связь с изображением в php

#php

Вопрос:

я загружаю изображение на сервер и сохраняю путь в базе данных. Теперь я хочу удалить эту запись, а также изображение с этой записью, мой код

$id=$_GET['идентификатор'];
$select=mysql_query("выберите изображение из имени таблицы, где question_id='$id'");
$изображение=mysql_fetch_array($выбрать);
@разорвать связь($изображение['изображение']);
$результат=mysql_query("удалить из имени таблицы, где question_id='$id'");

когда я повторяю $image[‘изображение’]; это даст мне

http://www.example.com/folder/images/image_name.jpeg

Запись успешно удалена, но изображение остается на сервере.

Комментарии:

1. Удалите @ вызов «Отключить связь», чтобы узнать, не возникнут ли какие-либо ошибки

2. Warning: unlink(): http does not allow unlinking in /var/www/test/delete_table.php on line 11

3. правильно ли расширение? если этого не должно быть jpg , или вы можете попробовать использовать путь вместо URL

4. вот в чем твоя проблема. Используйте путь к файлу, как предлагает @Oezi

Ответ №1:

Для удаления изображения вам придется использовать путь на вашем сервере, а не URL-адрес.

 unlink('/var/www/test/folder/images/image_name.jpeg'); // correct
 

вам следует удалить @ предыдущее unlink() , в этом случае вы бы увидели сообщение об ошибке «файл не найден» или что-то в этом роде.

Комментарии:

1. но путь к изображению идет из базы данных, как я уже упоминал в своем вопросе. так как же мне узнать, какое изображение удалено?

2. Начиная с PHP 5.0.0 unlink() также может использоваться с некоторыми оболочками URL. php.net/manual/en/wrappers.php

3. может быть, вам следовало сохранить путь к изображению. другой способ (я никогда этого не сделаю) — str_replace('http://www.example.com','/var/www/test',$url); перед тем, как разорвать связь, чтобы получить путь — но вы действительно должны стараться избегать этого-просто сохраните этот путь в файле.

4. есть ли способ получить только имя изображения с расширением из URL-адреса.

Ответ №2:

Просто если вы используете folder/images/image_name.jpeg вместо всего URL-адреса внутри unlink, это будет хорошо работать, например
, unlink(«http://www.example.com/folder/images/image_name.jpeg«);

следует заменить на

 unlink("folder/images/image_name.jpeg");
 

Ответ №3:

вы должны использовать относительный путь для удаления файла с сервера с помощью удаления ссылки. Если вы сохраните абсолютный путь в своей базе данных, сначала вы должны увидеть, из какой папки вы удаляете изображение. поэтому, если вы удалите изображение из «delete.php» это в www.example.com/folder/delete.php чем вам следует заняться чем-то подобным:

 $db_path = "http://www.example.com/folder/images/upArrow.png";
$len = strlen("http://www.example.com/folder/");
$new_path = substr($db_path, $len, strlen($db_path)-$len); echo "  -> ".$new_path;  
if(isset($_POST['Submit'])){
        $return = unlink($new_path);
            if($return){echo "Succes";}else{echo "Fail";}
    }
 

Ответ №4:

всякий раз, когда вы выбираете свой код в ссылке «Удалить». например: <a href=addproduct.php?action=deleteamp;pid=$get_info[pid]>Delete</a> затем вы должны проверить условие с помощью текущего элемента выбора.

 if(isset($_GET['action']) amp;amp; $_GET['action']=='delete' amp;amp; isset($_GET['pid']))
{
  $query1=("select * from tablename where id='".$_GET['id']."'");
                                   $result1=mysql_query($query1);
                                while($data=mysql_fetch_array($result1))
                                {
                                    $delete=$data['file'];
                                    unlink("../upload/$delete");

                                }
                                $query=("delete from tablename where id='".$_GET['id']."'");
                                $result=mysql_query($query) or die("not inserted". mysql_error());
                                    if($result==TRUE)
                                    {

                                        $_SESSION['msg']="product successfully deleted";
                                        header("Location:addproduct.php");
                                        exit;

                                    }
                                    else
                                    {
                                        $_SESSION['msg']="error in deleting product";
                                        header("Location:addproduct.php");
                                        exit;
                                    }
                            }
 

Ответ №5:

 //http://www.example.com/folder/images/image_name.jpeg

define("BASE_URL", DIRECTORY_SEPARATOR . "folder" . DIRECTORY_SEPARATOR);
define("ROOT_PATH", $_SERVER['DOCUMENT_ROOT'] . BASE_URL);

$folder_upload = "images/";

$image_delete = ROOT_PATH . $folder_upload . pathinfo($image['image'], PATHINFO_BASENAME);

if (!empty($image['image'])) {

  /* Delete */
  if (unlink($image_delete)) { 
      echo "<b>{$image_delete}</b> has been deleted";                                   
  } else {
    echo "<b>{$image_delete}</b> error deleting ";                                          
  }

} else {
  echo "File image not exist";

}

// http://localhost/folder/images/image_name.jpeg