отказано в разрешении move_uploaded_file для папки 777

#php #laravel #upload

#php #laravel #загрузка

Вопрос:

Вот ошибка, которую я получаю при попытке загрузки через ajax:

 move_uploaded_file(/public/assets/uploads/photodune-5351272-asian-traditional-bell-l.jpg): failed to open stream: Permission denied
 

Для моей папки uploads уже установлено значение 777 с помощью chmod. Это статус моей папки:

 drwxrwxrwx 2 ec2-user ec2-user 4096 Jun 20 10:46 uploads
 

Вот код, который я использую на стороне PHP:

 if (Input::hasFile('file')) {

    $storeFolder = '/assets/uploads/';

    if (!empty($_FILES)) {
        $tempFile = $_FILES['file']['tmp_name'];
        $targetPath = public_path() . $storeFolder;
        $targetFile =  $targetPath. $_FILES['file']['name'];
        move_uploaded_file($tempFile, $targetFile);

        echo $targetPath . " / " . $targetFile;
    }

} else {
    echo "There has been an error in creating the file";
}
 

Почему я все еще должен получать отказ в разрешении при попытке использовать move_uploaded_file?

Для удобства тестирования вы можете просмотреть загрузку файла и ошибки отсюда: http://www.relatient.net/relatientv2/public/portal/upload

Комментарии:

1. move_uploaded_folder ? что вы имеете в виду под этим? move_uploaded_folder это не функция или это функция на основе Laravel?

2. не используйте этот код. вы используете напрямую ['name'] , что злоумышленник может использовать для записи своего файла В ЛЮБОМ МЕСТЕ вашего сервера. И вы, похоже, вообще не проверяете загрузку и просто предполагаете, что она прошла успешно или что загрузка была выполнена в первую очередь.

3. Я использую это утверждение, чтобы проверить, был ли загружен файл: if (Input::HasFile(‘file’)) . Я добавлю проверку и чистый код, когда получу файл для фактической загрузки. И move_uploaded_folder должен был быть move_uploaded_file. Мозги вроде везде банкомат.

4. Я помню, что вчера видел аналогичный вопрос, в котором использование public_path() было проблемой, и человек, который дал ответ, предложил asset и т. Д. Просто не могу вспомнить все детали.

5. Фред, это не проблема, я фактически указал ему полный путь без использования какой-либо функции, и он все равно дал мне тот же ответ, что и при использовании public_path(). asset, он дает URL-адрес html, а не локальный путь на сервере.

Ответ №1:

По какой-то причине для папки assets также необходимо было установить значение 775, и сам laravel должен был это сделать: ./composer.phar dumpautoload .

После этого все загружается нормально.