PHP альбом: move_uploaded_file не работает

0

Я новичок в php и нуждаюсь в помощи.

Я работаю с простым альбомом и пытаюсь загрузить фотографии в папку альбома, которую я выбираю из этой опции, но получаю ошибки, говорящие "Нет такого файла или каталога" и "Невозможно переместить".

Я попытался изменить часть "$ album_name" в пути к "$ row ['name']" или "$ album_id", но никто из них не работал. Тем не менее, установка фиксированного url работает (например, 'uploads/bla/'.$ random_name. '. Jpg').

Как включить название альбома, которое я выбираю из опции в пути? Загруженные файлы хранятся за пределами папок (в папке "uploads").


 <form enctype='multipart/form-data' method='post'>

    Select album: <br/>              
    <select name='album'>
    <?php
    $query = mysqli_query($dbc, "SELECT id, name FROM albums ORDER BY id DESC");

    while($row = mysqli_fetch_array($query)) {
      $album_id = $row['id'];
      $album_name = $row['name'];
      echo "<option value=".$album_id.">".$album_name."</option>";
    }
    ?>
    </select><br/><br/>  

    <?php
      if(isset($_POST['upload'])) {

        $album_id = $_POST['album'];
        $file = $_FILES['file']['name'];
        $file_tmp = $_FILES['file']['tmp_name'];
        $random_name = rand();

        if(empty($file)) { 
          echo "Please choose a file to upload.<br/> <br/>";
        } else {

          move_uploaded_file($file_tmp, 'uploads/'.**$album_name**.'/'.$random_name.'.jpg');

          mysqli_query ($dbc, "INSERT INTO pictures VALUES('', '$album_id', '$random_name.jpg')");
          echo "Photo uploaded!!!<br/> <br/> ";
        }
      }
    ?>

   Select photo: <br/>
    <input type='file' name='file' /><br/><br/>
    <input type='submit' name='upload' value='Upload' />
  </form>   
Теги:

1 ответ

0
Лучший ответ

Есть много вещей, которые нужно учитывать, когда вы получаете такие ошибки.

  1. Существует ли каталог? У каталога "uploads" может быть другое имя.
  2. Есть ли в каталоге правильный chmod? Если вы работаете в Windows, то проблем нет. Но в Linux это огромная проблема, когда каталог 0600, а владелец - ваш пользователь. В этом случае, либо chmod каталог до 0777 (который может быть большой угрозой безопасности), либо изменить владельца на демон или пользователь Apache (или ваш веб-сервер) работает.
  3. Размер файла больше, чем директива в php.ini. Да, PHP имеет конфигурационный файл php.ini, в котором установлен максимальный размер загруженного файла. Запустите find / -name php.ini если вы находитесь в Linux, чтобы найти файл. По умолчанию максимальный размер файла составляет 2 МБ.

Вы также должны попытаться обработать ошибку через $_FILE["file"]["error"] чтобы увидеть более подробную ошибку. Список ошибок содержится в официальной документации PHP здесь: http://php.net/manual/en/features.file-upload.errors.php

  • 0
    0774 да ... 0777 не так много
  • 0
    Я не получаю ваш комментарий. Вы подразумеваете, что chmod 0774 представляет собой угрозу безопасности, а chmod 0777 "не так уж много"? Извините, что скажу, что 0774 будет означать, что другие могут только читать, но не могут писать и выполнять, и это не создает угрозы безопасности. В случае, если вы предлагаете пользователю использовать chmod 0774 в директории для загрузки изображений, я все равно сожалею, что если директория принадлежит пользователю Debian (как пример), это демон пользователя (который использует Apache) не сможет загружать свои файлы из-за недостаточных прав.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню