2011-04-19 15 views
7

cargo la imagen en el servidor y guardo la ruta en la base de datos. Ahora quiero eliminar ese registro y también la imagen con ese registro mi código esCómo desvincular una imagen en php

$id=$_GET['id']; 
$select=mysql_query("select image from table_name where question_id='$id'"); 
$image=mysql_fetch_array($select); 
@unlink($image['image']); 
$result=mysql_query("delete from table_name where question_id='$id'");

cuando me echo $ imagen [ 'imagen']; esto me dará

http://www.example.com/folder/images/image_name.jpeg
El registro se borró con éxito pero la imagen permanece allí en el servidor.

+2

Retire el '@' de la llamada de desenlace para ver si hay errores surgen –

+1

'Advertencia: unlink(): http no permite desvincular en/var/www/test/delete_table.php en la línea 11' –

+0

¿es correcta la extensión? si no fuera 'jpg' o puedes probar con la ruta en lugar de url –

Respuesta

33

tendrá que usar la ruta en su servidor para eliminar la imagen, no la url.

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

debe quitar la @ antes unlink(), en ese caso habría visto el error de mensaje que dice "archivo no encontrado" o algo por el estilo.

+0

pero la ruta de la imagen proviene de la base de datos como mencioné en mi pregunta. Entonces, ¿cómo debería saber qué imagen se elimina? –

+0

A partir de PHP 5.0.0 unlink() también se puede usar con algunos contenedores de URL. http://www.php.net/manual/en/wrappers.php –

+0

tal vez debería haber guardado la ruta de la imagen. Otra forma (nunca lo haré) es 'str_replace ('http: //www.example.com','/var/www/test',$url);' antes de desvincularse para obtener la ruta, pero deberías tratar de evitar esto, simplemente guarda la ruta al archivo. – oezi

0

debe utilizar la ruta relativa para eliminar un archivo del servidor con desvinculación. Si guarda la ruta absoluta en su base de datos, primero debe ver desde qué carpeta eliminará la imagen. por lo que si se borra la imagen de "delete.php" que se encuentra en www.example.com/folder/delete.php de lo que debe hacer algo como esto:

$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";} 
    } 
1

cada vez que seleccione el código en su enlace borrar. como: <a href=addproduct.php?action=delete&pid=$get_info[pid]>Delete</a> luego tiene que verificar la condición utilizando el elemento de selección de cuurent.

if(isset($_GET['action']) && $_GET['action']=='delete' && 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; 
            } 
          } 
0
//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