/ tmp(或其他类似的文件夹位置)是否有symfony值?

时间:2018-03-15 08:53:12

标签: php symfony filesystems swiftmailer

我有一个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目录的硬编码感觉非常脆弱。 是否有更优雅的方式来获取存储临时文件的目录的路径?

1 个答案:

答案 0 :(得分:2)

要知道实际的tmp文件夹,你可以使用这个功能

sys_get_temp_dir();

来源:http://php.net/manual/fr/function.sys-get-temp-dir.php

您可以像这样使用它: $newFileName = tempnam(sys_get_temp_dir(), 'myAppNamespace');您将拥有包含随机和uniq名称的完整文件路径。

没有链接到您的第一个问题,但我发现您的代码几乎没有问题: $newFileName = 'temporary' . rand(0,10000) . '.rtf';

您的代码上有硬编码扩展类型。但您之前的检查是关于pdf / rtf扩展名。

我的解决方案也将解决此问题。