Analitycs

Показаны сообщения с ярлыком хаки. Показать все сообщения
Показаны сообщения с ярлыком хаки. Показать все сообщения

вторник, 17 января 2012 г.

Email от PHPBB падает в spam

Диагноз и причина

Оповещения от русской версии PHPBB падают в спам.

X-Amavis-Alert: BAD HEADER SECTION, Non-encoded 8-bit data (char D3 hex): 
   Subject: 323342345344356354353345355350345 356341 
   356[...] 
X-Spam-Flag: NO 
X-Spam-Score: 4.301 
X-Spam-Level: **** 
X-Spam-Status: No, score=4.301 tagged_above=-10 required=5 
   tests=[BAYES_50=0.8, RCVD_IN_DNSWL_NONE=-0.0001, 
   SUBJECT_NEEDS_ENCODING=0.049, SUBJ_ILLEGAL_CHARS=1.518, 
   TO_NO_BRKTS_MSFT=1.934] autolearn=no

subject уходит с сервера в iso-8859-1/quoted. В этой кодировке русских букв нет.

Subject: 
   =?iso-8859-1?Q?=D3=E2=E5=E4=EE=EC=EB=E5=ED=E8=E5_=EE=E1_=EE=F2=E2?= 
   =?iso-8859-1?Q?=E5=F2=E5_=E2_=F2=E5=EC=E5_-_=D7=F2=EE_=ED=E5_=ED=F0=E0=E2?= 
   =?iso-8859-1?Q?=E8=F2=F1=FF_=ED=E0_=F1=E0=E9=F2=E5?=

Хотя тело сообщения - нормально в Windows-1251

MIME-Version: 1.0
Content-type: text/plain; charset=windows-1251 
Content-transfer-encoding: 8bit 

Лечение


Нужно изменить кодировку Subject на необходимую с русскими буквами(win1251, utf8, koi8r).

файл

PHPBB_DIR/include/emailer.php

после строчки

$this->subject = (($this->subject != '') ? $this->subject : 'No Subject');

Добавляется

$this->subject = '=?'.trim($lang['ENCODING']).'?B?'.base64_encode($this->subject).'?=';

И после - вуаля

X-Spam-Flag: NO 
X-Spam-Score: 0.034 
X-Spam-Level: 
X-Spam-Status: No, score=0.034 tagged_above=-10 required=4 
   tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, 
   TO_NO_BRKTS_MSFT=1.934] autolearn=no

По материалам этой темы, спасибо коллеге BW4ever за баг-репорт

суббота, 3 декабря 2011 г.

Как сделать sharding картинок в PHP между несколькими серверами?

Сегодня небольшой хак - боюсь, что скоро их будет тут больше, чем методически грамотных решений. ;-(

Когда вам нужно разшардить картинки/статические ресурсы по разным поддоменам для ускорения загрузки - можно использовать очень-очень грязный хак.

Дано

4 поддомена:
  • http://st1.xxx.ru
  • http://st2.xxx.ru
  • http://st3.xxx.ru
  • http://s4.xxx.ru
По ним и нужно раскидывать превьюшки - особенно это актуально, когда их много на страницах.

Функция получения url для превьюшки картинки после небольшой доработки выглядит так

 public function thumb_url($file = false) {
  $path = $this->path_by_file($file);
  $url = CMS_URL.'/'.$path.'/thumbs/'.$file;
  
  $key = md5($url) & 3;
  
  $static_url = 'http://st'.($key+1).'.xxx.ru/'.$path.'/thumbs/'.$file;
  
  return $static_url;
 }

Чем плох этот вариант?

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

А вот если так делать под большой нагрузкой для ключей сложных данных (которые рассчитываются сложно) - будет совсем плохо-плохо - полный пересчет кеша.

Короче - не делайте так.

А как правильно?

А как в том случае сделать подобное распределение методически грамотно  - это тема для отдельного поста. Может  быть и напишу, но позже.