#php #ubuntu #imap #dovecot #roundcube
Вопрос:
Так что в основном я искал решение уже два дня подряд, и, похоже, ничего не помогает.
Я использую почтовый клиент Roundcube с IMAP, postfixadmin и dovecot, и всякий раз, когда я пытаюсь загрузить вложения, я получаю внутреннюю ошибку сервера. Вот кое-что, что мне удалось уловить в журналах:
[11-Nov-2021 01:41:27 UTC] PHP Fatal error: Uncaught TypeError: fclose(): Argument #1 ($stream) must be of type resource, null given in /var/www/roundcube/program/lib/Roundcube/rcube_imap_generic.php:430 Stack trace: #0 /var/www/roundcube/program/lib/Roundcube/rcube_imap_generic.php(430): fclose() #1 /var/www/roundcube/program/lib/Roundcube/rcube_imap_generic.php(1149): rcube_imap_generic-gt;closeSocket() #2 /var/www/roundcube/program/lib/Roundcube/rcube_imap.php(215): rcube_imap_generic-gt;closeConnection() #3 /var/www/roundcube/program/lib/Roundcube/rcube.php(1038): rcube_imap-gt;close() #4 /var/www/roundcube/program/include/rcmail.php(921): rcube-gt;shutdown() #5 [internal function]: rcmail-gt;shutdown() #6 {main} thrown in /var/www/roundcube/program/lib/Roundcube/rcube_imap_generic.php on line 430
На сервере много настроек, поэтому, если вы считаете, что некоторые из них вам нужны для отладки, просто спросите, и я с радостью помещу их здесь
РЕДАКТИРОВАТЬ: Я сделал краткое видео со всеми происходящими событиями. Вы можете видеть, что загрузка «не удалась» с сообщением об ошибке внутреннего сервера, но после обновления страницы вложение есть, и оно отправляется по электронной почте, и после получения этого письма я не вижу предварительного просмотра вложения в электронном письме, но когда я нажимаю на него, я вижу его и загружаю.
Комментарии:
1. Значит, проблема возникает только в веб-почте roundcube ?
2. Да, только при попытке загрузить вложение. Забавно, что, даже если я получаю внутреннюю ошибку сервера при попытке загрузить приложение, оно все равно отправляется по электронной почте, и я могу видеть это при составлении электронного письма, если я обновлю страницу после загрузки. Кроме того, я попытался отправить себе электронное письмо с вложением и получил его, но, как только я открываю полученное электронное письмо, я получаю внутреннюю ошибку сервера, но я все еще могу загрузить вложение, а затем открыть его нормально, так что похоже, что возникла проблема с отображением вложений.
3. Временная папка, в которой хранятся вложения, имеет 777 разрешений и принадлежит пользователю www-данных, поэтому это не должно быть проблемой с разрешениями
Ответ №1:
После нескольких долгих дней мне, наконец, удалось разобраться в этом самостоятельно, и это действительно просто. Итак, происходит то, что rounducbe пытается закрыть файл, которого не существует.
Итак, всем вам, кто сталкивается с той же проблемой, чтобы исправить это, вам необходимо отредактировать файл «path/to/roundcube/program/lib/Roundcube/rcube_imap_generic.php» в строке 430 Измените это:
protected function closeSocket() { @fclose($this-gt;fp); $this-gt;fp = null; }
В это:
protected function closeSocket() { if($this-gt;fp){ @fclose($this-gt;fp); } $this-gt;fp = null; }
Комментарии:
1. вы сообщили об этом команде roundcube ?
2. Даже не знал, что у них есть какие-то отчеты о проблемах. Сделаю это, спасибо, что указали на это.