web-dev-qa-db-ja.com

CodeIgniterで画像のリンクを解除(削除)する方法

CodeIgniterで画像をunlinkしようとしましたが、unlink関数は次のように表示します。

未定義のインデックス:userfileに注意してください

これが私のコードです

<?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

リンク解除関数は通知を表示します未定義のインデックス:userfile

Multipart/form-dataを使用したアップロードフォーム

アップロードフォームに_enctype="multipart/form-data"_属性/値を使用していることを確認してください。

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

[〜#〜] mdn [〜#〜] から:

enctype
_multipart/form-data_:type属性が "file"に設定された_<input>_要素を使用している場合は、この値を使用します。

CodeIgniter form helper を使用する場合は、form_open_multipart()関数を使用できます。

この関数は、マルチパート属性を追加することを除いて、上記のform_open()タグとまったく同じです。これは、フォームを使用してファイルをアップロードする場合に必要です。

ファイルの削除、ファイルパスとURLアドレス

PHP unlink() 関数は、ファイルのPathを最初の引数として受け入れます。 URLアドレスではありません。

base_url() ヘルパー関数 RLアドレスを返します サイトの 設定した _config.php_ファイル。

次のように、サーバー上のファイルのパスを使用する必要があります。

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

AbsoluteまたはRelativeパスを使用できますが、相対パスは_index.php_ファイルからの相対パスです。つまり、_image/_フォルダが_index.php_ファイルの横にある場合は、ファイルパスとして_image/image_name.jpg_を使用する必要があります。

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

base_url()関数はプロジェクトのURLを返しますが、ここでは削除するファイルのディレクトリパスを使用する必要があります。

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

unlink(base_url("/assets/upload/employees/contracts/'.$con_id."));の代わりに

0
Syed Ali

このコードを試してください

_unlink(base_url().'/image/logo_thumb'.$logo_thumb);
_

注:deleteconf()で_$logo_thumb_を割り当て/宣言していません。

コードを確認してください。

0
Kumar V

データベースにファイル名があり、ファイルがabc.jpgであるとします。次に、CodeIgniterでリンクを解除するには-

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

私のファイルアップロードパスは「public_html/assets/uploads/files /」です。上記のコードをコントローラーで「public_html/application/controllers /MyController.php」と書いています。したがって、パスはCIファイルのアップロードセクションで使用したものと同じになります。つまり.

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

そのため、アップロードセクションとリンク解除セクションの両方で相対パスを使用しました。したがって、アップロードが完全に機能する場合、これも完全に機能します。

0
Sourav Purkait

最初のリンク解除関数はパス(URLなし)でのみ機能するため、base_url()関数を削除してください。

次に、最初の関数で$ _FILES配列にserfileインデックスが含まれていないため、エラーが発生します。

注:-unlinkを使用する前に、file_exists()関数も使用したいので、最初にファイルが同じパスに存在するかどうかを確認してから、unlink関数を使用します(エラー処理用) 。

そのように-

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

?>

両方の問題を修正してください。

ありがとう

0
Sorav Garg

ユーザープロファイルの写真をアップロードする場合、およびその時点で、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

まず、ファイルの入力名を確認してください。 「userfile」かどうか?そうでない場合は、それを追加してから、もう一度実行します。

0
Snehal S