Здравствуйте! Я написал следующий код:
```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);
```
Таким образом, каждый файл будет обрабатываться по отдельности и загружаться на сервер. Обратите внимание, что вам также стоит убедиться в безопасности загружаемых файлов, проверяя их типы и размеры перед загрузкой.
Здесь все неправильно. <br/> Первая строка - путь к папке, которой нет на вашем ПК (да и на рельном сервере такого не будет в 99,99%) <br/> Вторая строка - не секьюрно. В идеале пользователь никак не должен влиять на выбор имени файла, под которым он сохраниться. <br/> if move_upload_file - никаких проверок на атаку сайта не делает. <br/> <br/> Ну и ошибка у вас в коде html формы, которая шлет данные. <br/> Посмотрите что вы там с именем поля (card-img) input сделали. Или квадратные скобки или возможно несколько раз с одним именем написали.
<blockquote>Подскажите, что не так</blockquote> <br/> 1) Вы не читаете и не осмысливаете текст ошибки. Не в смысле глазами, а в смысле "что там произошло то?". Для вас текст ошибки проблема, а не путь решения. <br/> 2) Не проверяете то, что интерпретатор считает неправильным, что как бы прямое следствие п.1. <br/> 3) Считаете что знаете что на самом деле лежит в переменных, не заглядывая в реальные данные.