【问题标题】:PHP, Swift-mailer problemPHP, Swift-mailer 问题
【发布时间】:2010-12-25 18:23:09
【问题描述】:

当我点击我的联系页面上的提交按钮,尝试提交一个使用 swift-mailer 的表单时,我得到这个:

警告:fopen(上传/) [function.fopen]:打开失败 流:中没有这样的文件或目录 /home/polycys2/public_html/html/swift-mailer/lib/classes/Swift/ByteStream/FileByteStream.php 在第 131 行

Fatal error: Uncaught exception 'Swift_IoException' with message 'Unable to open file for reading [uploads/]' in /home/polycys2/public_html/html/swift-mailer/lib/classes/Swift/ByteStream/FileByteStream.php:133

Stack trace: 
#0 /home/polycys2/public_html/html/swift-mailer/lib/classes/Swift/ByteStream/FileByteStream.php(77): Swift_ByteStream_FileByteStream->_getReadHandle()
#1 /home/polycys2/public_html/html/swift-mailer/lib/classes/Swift/Mime/SimpleMimeEntity.php(660): Swift_ByteStream_FileByteStream->read(8192) 
#2 /home/polycys2/public_html/html/swift-mailer/lib/classes/Swift/Mime/SimpleMimeEntity.php(337): Swift_Mime_SimpleMimeEntity->_readStream(Object(Swift_ByteStream_FileByteStream)) 
#3 /home/polycys2/public_html/html/swift-mailer/lib/classes/Swift/Mime/SimpleMimeEntity.php(448): Swift_Mime_SimpleMimeEntity->getBody()
#4 /home/polycys2/public_html/html/swift-mailer/lib/classes/Swift/Mime/SimpleMimeEntity.php(463): Swift_Mime_SimpleMimeEntity->toString()
#5 /home/polycys2/public_html/html/swift-mailer/lib/classes/Swift/ in /home/polycys2/public_html/html/swift-mailer/lib/classes/Swift/ByteStream/FileByteStream.php on line 133

服务器上存在完整路径,尽管错误消息显示“没有这样的文件或目录。 可能是什么问题呢? 谢谢大家! 圣诞快乐!

【问题讨论】:

  • uploads/ 将相对于当前工作目录。该脚本中的工作目录是什么?试试getcwd()
  • 所以uploads/ 是一个文件?
  • @Pekka:无论哪种方式,打开一个目录(例如:fopen('/usr', 'r'); 不会产生错误。但是,即使它存在,它也可能不会做太多。
  • @netcoder Swift 似乎明确请求文件(请参阅异常的错误消息)

标签: php swiftmailer


【解决方案1】:

您需要提供uploads 的完整路径而不是实际路径,因为这将被解释为相对于试图打开附件的类文件。

在将路径传递给 Swift 之前尝试使用 realpath

$path = realpath('uploads/');

【讨论】:

  • 我在使用 SwiftMailer 和 Twig 以及 message.embed() 函数时遇到了与 Laravel 类似的问题。我没有意识到该函数使用的是整个脚本上下文和工作目录,而不是 Twig 上下文和基本目录。我必须使路径相对于整体上下文,即 laravel 的 public/ 目录,而不是 Twig 模板上下文和基本目录,这是我不假思索地使用的。
【解决方案2】:

感谢大家的帮助! 问题是我心不在焉——我忘了​​在那里创建“上传”目录。 现在它工作正常。 谢谢!

【讨论】:

    【解决方案3】:

    这对我有用:

    控制器.php

    $mail = Yii::$app->mailer->compose('@app/mail/embed-mail',
    [
         'term' => Url::to('@webroot/images/term.png'),
         'logo' => Url::to('@webroot/images/LOGO.jpg')
    ]
    

    并嵌入mail.php

    <img src="<?= $message->embed($terminal); ?>"/>
    <img src="<?= $message->embed($logo); ?>"/>
    

    我希望这对你有用

    【讨论】:

      【解决方案4】:

      从错误消息中,您似乎指定了一个需要文件路径的目录。可能是因为缺少应该包含文件名的变量。

      【讨论】:

        猜你喜欢
        • 2012-03-12
        • 1970-01-01
        • 2019-11-30
        • 2011-01-30
        • 2014-08-30
        • 1970-01-01
        • 1970-01-01
        • 2018-08-14
        • 1970-01-01
        相关资源
        最近更新 更多