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

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

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

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

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

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

Solutions Collecting From Web of "PHP $ _FILES : Как сохранить имя файла и расширение?"

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

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

$_FILES["file"]["name"] - the name of the uploaded file

с http://www.w3schools.com/php/php_file_upload.asp

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

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

Если вы хотите получить имя загруженного файла, используйте $_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

Просто предложение, но вместо этого вы можете попробовать класс 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);