2012年1月16日星期一

用 Drupal 架设多站点同步(Master/Slave)


目标:
一个主站点 www.master.com
多个子站点 www.slave1.com、www.slave2.com…
站点间用户同步,登陆状态(session)同步……
使用drupal架设,只需要一套drupal代码根据不同站点的不同配置文件分割,当然也可以用多套代码。
配置文件:
  • sites/default/settings.php – for master.com
  • sites/www.slave1.com/settings.php – for slave1.com
  • sites/www.slave2.com/settings.php – for slave2.com
共享用户
分别安装master.com、slave1.com和slave2.com的drupal,安装的时候设置数据表前缀(master_、slave1_和slave2_)
修改sites/www.slave1.com/settings.php

1
2
3
4
5
6
7
8
9
10
11
$db_prefix = array(
    'default' => 'slave1_',    // slave1.com 的表前缀为 slave1_
    'authmap' => 'master_',    // 对于共享的用户表使用主站master.com的数据, 表前缀为 master_
    'profile_fields' => 'master_',
    'profile_values' => 'master_',
    'role' => 'master_',
    'sequences' => 'master_',
    'sessions' => 'master_',
    'users' => 'master_',
    'users_roles' => 'master_',
);
修改sites/www.slave2.com/settings.php
1
2
3
4
5
6
7
8
9
10
11
$db_prefix = array(
    'default' => 'slave2_',    // slave2.com 的表前缀为 slave2_
    'authmap' => 'master_',    // 对于共享的用户表使用主站master.com的数据, 表前缀为 master_
    'profile_fields' => 'master_',
    'profile_values' => 'master_',
    'role' => 'master_',
    'sequences' => 'master_',
    'sessions' => 'master_',
    'users' => 'master_',
    'users_roles' => 'master_',
);
这样,就实现了用户同步,现在可以在任意一个站点注册新用户,然后到其他站点登陆作为测试。
session同步
下载Shared Sign-On
在各个站点都安装Shared Sign-On
在这个例子里master.com是主站点,所以设置所有的站点(包括主站点)的Shared Sign-On Master URL 为http://www.master.com/
好了,现在可以做到 session 同步了
还有高级点的多站点代码分开的实现可以参考 http://drupal.org/node/291373


小站本来是用两套drupal应用程序来管理两个站点的,数据库与drupal程序是1v1的关系。随即发现这样容易产生(1)安全漏洞,而且(2)管理,维护起来十分不便。听闻drupal 有一套很好的多站点管理机制,于是就google一下。
根据指引,我又重新回到了drupal程序里自带的INSTALL.txt中求解。
我希望达到如下需求:
1 . 用顶极域名停泊一个站。即 现在的 http://arpoon.info/ .
2 . 其他子站都以目录的形式来展示:比如我的中文站用 : http://arpoon.info/zh 作为入口。
3 . 各个站点都可以单独配置,单独展示,互不冲突。
4 . 各个子站独享一个数据库。
参考了INSTALL.txt 后,我惊喜地发现,里面的方法可以完全满足我的需要!太好了!现在翻译出来,给有需要的朋友 ^^

多站配置
-----------------------

了解了drupal的目录配置,我们回到第二点要求上,怎么能让站点通过http://example.com/sub 的方式访问呢? 方法很简单:只要在服务器的drupal根目录下建立一个symbol link 就可以了,比如要通过 http://arpoon.info/zh 来访问中文子站,那么就把zh目录建立在arpoon.info 根目录里:
 
---DRUPAL_ROOT
|---files
|---includes
|---misc
|---modules
|---profiles
|---scripts
|---sites
|---themes
单套drupal安装程序可以管理多个用drupal搭建的站。而且每个站点都可以有自己个性化的配置。
除了主站(第一个建立的drupal站)之外,新加入的子站点目录都应该配置在sites 目录下(sites是drupal根目录下的一个子目录,可参考drupal架构研究--目录组织结构梳理)。每一个子站目录都应该有一个'settings.php' 来指明配置信息。
最简单的方法是直接copy ./site/default/ 下 的settings.php到子站目录中。
新的子站目录有站点的url构成。如:对于新增站点: www.example.com ,那么其配置文件settings.php 就应该是 sites/example.com/settings.php (注意这里如果我们可以通过'http://example.com来访问的话,目录名中的'www'是应该省略的).
当然新加入的站点不一定要一个不同的域名。可以把站点停靠在一个子域名上或者原有的drupal站的子目录下。例如可以是:example.com,sub.example.com,sub.example.com/site3 .这些都可以用在独立的drupal站上。那么相应的服务器上的配置应该是像下面这样:
 
sites/default/settings.php
sites/example.com/settings.php
sites/sub.example.com/settings.php
sites/sub.example.com.site3/settings.php
当drupal为站点查找配置信息时,(如  www.sub.example.com/site3), 就会按照下面的顺序来查找配置,并会先应用第一个找到的配置来设置站点.
 
sites/www.sub.example.com.site3/settings.php
sites/sub.example.com.site3/settings.php
sites/example.com.site3/settings.php
sites/www.sub.example.com/settings.php
sites/sub.example.com/settings.php
sites/example.com/settings.php
sites/default/settings.php
如果你配置时没有用标准的http服务端口,那么这个端口将会当作最深层的子域名,例如:http://www.example.com:8080/ 的配置将通过读取sites/8080.www.example.com/目录下的配置来运行。如果没有指定端口,那么drupal 将忽略带端口的目录,而读取没带端口的目录中的配置文件。就像一个真实子域名一样对待。
除了安装在标准目录中的模块和界面主题外,每一个站点都会有它自己的模块和界面主题。要用特定的模块和界面主题,可以在你的子站目录下建立一个'modules'和'themes'目录如下:
 
+----arpoon.info (主站根目录)
+----sites
| +----arpoon.info.zh (子站根目录)
又例如:如果sub.example.com 有一个定制的theme 和一个定制的module,并且是只供此子站所用,不与其他站共享,那么就应该配置如下:
sites/sub.example.com/:
settings.php
themes/custom_theme
modules/custom_module

drupal modules


  • 常用drupal 模块

cck

为某个内容类型添加自定义字段。

Views

生成自定义节点或其他类型的列表。视图模块,可以定制区块、页面等。

Panels

允许网站管理员创建用于多种定制的布局,让您直观的设计布局内的布局和位置的内容。

Author Pane

captcha

为表单提供验证码的模块。防止恶意提交和垃圾信息。默认有算术和图片验证码两类。

Content Templates

为node部分提供自定义输出的信息和方式的一个好用模块,可以用web方式直接编辑node部分的主题,不过建议只参考其变量,然后写在node-*.tpl.php里。

date

日期模块。了解不深,日后补述。

devel

开发类模块。其中的theme developer可以很方便的获得主题开发信息。

fckeditor

功能强大完善的所见即所得编辑器。

globalredirect

url重定向模块,利于seo。开动巧思还有其他妙用:)

i18n(Internationalization)

网站多国化、多语言支持模块,非常强大,做多语言站必用模块。
刚用的时候不知道恁没找到,因为不知道i18n就是Internationalization,哈哈,叫i18n的原因是全名太长,i18n=第一个字幕“i”+中间18个字母+最后一个字母“n”。

imagecache

好用的图片模块,可以用来生成自定义大小、裁切方式等等的缩略图。添加相应action还可以用来生成有水印图片、增加特效等。

imce

图片类模块。可以生成缩略图。但我通常只用它来扩展fck的图片上传功能。

lightbox2

为图片应用lightbox特效,设置项很丰富,而且方便易用。并能与cck的imagefield整合。

Nice Menus

方便生成二级菜单的模块。

pathauto

按照你所定义的规则自动生成url别名的模块,很强大,seo必备模块。

plus1

投票类模块,给指定内容类型添加一个投票按钮。可指定是否在teaser或node页面显示。

privatemsg

站内短信模块,可设置邮件提醒。

token

个人必用模块,提供方便好用的置换符功能。

transliteration

解决上传中文文件名文件乱码以致找不到文件的问题。

User Relationships

站内好友模块。不是特别熟悉。

Google Analytics

Google 统计工具。


  • 其他模块

Administration menu

界面类。提供一个下拉菜单让你点击一两次鼠标就快速地访问大多数管理任务和其他常用的页面(为用户指定适当的权限)。用它可以会提高效率哦,推荐。
Boost 页面缓存,生成静态页面。
codefilter 代码高亮显示模块。
devel_themer druapl主题定制模块,可以非常方便查看主题的深度。
Tinymce 在线编辑器模块。
Global redirect 修正链接模块。
ubercart 电子商务模块。
Ubercart Marketplace ubercart扩展,可以查看自己的销售情况。
video 视频模块。
image 支持图片上传,并自动生成缩略图。
xmlsitemap 形成xml地图模块。
Site map 文本地图。
Simplenews 用户订阅模块。
nodewords 对每个页面添加关键字和描述等。
Page Title 自定义页面标题。
privatemsg:允许用户间发送私人信息。
Shared Sign-On module ,这个模块可以在网站切换中保持用户的登录状态,无需重新登录。
用法: 在每个子站的module中启用这个模块

2012年1月13日星期五

fetchmail + ssl 收取gmail邮件


fetchmail用来收邮件
procmail用来在你自己的机器上分拣邮件,你可以指定那个邮件列表的投递到什么邮箱里面去
msmtp这个用来发送邮件
gnupg用来发邮件的时候进行数字签名或者是验证别人的电子签名,当然还能加密电子邮件,反正就是和安全有关的东西了
mutt负责把这些东西组合起来
vim自然是用来写邮件了
为了方便 procmail msmtp gnupg 都在php里
收发邮件用户 spaul spaul
其他用户没有权限
邮件所在路径
获取邮件 :fetchmail -v
运行结果类似如下
fetchmail: 6.3.6 querying pop.gmail.com (protocol POP3) at Tue 03 May 2011 01:53:30 PM CST: poll started
Trying to connect to 74.125.127.109/995...connected.
fetchmail: Issuer Organization: Google Inc
fetchmail: Issuer CommonName: Google Internet Authority
fetchmail: Server CommonName: pop.gmail.com
fetchmail: pop.gmail.com key fingerprint: 90:9A:84:92:E7:60:7C:A2:45:73:C9:11:D7:FE:7D:8A
fetchmail: POP3< +OK Gpop ready for requests from 120.136.46.181 w5pf77488pbu.86
fetchmail: POP3> CAPA
fetchmail: POP3< +OK Capability list follows
fetchmail: POP3< USER
fetchmail: POP3< RESP-CODES
fetchmail: POP3< EXPIRE 0
fetchmail: POP3< LOGIN-DELAY 300
fetchmail: POP3< TOP
fetchmail: POP3< UIDL
fetchmail: POP3< X-GOOGLE-VERHOEVEN
fetchmail: POP3< X-GOOGLE-RICO
fetchmail: POP3< .
fetchmail: POP3> USER loveavsc@gmail.com
fetchmail: POP3< +OK send PASS
fetchmail: POP3> PASS *
fetchmail: POP3< +OK Welcome.
fetchmail: POP3> STAT
fetchmail: POP3< +OK 0 0
fetchmail: No mail for loveavsc@gmail.com at pop.gmail.com
fetchmail: POP3> QUIT
fetchmail: POP3< +OK Farewell.
fetchmail: 6.3.6 querying pop.gmail.com (protocol POP3) at Tue 03 May 2011 01:53:35 PM CST: poll completed
ssl证书
cd mail/.certs/
touch Thawte_Premium_Server_CA.pem
把下述内容复制进去
引用:
-----BEGIN CERTIFICATE-----
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
UCemDaYj+bvLpgcUQg==
-----END CERTIFICATE-----
touch Equifax_Secure_CA.pem
把下述内容复制进去
引用:
-----BEGIN CERTIFICATE-----
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
70+sB3c4
-----END CERTIFICATE-----
然后执行
引用:
c_rehash mail/.certs
php脚本
php script : /var/www/html/dev-site/bin/parse_email.php
cron配置
$crontab –e
说明:系统默认的编辑器是VIM,如果不是请加上以下shell:
$EDITOR=vi
$export EDITOR
输入”*/1 * * * * date >> $HOME/test.txt”,save and exit VIM
$su root
$cd /etc/init.d
./crond restart
1 * * * * php /var/www/html/dev-site/bin/parse_email.php 意思是每小时的第一分执行一次此脚本

postfix + procmail 邮件处理


由于客户需求更改为postfix + procmail 方案
procmail 总配置文件 /etc/procmailrc
每个 :0 相当于一个else if方案之执行一个
并且每个 :0 只能执行一个命令
DEFAULT=$HOME/Maildir/
MAILDIR=$HOME/Maildir
:0
* ^To: register.*
MAILDIR=/home/register/Maildir
$MAILDIR
:0
* ^To: unregister.*
MAILDIR=/home/unregister/Maildir
$MAILDIR
:0
* ^To: newsletter.*
MAILDIR=/home/newsletter/Maildir
$MAILDIR
用户配置文件
文件地址 /home/register/.procmailrc
PATH=$HOME/bin:/usr/bin:/usr/local/bin:TH=$HOME/bin:/usr/bin:/usr/local/bin:
DEFAULT=$HOME/Maildir/
MAILDIR=$HOME/Maildir
LOGFILE=$MAILDIR/procmaillog
VERBOSE=off
:0
* ^Subject: register.*
|php /var/www/html/dev-site/bin/register_mail.php
文件地址 /home/unregister/.procmailrc
PATH=$HOME/bin:/usr/bin:/usr/local/bin:TH=$HOME/bin:/usr/bin:/usr/local/bin:
DEFAULT=$HOME/Maildir/
MAILDIR=$HOME/Maildir
LOGFILE=$MAILDIR/procmaillog
VERBOSE=off
:0
* ^Subject: register.*
{
:0c:
/home/register/Maildir/
:0
|php /var/www/html/dev-site/bin/register_mail.php }
文件地址 /home/newsletter/.procmailrc
PATH=$HOME/bin:/usr/bin:/usr/local/bin:TH=$HOME/bin:/usr/bin:/usr/local/bin:
DEFAULT=$HOME/Maildir/
MAILDIR=$HOME/Maildir
LOGFILE=$MAILDIR/procmaillog
VERBOSE=off
:0
* ^Subject: unregister.*
{
:0c:
/home/unregister/Maildir/
:0
|php /var/www/html/dev-site/bin/unregister_mail.php }

輕輕鬆鬆設定 procmail 過濾垃圾信 --- 無痛無癢 垃圾信呴依係


Step 1: 在您的 home 底下的 .forward 檔中加入: (forward又是啥東東?)
"|/usr/local/bin/procmail",以後寄給您的郵件將會先交給 procmail 程式處理。
Step 2: 在你的home底下編輯 .procmailrc 這個檔案, procmail 程式就會根據您所編輯的.procmailrc進行處理
底下先看一個簡單的 .procmailrc 範例: (# 後面接著的是註解)
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Mail
DEFAULT=/var/mail/your_id #your_id 請填您在系上工作站的帳號
LOGFILE=$MAILDIR/from
:0 # rule 1 (每條規則由 :0 開頭)
* ^From.*berg # 條件式,可以好幾行喔 (記住:每一個條件一定要用 * 開頭喔)
from_me # Action line (如果在郵件標頭中如果有某一行開頭是 From 而且後面
# 接著若干字元後, 又接著 berg 字樣",就把這封信存到
# $MAILDIR/from_me 中, 其中 $MAILDIR 環境變數已經在
# 檔案的一開始設定好了.)
:0 # rule 2
* ^Subject:.*Flame
/dev/null # 信件標題有"Flame"字樣的信件都會被丟掉
# 注意: 如果有一封郵件都沒有符合所有的條件, 則會被存到 DEFAULT 環境變數指定的檔案
◆ 進階說明:
● 語法整理:
:0 [flags]
零行以上的條件式 (one per line, 每行條件都要以 * 開頭)
一行 action line
● 常用的flags:
c 將郵件copy一份
B 只檢查郵件的本體有無符合條件式
H 只檢查郵件的標頭有無符合條件式 (預設)
● 條件式符號: (有關條件式的其他用法, 請參照 man procmailrc)
! not
< num 郵件容量小於 num 個 byte
> num 郵件容量大於 num 個 byte
● action line
指明要如何處理郵件, 如果指定的是一個檔案, 則會把郵件加到
該檔案的最後, 如果指定的是一個目錄, 則會把郵件存到該目錄底下的某個檔
名(檔名各不相同). 除此之外:
! mail_addr 轉寄給指定的信箱
| program 使用指定的程式來處理
{ } 如果一行寫不完可以用大括號括起來
● 基本的 regular expression:
^ 一行的開頭
$ 一行的結尾
. 任何字元
a* 零個以上的 `a' 字元
a+ 至少一個以上的 `a' 字元
a? 零個或 1 個 `a' 字元
[a-d] a, b, c, 或 d
[^a-d] 除了 a, b, c, d 以外的字元
de|abc 字串`de' 或 字串`abc'
(abc)* 字串`abc'重覆出現零次以上
\. `.'
(想更詳細的了解 regular expression, 請參照介紹 regular expression 的書)
◆ 更多例子:(環境變數的部份同 Step 2 裡的範例)
1.
:0
* From.*@yahoo # 針對來源是 yahoo 的郵件做處理
{
:0 BH # 把從 yahoo 來的廣告信丟掉
* 賺錢的好機會
* 廣告
/dev/null
:0 BH
* > 20000000 # 有大於 20MB 的信直接丟掉
/dev/null # (因為信箱會爆吧@_@)
:0 c
* From.*judy # 如果是 judy 寄來的信..
mary@yahoo.com # 就"複製(注意 flag: c)"一份
# 並轉寄給 mary
}
# 如果不是從 yahoo 來的信, 就存到 default ( /var/mail/your_id )
2. 郵件備份 ( 使用這個請小心 quota 爆掉 :) )
:0 c
* Subject:.*重要 # 如果郵件主題有"重要"字眼..
mail_backup # 除了會存一份在 /var/mail/your_id 外,還會在
# 您的 home 底下的 Mail/mail_backup 另存一份.
3. 想看更多的例子, 請 man procmailex

使用 mmencode 轉換 Email 原始編碼


有時後我們查郵件原始檔,會看到 Subject: =?big5?B?Rlc6IGJhbm5lciuxwMLLpqilXLVlrbGt16fv?=
這就是經編碼過後長的樣子,那我要如何將它還原回我看的懂的字元
使用 mmencode
1. 到這裡 http://ftp.nluug.nl/mail/mh/contrib/multimedia/ 下載兩個檔案 codes.c.gz 與 mmencode.c.gz mmencode.zip (4.23 KB ,下載:39次)
2. 解開 gzip -d codes.c.gz mmencode.c.gz 到同一個目錄裡
3. 編譯 cc -o mmencode codes.c mmencode.c
4. 產生 mmencode 就可以了
Subject: =?big5?B?Rlc6IGJhbm5lciuxwMLLpqilXLVlrbGt16fv?=
接下來要解碼,它是以 ? 區隔
這個主旨是 big5,而 Rlc6IGJhbm5lciuxwMLLpqilXLVlrbGt16f 就是真正的主旨
echo "Rlc6IGJhbm5lciuxwMLLpqilXLVlrbGt16fv" | mmencode -u 會顯示出看的懂的語言了
而 -u 即是我要解碼 base64,那我怎麼知道是base64,在big5?B? 這個大B就代表 Base64
如果是 ?Q? 的話則是 quoted-printable,就要用 mmencode -q
有時後會是 =?UTF-8?,這時可以搭配 iconv 來作轉換

日本手机Subject和Message

原本utf8编码需要转换成iso-2022-jp
日本手机大部分不能识别utf8,只能识别iso-2022-jp

$subject = (stristr($email, '.com')) ? $title : '=?iso-2022-jp?b?' . base64_encode(iconv('utf-8', 'iso-2022-jp', $title)) . '?=';
$message = (stristr($email, '.com')) ? $body : iconv('utf-8', 'iso-2022-jp', $body);
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-2022-jp' . "\r\n";
// Additional headers
//$headers .= 'To: ' . $to . "\r\n";
$from = 'xxxx@bluhbluh.mobi';
$headers .= 'From: ' . $from . "\r\n";
$headers .= 'CC: ' . $cc . "\r\n";
mail($email, $subject, $message, $header);
?>

日本bosch(博世)项目告一段落


特色功能:
drupal搭建
根据设备选用不同theme(主题)
postfix + procmail + php处理邮件
采用模块:
cck
google_cse_adv(google本站搜索)
google_analytics
imageapi
imagecache
imagefield
location(google地图)
logintoboggan
mobile_tools + browscap + wurfl (选择手机theme)
pathauto + token(自动生成seo link)
views
xmlsitemap

2012年1月5日星期四

为何现在的女人上面穿羽绒服下面却穿丝袜


1.”为何现在的女人上面穿羽绒服下面却穿**.” “问得好!因为鲜奶要保温、火腿要冷藏.”
2.他们说网络很假,我笑了,好像现实很真一样。
3、如果你同时爱上了两个人,请选择第二个.因为如果你真的爱第一个,就不会爱上第二个.
4.不要让你的女朋友有蓝颜,因为她蓝着蓝着你就绿了,不要让你的男朋友有红颜,因为他红着红着你俩就黄了。
5.顺眼了,追了,好了,吻了,吵了,淡了,厌了,散了,假装不认识了,背后骂你了,彻底不认识了,以至于让我崩溃了
6.当今社会,生米煮成熟饭已经没有用了,就算变成爆米花,该跑的还是会跑。

7.我不是超级玛丽,顶不出你要的人民币。
8.女人爱化妆,男人爱说谎。女人化妆欺骗男人的眼。男人说谎欺骗女人的心
9.都说男人是骗子、谁又知道有多少男人被女人骗过。
10.女人总羡慕红太狼有那么爱她的灰太狼,却忘记了灰太狼没抓到羊的这几年,红太狼对他的不离不弃
11.说了晚安去睡的人、往往半小时以后还在得瑟丶
12.︶╯ ﹣她们都装处。我只好装经验丰富
13. KTV里 ,我们喊破嗓子唱着自己不敢说的心情。
14.一直对发型不满意的人,有一个共同点:不肯承认这是脸的问题。
15.他婶的,(失恋33天)就可以拍一部电影,那哥的失恋经历都可以拍一部电视剧了。
16.再丑的人也能结婚、再美的人也有单身 -
17.一个比红钻还红的女人,爱上了一个比黄钻还黄的男人。最后来了个比绿钻还绿的小三,生出个儿子,叫会员。
18.- 男人啊男人,别嫌女人烦.不让你抽烟不让你喝酒.等到她有一天去烦别人了,你就乐呵了是不是?
19.CF页面上的那句禁止未成年人进入,就跟烟盒上的那句吸烟有害健康一样, 都是废话
20.¢ 其实单身挺好、和谁暧昧都不需要解释。
21.讨厌我。没关系,我不介意。我活着不是为了取悦你。
22.月老,你能不能别在用劣质的线给我牵了嘛,隔三差五就断。
23. “好名声,是女人最好的嫁妆 ヽ。
24.我觉得 《伤不起》 比 《忐忑》 还吓人 //
25. ——- 。 一句我难受,可以换来多少人的一句 我马上就来
26.总有一群隐身的朋友如死人一般躺在你的好友列表里,偶尔诈诈尸,时不时还会改改他们的墓志铭。
27. 暗恋我的人。 你们怎么那么沉得住气阿
28.你曾通话对我说:“你是我的全部。” 两年后一次通话:“你是谁”?
29.这么拼命只是想让曾经看不起我的人, 闭嘴。
30.甲:好烫 乙:什么烫 甲:水 乙:慢点喝 甲:洗脚水…
31.- 十年前,我能一掌打死你爸爸, 十年后我照样能一掌打死你… 去死吧 死蚊子~!!
32.问一个淡淡的问题:鸟儿为什么爱在电线上排排坐?最佳解释是,在线才能聊天。
33.// 泼出去的水 , 老子连盆子都不要了 .
34.刚刚一男生加了姐的Q说我喜欢上你了!姐沉默了一会说:怎么说得像你上过我似的?
35.成功人生四步曲:1、耐住寂寞;2、抵住**;3、懂得放弃;4、学会选择
36. 有多少人因为没钱而失去一段幸福
37.明明只删了一个你,却空了一整个列表 ﹌
38.其实,想开了,世界上的一切问题,都能用“关你屁事”和“关我屁事”来回答。。。
39.卖花的小姑娘拉着我:“大哥哥,买花吧,一看就知道你是花心的人”……
40.- 得不到并不可怕守不住才是个笑话
41.我笑了 有多少情侣因为父母的一句不同意而分手
42. 忘记一个人只需要两样 新欢与时间
43. 男人没钱才会说女人爱钱 //
44.喊疼的不一定是处女 但勾引男人的一定是婊 子。
45. 女人没有所谓的忠贞, 只要出现了对她更好的人, 她就会变心
46.゛つ -胖子看武侠剧最喜欢听的一句台词就是 “瘦死吧!”. ____ ゛
47.“尔康,你现在幸福吗?” “紫薇,你忘了?我一直就姓福啊!”
48.你脸上的痘真多,拖拉机开上去都会翻车!
49.每天起床,都要和心爱的被子上演:抵死缠绵、你侬我侬、恋恋不舍、含恨而去的虐心虐身虐恋大戏
50.人生为棋 我愿为卒 行动虽慢 可谁曾见我后退一步。
51.老师说:快要中考了,早恋的就不要吵架了,以免影响心情;没早恋的就不要表白了,以免被拒绝影响心情
52.﹏丶男 人 总 是 说 一 套 做 一 套 , 关 键 时 候 还 带 个 套 // 。

上海松善实业有限公司

    上海松善实业有限公司是一家集多品牌销售于一体的电线电缆骨干企业,公司成立于2016年。 公司拥有国内各大品牌:起帆、远东、上上、江南、胜华等。     主要产品有:高低压电力电缆、橡套电缆、控制电缆、架空绝缘电缆、塑胶电缆、电子计算机电缆、通讯电缆、...