Проблема с PHP, Swift-почтовиком

Когда я нажимаю кнопку отправки на моей странице контактов, пытаясь отправить форму, использующую swift-mailer, я получаю следующее:

Предупреждение: fopen(uploads/) [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

Полный путь существует на сервере, хотя в сообщении об ошибке говорится: «Нет такого файла или каталога. В чем может быть проблема? Спасибо всем заранее! И счастливого Рождества!


person vlevsha    schedule 25.12.2010    source источник
comment
uploads/ будет относиться к текущему рабочему каталогу. Какой у вас рабочий каталог в этом скрипте? Попробуйте getcwd().   -  person netcoder    schedule 25.12.2010
comment
Итак, uploads/ — это файл?   -  person Pekka    schedule 25.12.2010
comment
@Pekka: В любом случае открытие каталога (например: fopen('/usr', 'r'); не приводит к ошибке. Однако, вероятно, это мало что даст, даже если он существует.   -  person netcoder    schedule 25.12.2010
comment
@netcoder Swift явно запрашивает файл (см. сообщение об ошибке исключения)   -  person Pekka    schedule 25.12.2010


Ответы (4)


Вам нужно указать полный путь к uploads, а не реальный путь, потому что он будет интерпретироваться как относящийся к файлу класса, который пытается открыть ваше вложение.

Попробуйте использовать realpath перед передачей пути к Swift.

$path = реальный путь('загрузки/');

person prodigitalson    schedule 25.12.2010
comment
У меня была аналогичная проблема с Laravel, с использованием SwiftMailer и Twig и функции message.embed(). Я не понимал, что функция использует общий контекст сценариев и рабочий каталог, а не контекст Twig и базовый каталог. Мне пришлось сделать пути относительно общего контекста, т. е. общедоступного / каталога laravel, вместо контекста шаблона Twig и базового каталога, которые я использовал, не задумываясь. - person Aaron Wallentine; 17.11.2016

Спасибо за вашу помощь! Проблема заключалась в моей рассеянности - я забыл создать там каталог "upload". Теперь он работает нормально. Спасибо!

person vlevsha    schedule 25.12.2010

Это работает для меня:

Контроллер.php

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

И embed-mail.php

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

Я надеюсь, что это работает для вас

person Fabian Ortiz    schedule 11.04.2019

Судя по сообщениям об ошибках, вы указываете каталог, в котором требуется путь к файлу. Возможно, из-за отсутствия переменной, которая должна содержать имя файла.

person Pekka    schedule 25.12.2010