/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 扩展名的。

我的解决方案也会解决这个问题。