web-dev-qa-db-ja.com

Codeigniter 4:move_uploaded_fileでファイルをアップロードする

CodeIgniter 3プロジェクトをCodeIgniter 4に移行し始めました。

ファイルのアップロード以外はすべて正常に機能します。

ユーザーがアップロードしたファイルを/ writable/uploadsに保存したい。以下は、アップロードしたファイルを目的の場所に移動するために使用するコードです。

            $target_dir = '/writable/uploads/recordings/';
            $target_file = $target_dir . basename($_FILES["gfile"]["name"]);
            $FileType = pathinfo($target_file,PATHINFO_EXTENSION);

            if($FileType != "mp3") {            
             $vmuploadOk = 1;
            }               
            else
             $vmuploadOk = 1;   


            if ($vmuploadOk == 1) {
                $greetfile = $id . "g" . basename($_FILES["gfile"]["name"]);

                $target_filenew = $target_dir . $greetfile;     

                move_uploaded_file($_FILES["gfile"]["tmp_name"], $target_filenew);                 
            }

CI4が書き込み可能なフォルダをパブリックフォルダの外に保持しているためだと思います。

2
arun kumar

これは私にとってはうまくいき、あなたにとってもうまくいくことを願っています。 codeigniter 4では、これを使用してファイルをアップロードし、コントローラーに移動してください。


if($imagefile = $this->request->getFiles())
{
    if($img = $imagefile['gfile'])
    {
        if ($img->isValid() && ! $img->hasMoved())
        {
            $newName = $img->getRandomName(); //This is if you want to change the file name to encrypted name
            $img->move(WRITEPATH.'uploads', $newName);

            // You can continue here to write a code to save the name to database
            // db_connect() or model format

        }
    }
}

または


        if($img = $this->request->getFile('gfile'))
        {
            if ($img->isValid() && ! $img->hasMoved())
            {
                $newName = $img->getRandomName();
                $img->move('./public/uploads/images/users', $newName);

                // You can continue here to write a code to save the name to database
                // db_connect() or model format

            }
        }

その後、htmlこれを使用

<input type="file" name="gfile">

これがあなたが他の人に私の注意を喚起するのに役立つことを願っています。

2
Chibueze Agwu

CodeIgniterの組み込み関数を使用していません。コードに表示されているものはすべてPHP関数です。組み込みのCI関数を活用したい場合は、@ Boominathan Elangoによってリンクされているドキュメントを参照してください。

リクエストからファイルを取得するには:

$file = $this->request->getFile('here_goes_input_name');

指定どおり ここ

CI関数を使用してファイルを移動するには:

$file->move(WRITEPATH.'uploads', $newName);

指定どおり ここ

1
RisingSun