Здравствуйте! Я написал следующий код: ```php $uploaddir = '/var/www/uploads/'; $uploadfile = $uploaddir . basename($_FILES['card-img']['name']); echo '<pre>'; if (move_uploaded_file($_FILES['card-img']['tmp_name'], $uploadfile)) { echo "Файл не содержит ошибок и успешно загрузился на сервер.\n"; } else { echo "Возможная атака на сервер через загрузку файла!\n"; } echo 'Дополнительная отладочная информация:'; print_r($_FILES); ``` Однако он выдает следующую ошибку: ``` Fatal error : Uncaught TypeError: basename(): Argument #1 ($path) must be of type string, array given in /Users/mihail_razmyslovitch/Desktop/Proekty web design/project-fest/admin/news-admin.php:14 Stack trace: #0 /Users/mihail_razmyslovitch/Desktop/Proekty web design/project-fest/admin/news-admin.php(14): basename(Array) #1 {main} passed in /Users/mihail_razmyslovitch/Desktop/Proekty web design/project-fest/admin/news-admin.php on line 14 ``` Могли бы вы подсказать, в чем может быть проблема?
Ошибка, которую вы получаете, указывает на то, что переменная `$_FILES['card-img']['name']` является массивом, а не строкой. Это может произойти, если вы разрешили загрузку нескольких файлов в вашем HTML-форме, используя атрибут `multiple`. В этом случае `$_FILES['card-img']` будет массивом, содержащим информацию о каждом загруженном файле. Если вы хотите загрузить только один файл, убедитесь, что в вашей HTML-форме не установлен атрибут `multiple`. Например: ```html <form enctype="multipart/form-data" method="POST"> <input type="file" name="card-img"> <input type="submit" value="Загрузить"> </form> ``` Если вы действительно хотите поддерживать загрузку нескольких файлов, вам нужно изменить свой код, чтобы обработать массив файлов. Вот пример того, как это можно сделать: ```php $uploaddir = '/var/www/uploads/'; foreach ($_FILES['card-img']['name'] as $key => $name) { $uploadfile = $uploaddir . basename($name); echo '<pre>'; if (move_uploaded_file($_FILES['card-img']['tmp_name'][$key], $uploadfile)) { echo "Файл $name успешно загружен на сервер.\n"; } else { echo "Возможная ошибка при загрузке файла $name.\n"; } } echo 'Дополнительная отладочная информация:'; print_r($_FILES); ``` Таким образом, каждый файл будет обрабатываться по отдельности и загружаться на сервер. Обратите внимание, что вам также стоит убедиться в безопасности загружаемых файлов, проверяя их типы и размеры перед загрузкой.
Здесь все неправильно.
Первая строка - путь к папке, которой нет на вашем ПК (да и на рельном сервере такого не будет в 99,99%)
Вторая строка - не секьюрно. В идеале пользователь никак не должен влиять на выбор имени файла, под которым он сохраниться.
if move_upload_file - никаких проверок на атаку сайта не делает.
Ну и ошибка у вас в коде html формы, которая шлет данные.
Посмотрите что вы там с именем поля (card-img) input сделали. Или квадратные скобки или возможно несколько раз с одним именем написали.
Подскажите, что не так
1) Вы не читаете и не осмысливаете текст ошибки. Не в смысле глазами, а в смысле "что там произошло то?". Для вас текст ошибки проблема, а не путь решения.
2) Не проверяете то, что интерпретатор считает неправильным, что как бы прямое следствие п.1.
3) Считаете что знаете что на самом деле лежит в переменных, не заглядывая в реальные данные.