PHP $_FILES ['file'] ['tmp_name']: Как сохранить имя файла и расширение?
Я пытаюсь загрузить файл документа из формы и отправить его по электронной почте. Я использую
$_FILES['file']['tmp_name'];
Проблема заключается в том, что она возвращает произвольно сгенерированное имя файла. Таким образом, когда он достигает папки "Входящие", имя файла phpvwRGKN.dat(имя файла является случайным каждый раз).
Как сохранить имя файла и расширение?
Примечание. Я использую класс geekMail
Ответы
Ответ 1
$_FILES['file']['tmp_name'];
будет содержать временное имя файла на сервере. Это всего лишь местозаполнитель на вашем сервере, пока вы не обработаете файл
$_FILES['file']['name'];
содержит исходное имя загруженного файла с пользовательского компьютера.
Ответ 2
$_FILES["file"]["name"] - the name of the uploaded file
из http://www.w3schools.com/php/php_file_upload.asp
Ответ 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);