#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 .
После этого все загружается нормально.