/tmp(或其他类似文件夹位置)是否有 symfony 值?
Is there a symfony value for /tmp (or other similar folder location)?
我有一个 Symfony 3.3 应用程序可以成功发送带有附件的电子邮件。相关函数如下所示:
private function sendEmail($data)
{
$vgmsContactMail = self::contactMail;
$mailer = $this->get('mailer');
/* @var $uploadedFile UploadedFile */
$uploadedFile = $data["attachment"];
$extension = $uploadedFile->guessExtension();
if(!in_array($extension, ['pdf','rtf']) ){
die('Please upload a .pdf or .rtf file.');
}
$newFilePath = '/tmp';
$newFileName = 'temporary' . rand(0,10000) . '.rtf';
$uploadedFile->move($newFilePath, $newFileName);
$attachment = \Swift_Attachment::fromPath('/tmp/' . $newFileName);
$message = \Swift_Message::newInstance("VGMS Contact Form: ". $data["subject"])
->setFrom(array($vgmsContactMail => "Message by ".$data["name"]))
->setTo(array(
$vgmsContactMail => $vgmsContactMail
))
->setBody($data["message"]."<br>ContactMail :".$data["email"])
->attach($attachment)
;
return $mailer->send($message);
}
我的问题是对 /tmp
目录进行硬编码感觉非常脆弱。 有没有更优雅的方式获取临时文件存放目录的路径?
要知道实际的 tmp 文件夹,您可以使用此功能
sys_get_temp_dir();
来源:http://php.net/manual/fr/function.sys-get-temp-dir.php
你可以这样使用它:
$newFileName = tempnam(sys_get_temp_dir(), 'myAppNamespace');
并且您将拥有具有随机和唯一名称的完整文件路径。
不是 link 你的第一个问题,但我注意到你的代码没有什么问题:
$newFileName = 'temporary' . rand(0,10000) . '.rtf';
您的代码中有硬编码的扩展类型。但您之前的检查是关于 pdf/rtf 扩展名的。
我的解决方案也会解决这个问题。
我有一个 Symfony 3.3 应用程序可以成功发送带有附件的电子邮件。相关函数如下所示:
private function sendEmail($data)
{
$vgmsContactMail = self::contactMail;
$mailer = $this->get('mailer');
/* @var $uploadedFile UploadedFile */
$uploadedFile = $data["attachment"];
$extension = $uploadedFile->guessExtension();
if(!in_array($extension, ['pdf','rtf']) ){
die('Please upload a .pdf or .rtf file.');
}
$newFilePath = '/tmp';
$newFileName = 'temporary' . rand(0,10000) . '.rtf';
$uploadedFile->move($newFilePath, $newFileName);
$attachment = \Swift_Attachment::fromPath('/tmp/' . $newFileName);
$message = \Swift_Message::newInstance("VGMS Contact Form: ". $data["subject"])
->setFrom(array($vgmsContactMail => "Message by ".$data["name"]))
->setTo(array(
$vgmsContactMail => $vgmsContactMail
))
->setBody($data["message"]."<br>ContactMail :".$data["email"])
->attach($attachment)
;
return $mailer->send($message);
}
我的问题是对 /tmp
目录进行硬编码感觉非常脆弱。 有没有更优雅的方式获取临时文件存放目录的路径?
要知道实际的 tmp 文件夹,您可以使用此功能
sys_get_temp_dir();
来源:http://php.net/manual/fr/function.sys-get-temp-dir.php
你可以这样使用它:
$newFileName = tempnam(sys_get_temp_dir(), 'myAppNamespace');
并且您将拥有具有随机和唯一名称的完整文件路径。
不是 link 你的第一个问题,但我注意到你的代码没有什么问题:
$newFileName = 'temporary' . rand(0,10000) . '.rtf';
您的代码中有硬编码的扩展类型。但您之前的检查是关于 pdf/rtf 扩展名的。
我的解决方案也会解决这个问题。