php move_uploaded_file всегда возвращает false - PullRequest
0 голосов
/ 28 мая 2019

Я использую обычный php (MVC) и пытаюсь загрузить файлы (файлы любого типа), но при использовании функции «move_uploaded_file» всегда возвращается false

Я пытался изменить цельПуть несколько раз с постоянным URLROOT (цель моего сайта), чтобы указать его вручную, но ничего не работает!у меня есть три файла .htaccess, если необходимо, я опубликую его содержимое, если это так.

public function uploadvideo($id){
        if($_SERVER['REQUEST_METHOD'] == 'POST'){

            $data = [
                'order_id' =>$id,
                'errors' => '',
                'video_name'=> uniqid()
            ];

            try{

                if(empty($_FILES)){
                    throw new Exception('Invalid upload');
                }

                switch ($_FILES['file']['error']){
                    case UPLOAD_ERR_OK:
                        break;
                    case UPLOAD_ERR_NO_FILE:
                        throw new Exception('No file uploaded');
                        break;
                    case UPLOAD_ERR_INI_SIZE:
                        throw new Exception('file is too large');
                        break;
                    default:
                        throw new Exception('An error occurred');
                }

                if($_FILES['file']['size'] > 20000000){
                    throw new Exception('Video size exceded must be below 21 MB');
                }

                if(empty($data['errors'])){

                    //$destination = URLROOT . "/public/uploads/" . $_FILES['files']['name'];
                    $destination = "/public/uploads" . $_FILES['files']['name'];

                    if(move_uploaded_file($_FILES['file']['tmp_name'],$destination)){
                        if($this->adminModel->uploadVideo($data)){
                            flash('post_message','video uploaded');
                            redirect('admins/index');
                        }else{
                            die('something went wrong');
                        }

                    }else{
                        // flash('post_message','uploading error');
                        var_dump($_FILES);
                        var_dump('xxx');
                        var_dump($destination);
                        var_dump($data);
                        throw new Exception('unable to move uploaded file');
                        // redirect('admins/index');
                    }

                }else{
                    flash('post_message',$data['errors']);
                    redirect('admins/index');
                }

            } catch(Exception $e){
                $data['errors'] = $e->getMessage();
            }

        }else{
            redirect('orders/index');
        }
    }

и мою форму:

<form method="post" enctype="multipart/form-data" action="<?php echo URLROOT;?>/admins/uploadvideo/<?php echo $order->order_id;?>">
                        <div>
                            <input type="file" name="file" id="file">
                        </div>
                        <input type="submit" value="upload" class="btn btn-warning"/>
                    </form>

я ожидаю, что это перенаправит меня на индекс, но этовозвращает false здесь немного моего процесса отладки (var_dump):

array(1) { ["file"]=> array(5) { ["name"]=> string(6) "22.png" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(14) "/tmp/phpj4ScyG" ["error"]=> int(0) ["size"]=> int(144743) } } string(3) "xxx" string(15) "/public/uploads" array(3) { ["order_id"]=> string(5) "20076" ["errors"]=> string(0) "" ["video_name"]=> string(13) "5cecf6fea5632" }

1 Ответ

0 голосов
/ 28 мая 2019

Как указано в комментарии, вы, вероятно, имеете ошибку из-за того, что /public/upload22.png не существует для файла назначения.

Вы пропустили косую черту в своем коде:

$destination = "/public/uploads/" . $_FILES['files']['name'];

В вашем комментарии мы можем видеть

//$destination = URLROOT . "/public/uploads/" . $_FILES['files']['name'];

это также неправильно, у вас есть опечатка здесь $_FILES['files'] файлы должны быть названы file, но вы нене забудь / на этот раз

...