move_uploaded_file (): второй аргумент функции copy () не может быть каталогом - PullRequest
0 голосов
/ 06 января 2020

Поэтому я хочу иметь возможность перемещать загруженные вложения в указанный каталог в зависимости от месяца внутри года.

Я получаю следующие две ошибки :

Предупреждение: move_uploaded_file (): вторым аргументом функции copy () не может быть каталог. Предупреждение: move_uploaded_file (): невозможно переместить '/ private / var / tmp / phptmfv0g' в 'uploads / 2020/01 '

Код :

$dir = "uploads/" . date('Y') . '/' . date('m');

if (!file_exists($dir)) {
    mkdir($dir, 0755, true);
}

move_uploaded_file($_FILES['rtk']['tmp_name']['5']['file'], $dir);

Таким образом, создается каталог для создания папок, но я не могу переместить файлы моей формы контакта в этот каталог вообще - что я могу делать по-другому?

enter image description here

Используется для размещения всех вложений в одном каталоге :

$file = "uploads/" . basename($this->get_last_name() . " - " . $this->get_first_name() . " - " . date("Y-m-d h:i:sa"));

move_uploaded_file($_FILES['rtk']['tmp_name']['5']['file'], $file);

Ответы [ 2 ]

3 голосов
/ 06 января 2020

Вам нужно указать каталог и имя файла для места назначения:

$dir  = "uploads/" . date('Y') . '/' . date('m');
$file = basename($_FILES['rtk']['name']['5']['file']);

if (!file_exists($dir)) {
    mkdir($dir, 0755, true);
}

move_uploaded_file($_FILES['rtk']['tmp_name']['5']['file'], "$dir/$file");

Или, если они существуют, использовать методы объекта, как вы делали ранее, чтобы построить имя файла:

$file = $this->get_last_name() . "-" . $this->get_first_name() . "-" . date("Y-m-d h:i:sa");
2 голосов
/ 06 января 2020

Точно так же, как говорится в ошибке, путь, который вы пытаетесь скопировать, является каталогом, а не путем к файлу

Проблема не в месяце

Дело в том, что путь заканчивается как : uploads/2020/01

Пока должно быть: uploads/2020/01/filename.ext

Вы можете получить оригинальное имя файла с помощью $_FILES['file']['name'] -> $_FILES['rtk']['name']['5']['file']

$dir = "uploads/" . date('Y') . '/' . date('m');
$fileName = $_FILES['rtk']['name']['5']['file'];
$fullPath = $dir . '/' . $fileName;

if (!file_exists($dir)) {
    mkdir($dir, 0755, true);
}

move_uploaded_file($_FILES['rtk']['tmp_name']['5']['file'], $fullPath);

- - Чтобы пользователи не могли заменять файлы друг друга, вы можете добавить уникальный префикс, например, просто используя uniqid()

$dir = "uploads/" . date('Y') . '/' . date('m');
$fileName = uniqid() . '_' . $_FILES['rtk']['name']['5']['file'];
$fullPath = $dir . '/' . $fileName;

if (!file_exists($dir)) {
    mkdir($dir, 0755, true);
}

move_uploaded_file($_FILES['rtk']['tmp_name']['5']['file'], $fullPath);
...