web-dev-qa-db-fra.com

Comment dissocier (supprimer) une image dans CodeIgniter

J'essaie de unlink une image dans CodeIgniter, mais la fonction unlink indique:

notice Index non défini: fichier utilisateur

Voici mon code

<?php
    function get_from_post(){
        $data['logo_name']  = $this->input->post('logo_name',TRUE);
        $data['logo_thumb'] = $_FILES['userfile']['name'];
        return $data;
    }

    function deleteconf($data){
        $data= $this->get_from_post();
        $update_id=$this->uri->segment(3);

        @unlink(base_url.'image/logo_thumb'.$logo_thumb);

        $query= $this->_delete($update_id);     
    }
?>
9
Arul

la fonction unlink affiche un avis Index non défini: userfile

Le formulaire de téléchargement, en utilisant multipart/form-data

Assurez-vous que vous utilisez l'attribut/la valeur enctype="multipart/form-data" pour votre formulaire de téléchargement.

<form action="" method="post" accept-charset="utf-8" enctype="multipart/form-data">

De la MDN :

enctype
multipart/form-data: Utilisez cette valeur si vous utilisez un élément <input> avec l'attribut type défini sur "file".

Si vous utilisez CodeIgniter form helper , vous pouvez utiliser la fonction form_open_multipart():

Cette fonction est absolument identique à la balise form_open() ci-dessus Sauf qu’elle ajoute un attribut en plusieurs parties, ce qui est nécessaire si vous souhaitez utiliser le formulaire pour télécharger des fichiers.

Suppression de fichiers, chemin du fichier ou adresse URL

PHP unlink() function accepte le Path du fichier comme premier argument. Pas l'adresse URL.

La base_url() helper function renvoie l'adresse URL du site, que vous avez définie dans le fichier config.php.

Vous devrez utiliser le chemin du fichier sur votre serveur, comme suit:

unlink('/path/to/image/image_name.jpg'); // This is an absolute path to the file

Vous pouvez utiliser un chemin Absolute ou Relative, mais notez que le chemin relatifest relatif à le fichier index.php. Si le dossier image/ est placé à côté du fichier index.php, vous devez utiliser image/image_name.jpg comme chemin du fichier:

unlink('image/image_name.jpg'); // This is a relative path to the file
3
Hashem Qolami

base_url () renvoie l'url de votre projet, mais vous devez utiliser ici le chemin du répertoire du fichier que vous souhaitez supprimer.

$path = BASEPATH.'/assets/upload/employees/contracts/'; 
$get_file = $path.$con_id.'.jpg'; 
 if(file_exists($get_file)){ 
 unlink($get_file); 
 }

au lieu de unlink(base_url("/assets/upload/employees/contracts/'.$con_id."));

0
Syed Ali

essayez ce code

unlink(base_url().'/image/logo_thumb'.$logo_thumb);

Remarque: vous n'avez pas assigné/déclaré $logo_thumb dans votre deleteconf().

S'il vous plaît vérifier votre code.

0
Kumar V

Supposons que vous ayez le nom du fichier dans la base de données et que votre fichier est abc.jpg. Ensuite, pour dissocier cela dans Code Igniter, faites simplement -

$file = "abc.jpg";
$prev_file_path = "./assets/uploads/files/".$file;
if(file_exists($prev_file_path ))
    unlink($prev_file_path );

Mon chemin de téléchargement de fichier est "public_html/assets/uploads/files /". J'écris le code ci-dessus dans mon contrôleur qui est "public_html/application/controllers/MyController.php". Donc, le chemin sera le même que celui que j'ai utilisé dans ma section de téléchargement de fichier CI. c'est à dire.

...
$config['upload_path']   = './assets/uploads/files';
...

Nous avons donc utilisé le chemin relatif dans les sections upload et unlink. Donc, si le téléchargement fonctionne parfaitement, cela fonctionnera également parfaitement.

0
Sourav Purkait

La première fonction unlink fonctionne uniquement avec path (sans URL), donc veuillez supprimer la fonction base_url ().

Ensuite, dans votre première fonction $ _FILES array ne contient pas userfile index, c’est la raison pour laquelle obtenir une erreur.

NOTE: - Avant d'utiliser unlink, j'aimerais également utiliser la fonction file_exists (), tout d'abord, il va vérifier si le fichier existe déjà sur le même chemin, puis utiliser la fonction unlink (pour la gestion des erreurs).

Comme ça - 

<?php 
if(file_exists(filePath))
{
 unlink(filePath);
}

?>

S'il vous plaît résoudre les deux problèmes.

Merci

0
Sorav Garg

Si vous souhaitez télécharger une photo pour le profil utilisateur ainsi que Au moment où l'ancienne photo de l'utilisateur doit être supprimée par À l'aide de la méthode unlink de codeignitor

$query = $this->db->where('profile_id',$profile_id)->get('users')->row();
$result = $query->photo;
$result = http://localhost/abc/user_photo/FE12563.jpg

if ($result) {
        $dd = substr($result, strlen(base_url()));
        unlink($dd);
        return  $this->db->set('photo',$photo)->where('profile_id',$profile_id)->update('users');
}
0
Rakesh Maurya
function get_from_post(){
      $filename = $_POST['logo_name'];
      $path = $_SERVER['DOCUMENT_ROOT'].'/projectname/uploads/'.$filename ;
      if(is_file($path)){
        unlink($path);
        echo 'File '.$filename.' has been deleted';
      } else {
        echo 'Could not delete '.$filename.', file does not exist';
      }
  }
0
Reena Shirale

Commencez par vérifier le nom de votre fichier. Est-ce "userfile" ou non? Sinon ajoutez-le et exécutez-le à nouveau.

0
Snehal S