Функция PHP move_uploaded_file() не работает

#php #file

#php #файл

Вопрос:

Есть форма для добавления товара в интернет-магазин. Вы можете загрузить до 10 изображений, минимум — 1 изображение. Несмотря на то, что он идеально вставляет имя файла в базу данных MySQL, файлы не будут перемещены в нужную папку.

Я использую общий веб-хост, PHP 5.2, файл имеет права на запись. Уже поговорил с веб-хостингом, и это не проблема с разрешениями.

 <form action="" method="post" enctype="multipart/form-data">
                  <div class="form-group">
                    <label for="img1"><b>Image 1</b></label>
                    <input required type="file" class="form-control" name="img1" placeholder="Image 1 (name of the first image, upload it as instructed)">
                  </div>
                  <div class="form-group">
                    <label for="img2"><b>Image 2</b></label>
                    <input type="file" class="form-control" name="img2" placeholder="Image 2 (name of the first image, upload it as instructed)">
                  </div>
                  <div class="form-group">
                    <label for="img3"><b>Image 3</b></label>
                    <input type="file" class="form-control" name="img3" placeholder="Image 3 (name of the first image, upload it as instructed)">
                  </div>
                  <div class="form-group">
                    <label for="img4"><b>Image 4</b></label>
                    <input type="file" class="form-control" name="img4" placeholder="Image 4 (name of the first image, upload it as instructed)">
                  </div>
                  <div class="form-group">
                    <label for="img5"><b>Image 5</b></label>
                    <input type="file" class="form-control" name="img5" placeholder="Image 5 (name of the first image, upload it as instructed)">
                  </div>
                  <div class="form-group">
                    <label for="img6"><b>Image 6</b></label>
                    <input type="file" class="form-control" name="img6" placeholder="Image 6 (name of the first image, upload it as instructed)">
                  </div>
                  <div class="form-group">
                    <label for="img7"><b>Image 7</b></label>
                    <input type="file" class="form-control" name="img7" placeholder="Image 7 (name of the first image, upload it as instructed)">
                  </div>
                  <div class="form-group">
                    <label for="img8"><b>Image 8</b></label>
                    <input type="file" class="form-control" name="img8" placeholder="Image 8 (name of the first image, upload it as instructed)">
                  </div>
                  <div class="form-group">
                    <label for="img9"><b>Image 9</b></label>
                    <input type="file" class="form-control" name="img9" placeholder="Image 9">
                  </div>
                  <div class="form-group">
                    <label for="img10"><b>Image 10</b></label>
                    <input type="file" class="form-control" name="img10" placeholder="Image 10">
                  </div>
 

часть изображения формы ^

     <?php

    if(isset($_POST['name'])){
        $img1 = $_FILES['img1']['name'];
        $img2 = $_FILES['img2']['name'];
        $img3 = $_FILES['img3']['name'];
        $img4 = $_FILES['img4']['name'];
        $img5 = $_FILES['img5']['name'];
        $img6 = $_FILES['img6']['name'];
        $img7 = $_FILES['img7']['name'];
        $img8 = $_FILES['img8']['name'];
        $img9 = $_FILES['img9']['name'];
        $img10 = $_FILES['img10']['name'];

        move_uploaded_file($_FILES['img1']['tmp_name'],"../assets/img/carousel/");
        move_uploaded_file($_FILES['img2']['tmp_name'],"../assets/img/carousel/$img2");
        move_uploaded_file($_FILES['img3']['tmp_name'],"../assets/img/carousel/$img3");
        move_uploaded_file($_FILES['img4']['tmp_name'],"../assets/img/carousel/$img4");
        move_uploaded_file($_FILES['img5']['tmp_name'],"../assets/img/carousel/$img5");
        move_uploaded_file($_FILES['img6']['tmp_name'],"../assets/img/carousel/$img6");
        move_uploaded_file($_FILES['img7']['tmp_name'],"../assets/img/carousel/$img7");
        move_uploaded_file($_FILES['img8']['tmp_name'],"../assets/img/carousel/$img8");
        move_uploaded_file($_FILES['img9']['tmp_name'],"../assets/img/carousel/$img9");
        move_uploaded_file($_FILES['img10']['tmp_name'],"../assets/img/carousel/$img10");
 

Часть, которая получает имя файлов и перемещает их в нужную папку.

Вместо того, чтобы файлы перемещались в папку карусели, файлы просто никуда не перемещаются вообще:

 [Thu Apr 18 18:53:34.249395 2019] 
[cgi:error] [pid 13994] 
[client 172.69.130.13:32306] AH01215: PHP Warning:  move_uploaded_file(): 
Unable to move '/tmp/phpOjN6YW' to '../assets/img/carousel/download (2).jpg' 
in /home/seniorte/public_html/admin/add.php 
on line 338: /usr/local/cpanel/cgi-sys/ea-php56
Error log ^
 

Ответ №1:

Это определенно либо проблема с разрешениями, либо проблема с путем. Каталог назначения должен существовать и быть доступен для записи вашим PHP-процессом. Для назначения используйте абсолютный путь, а не относительный, как вы используете, или, если вы используете относительный, убедитесь, что вы используете dirname(FILE) . ‘/../assets’

Предполагая, что все вышесказанное верно, тогда это сработает для вас!

Ответ №2:

Итак, то, что сказал cherrysoft, верно; это почти наверняка проблема с разрешениями, или он не идет по тому пути, по которому, по вашему мнению, он идет.

Я собираюсь воспользоваться этой возможностью, чтобы помочь вам улучшить ваш код. Ваш пример можно было бы упростить, чтобы упростить добавление более 10 изображений и сделать его более удобным в обслуживании. Вот лучшая альтернатива вашему текущему коду:

 if(isset($_POST['name'])){
    foreach($_FILES as $key => $file) {
        move_uploaded_file($file['tmp_name'],"../assets/img/carousel/{$file['name']}");
    }
}
 

Таким образом, ваш код не будет таким повторяющимся. Есть способы улучшить это еще больше, но я не хочу увлекаться.