Подтвердить что ты не робот

PHP $_FILES ['file'] ['tmp_name']: Как сохранить имя файла и расширение?

Я пытаюсь загрузить файл документа из формы и отправить его по электронной почте. Я использую

$_FILES['file']['tmp_name'];

Проблема заключается в том, что она возвращает произвольно сгенерированное имя файла. Таким образом, когда он достигает папки "Входящие", имя файла phpvwRGKN.dat(имя файла является случайным каждый раз).

Как сохранить имя файла и расширение?

Примечание. Я использую класс geekMail

4b9b3361

Ответ 1

$_FILES['file']['tmp_name']; будет содержать временное имя файла на сервере. Это всего лишь местозаполнитель на вашем сервере, пока вы не обработаете файл

$_FILES['file']['name']; содержит исходное имя загруженного файла с пользовательского компьютера.

Ответ 3

$_FILES["file"]["tmp_name"] содержит фактическую копию содержимого вашего файла на сервере, а $_FILES["file"]["name"] содержит имя файла, который вы загрузили с клиентского компьютера.

Ответ 4

Как упоминает выше @Gabi Purcaru, правильным способом переименования и перемещения файла является использование move_uploaded_file(). Он выполняет некоторые проверки безопасности для предотвращения уязвимостей и других уязвимостей. Вам нужно будет дезинфицировать значение $_FILES['file']['name'], если вы хотите использовать его или расширение, полученное из него. Используйте pathinfo ($_FILES['file']['name'], PATHINFO_EXTENSION), чтобы безопасно получить расширение.

Ответ 5

Если вы хотите получить имя загруженного файла, используйте $_FILES["file"]["name"]

Но если вы хотите прочитать загруженный файл, вы должны использовать $_FILES["file"]["tmp_name"], потому что tmp_name является временной копией вашего загруженного файла, и это проще, чем использование

$_FILES["file"]["name"] // This name includes a file path, which makes file read process more complex

Ответ 6

Просто предложение, но вместо этого вы можете попробовать класс Pear Mail_Mime.

http://pear.php.net/package/Mail_Mime/docs

В противном случае вы можете использовать немного кода. Метод использования rename() Gabi Purcaru не будет работать так, как он написал. См. Этот пост http://us3.php.net/manual/en/function.rename.php#97347. Вам понадобится что-то вроде этого:

$dir = dirname($_FILES["file"]["tmp_name"]);
$destination = $dir . DIRECTORY_SEPARATOR . $_FILES["file"]["name"];
rename($_FILES["file"]["tmp_name"], $destination);
$geekMail->attach($destination);