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