生命之中的最大错误在于:终日担心犯错误。— 爱尔伯特·哈伯德 (Elbert Hubbard 1856-1915),《笔记》
要配置一个postfix发邮件,需要以 xx@test.aslibra.com 发送邮件
同时提供smtp服务给局域网其它服务器提供发送邮件服务
安装好postfix后,可以参考如下配置文件(去掉注释内容):
/etc/postfix/main.cf
PHP发送邮件可以使用phpmailer
扩展阅读:
1 带smtp认证的postfix配置
http://hi.baidu.com/jedibd/blog/item/7b73ab25a7b7e06d35a80f45.html
2 CentOS下(PostFix)SMTP服务器的构建
http://www.fuancn.cn/html/ServerSettings/Linux/CentOS/20084288.html
3 phpmailer,smtp发送邮件实例
http://blog.51yip.com/php/910.html/comment-page-1
4 postfix邮件服务的基本配置
http://eastwalk.blogbus.com/logs/57585048.html
5 Postfix服务的基本配置
http://book.51cto.com/art/200904/118655.htm
6 telnet smtp发邮件
http://hi.baidu.com/guixiao_zhou/blog/item/49f8a73259a9f2210a55a9ec.html
7 簡易 Mail Server 架設 -- Postfix 設定
http://linux.vbird.org/linux_server/0390postfix.php
同时提供smtp服务给局域网其它服务器提供发送邮件服务
安装好postfix后,可以参考如下配置文件(去掉注释内容):
/etc/postfix/main.cf
myhostname = test.aslibra.com
mydomain = test.aslibra.com
mynetworks = 192.168.1.0/24, 127.0.0.0/8
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myorigin = $myhostname
inet_interfaces = all
unknown_local_recipient_reject_code = 550
relay_domains = $mydestination
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.3.3/samples
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
mydomain = test.aslibra.com
mynetworks = 192.168.1.0/24, 127.0.0.0/8
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myorigin = $myhostname
inet_interfaces = all
unknown_local_recipient_reject_code = 550
relay_domains = $mydestination
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.3.3/samples
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
PHP发送邮件可以使用phpmailer
include('libraries/class.phpmailer.php');
$mail = new PHPMailer();
$mail->CharSet="UTF-8";
$mail->IsSMTP(); // 经smtp发送
$mail->Host = $this->smtp_ip; // SMTP 服务器
$mail->SMTPAuth = false; // 局域网不需要SMTP 认证
$mail->From = $from; // 发信人
$mail->FromName = $fromuser; // 发信人别名
$mail->Sender = $from;
$mail->AddAddress($to); // 收信人
if(isset($ccmail)){
$mail->AddCC($ccmail); // cc收信人
}
if(isset($bccmail)){
$mail->AddCC($bccmail); // bcc收信人
}
$mail->WordWrap = 50;
$mail->IsHTML(true); // 以html方式发送
$mail->Subject = $title; // 邮件标题
$mail->Body = $content; // 邮件内空
$mail->Send();
$mail = new PHPMailer();
$mail->CharSet="UTF-8";
$mail->IsSMTP(); // 经smtp发送
$mail->Host = $this->smtp_ip; // SMTP 服务器
$mail->SMTPAuth = false; // 局域网不需要SMTP 认证
$mail->From = $from; // 发信人
$mail->FromName = $fromuser; // 发信人别名
$mail->Sender = $from;
$mail->AddAddress($to); // 收信人
if(isset($ccmail)){
$mail->AddCC($ccmail); // cc收信人
}
if(isset($bccmail)){
$mail->AddCC($bccmail); // bcc收信人
}
$mail->WordWrap = 50;
$mail->IsHTML(true); // 以html方式发送
$mail->Subject = $title; // 邮件标题
$mail->Body = $content; // 邮件内空
$mail->Send();
扩展阅读:
1 带smtp认证的postfix配置
http://hi.baidu.com/jedibd/blog/item/7b73ab25a7b7e06d35a80f45.html
2 CentOS下(PostFix)SMTP服务器的构建
http://www.fuancn.cn/html/ServerSettings/Linux/CentOS/20084288.html
3 phpmailer,smtp发送邮件实例
http://blog.51yip.com/php/910.html/comment-page-1
4 postfix邮件服务的基本配置
http://eastwalk.blogbus.com/logs/57585048.html
5 Postfix服务的基本配置
http://book.51cto.com/art/200904/118655.htm
6 telnet smtp发邮件
http://hi.baidu.com/guixiao_zhou/blog/item/49f8a73259a9f2210a55a9ec.html
7 簡易 Mail Server 架設 -- Postfix 設定
http://linux.vbird.org/linux_server/0390postfix.php
[转] 事情是这个样儿的,折腾了好几天就是搞不明白为啥设置了.ssh目录,在authorized_keys设置了key后登录还提示需要输入密码。捞干的,说怎么解决吧,注意权限,.ssh权限700,authorized_keys权限600,就OK啦!~~~~
---------------------
一直很困惑要求输入密码,原来是不知道哪个操蛋的把root文件夹改777
drwxrwxrwx 11 root root 4096 Nov 10 22:52 root
另外一个机器被改归属人,操蛋的
drwx------ 7 mysql mysql 36864 10-26 15:03 root
参考:http://my.oschina.net/shootercn/blog/15418
chmod 700 ~/.ssh/
chmod 700 ~
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~
chmod 600 ~/.ssh/authorized_keys
---------------------
一直很困惑要求输入密码,原来是不知道哪个操蛋的把root文件夹改777
drwxrwxrwx 11 root root 4096 Nov 10 22:52 root
另外一个机器被改归属人,操蛋的
drwx------ 7 mysql mysql 36864 10-26 15:03 root
参考:http://my.oschina.net/shootercn/blog/15418
SAS硬盘可以热插拔,插入硬盘后,磁盘会立刻显示在fdisk -l 的列表里,可以立刻开始使用。
SCSI硬盘还没这么便捷,但也是可以做到不重启就加入使用的。
这里关系最大的是 /proc/scsi/scsi 文件
在linux系统里, /proc 的内容是系统运行状态等信息
修改它会导致立刻生效,比如支持包转发
目前服务器在用的硬盘有两个,分别插在0和1的插槽
加入的四个硬盘分别插到3-5的插槽
IBM的机器硬盘盒的螺丝凸起的,安装到DELL的硬盘盒里,有点凸起
插入机器里会有点紧,但可以正常使用
我们先看看 /proc/scsi/scsi的文件
操作方法:
比较一下上面的内容和scsi文件的内容,我们可以知道,添加第三个插槽的硬盘是这么操作的:
ifdisk -l 也可以看到此硬盘了,说明已经可以使用了
把 0 0 2 0换成0 0 3 0可以如此类似的增加余下的scsi硬盘,操作完毕!
SCSI硬盘还没这么便捷,但也是可以做到不重启就加入使用的。
这里关系最大的是 /proc/scsi/scsi 文件
在linux系统里, /proc 的内容是系统运行状态等信息
修改它会导致立刻生效,比如支持包转发
目前服务器在用的硬盘有两个,分别插在0和1的插槽
加入的四个硬盘分别插到3-5的插槽
IBM的机器硬盘盒的螺丝凸起的,安装到DELL的硬盘盒里,有点凸起
插入机器里会有点紧,但可以正常使用
我们先看看 /proc/scsi/scsi的文件
[root@aslibra.com ~]# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 06 Lun: 00
Vendor: PE/PV Model: 1x6 SCSI BP Rev: 1.0
Type: Processor ANSI SCSI revision: 02
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 06 Lun: 00
Vendor: PE/PV Model: 1x6 SCSI BP Rev: 1.0
Type: Processor ANSI SCSI revision: 02
操作方法:
引用
我们以root权限执行 echo "scsi add-single-device 0 0 1 0" > /proc/scsi/scsi 添加scsi设备
解释一下 scsi add-single-device a b c d 这个指令中的参数:
# 相反 scsi remove-single-device a b c d 是用来移除设备的
a ------- Host 是硬盘所在的SCSI控制器的编号,这里只有一个控制器,所以为0
b ------- Channel 硬盘所在SCSI通道的编号,这里是单通道,为0
c ------- Id 硬盘的SCSI ID号,就是插入的硬盘插槽编号,
d ------- Lun ,硬盘的lun号[logical unit number]即逻辑单元号,指的是一个用于SCSI总线的唯一的识别号,
总线使它能区别其他八个设备(它们每个都是一个逻辑单元)。
解释一下 scsi add-single-device a b c d 这个指令中的参数:
# 相反 scsi remove-single-device a b c d 是用来移除设备的
a ------- Host 是硬盘所在的SCSI控制器的编号,这里只有一个控制器,所以为0
b ------- Channel 硬盘所在SCSI通道的编号,这里是单通道,为0
c ------- Id 硬盘的SCSI ID号,就是插入的硬盘插槽编号,
d ------- Lun ,硬盘的lun号[logical unit number]即逻辑单元号,指的是一个用于SCSI总线的唯一的识别号,
总线使它能区别其他八个设备(它们每个都是一个逻辑单元)。
比较一下上面的内容和scsi文件的内容,我们可以知道,添加第三个插槽的硬盘是这么操作的:
[root@aslibra.com ~]# echo "scsi add-single-device 0 0 2 0" > /proc/scsi/scsi
[root@aslibra.com ~]# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 06 Lun: 00
Vendor: PE/PV Model: 1x6 SCSI BP Rev: 1.0
Type: Processor ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 02 Lun: 00
Vendor: IBM-ESXS Model: MAP3147NC FN Rev: C101
Type: Direct-Access ANSI SCSI revision: 03
[root@aslibra.com ~]# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: SEAGATE Model: ST3146707LC Rev: D703
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 06 Lun: 00
Vendor: PE/PV Model: 1x6 SCSI BP Rev: 1.0
Type: Processor ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 02 Lun: 00
Vendor: IBM-ESXS Model: MAP3147NC FN Rev: C101
Type: Direct-Access ANSI SCSI revision: 03
ifdisk -l 也可以看到此硬盘了,说明已经可以使用了
把 0 0 2 0换成0 0 3 0可以如此类似的增加余下的scsi硬盘,操作完毕!
nginx的location值里没有查询字符,所以在匹配地址时用不到查询字符
另外,rewrite时,默认会把查询字符带上的,加上问号即可解决。
假设要把 /question.php?qid=123 的地址跳转到 /question/123.html
我们会发现地址变成 /question/123.html?qid=123
你要的参数都可以找到 $arg_qid ( $arg_变量名称 )
nginx里面,在后面加上问号就可以不带上查询字符了
对值有要求的,可以匹配 $args ,比如(复制别人的)
另外,rewrite时,默认会把查询字符带上的,加上问号即可解决。
假设要把 /question.php?qid=123 的地址跳转到 /question/123.html
location /question.php {
rewrite ^ /question/$arg_qid.html redirect;
}
rewrite ^ /question/$arg_qid.html redirect;
}
我们会发现地址变成 /question/123.html?qid=123
你要的参数都可以找到 $arg_qid ( $arg_变量名称 )
nginx里面,在后面加上问号就可以不带上查询字符了
location /question.php {
rewrite ^ /question/$arg_qid.html? redirect;
}
rewrite ^ /question/$arg_qid.html? redirect;
}
对值有要求的,可以匹配 $args ,比如(复制别人的)
location / {
if ($args ~* "/?param1=val1¶m2=¶m3=[0-9]+¶m4=.+¶m5=[0-9]+") {
rewrite ^ http://www.example.com/newparam/$arg_param3/$arg_param4? last;
}
}
if ($args ~* "/?param1=val1¶m2=¶m3=[0-9]+¶m4=.+¶m5=[0-9]+") {
rewrite ^ http://www.example.com/newparam/$arg_param3/$arg_param4? last;
}
}
先温习一下替换文件里的字符的功课:
上面代码在linux下正常,可在mac下不正常了:
sed方式有点不一样,需要用 sed -iE ,当然,我们可以找到别的方式,比如perl(搜得):
perl -pi -e 's/9999/+++++/g'
下面我们看看怎么修改svn库的地址~
svn的组织方式是在目录下有.svn的目录,里面有一个entries文件,记录了svn的地址
windows下的乌龟提供了relocation功能,mac下的svn工具暂时没有发现
不过没关系,这个事情很简单
比如你的svn服务器调整了,从192.168.1.1更换为 svn.aslibra.com 里
我们先确认一下是否存在
我们运行如下命令修改:
OK~
[root@aslibra ~]# ll *.html
-rw-r--r-- 1 root root 22 Aug 21 00:50 a.html
-rw-r--r-- 1 root root 32 Aug 21 00:51 index.html
[root@aslibra ~]# find . -name "*.html" | xargs sed -i 's/192/9999/'
[root@aslibra ~]# cat *.html
sdfjsldjf
9999
sdfdfdf
sldkjflsdjf
ksdjfsjd 9999
sdfsdf
[root@aslibra ~]# find . -name "*.html" | xargs sed -i 's/9999/+++++/'
[root@aslibra ~]# cat *.html
sdfjsldjf
+++++
sdfdfdf
sldkjflsdjf
ksdjfsjd +++++
sdfsdf
-rw-r--r-- 1 root root 22 Aug 21 00:50 a.html
-rw-r--r-- 1 root root 32 Aug 21 00:51 index.html
[root@aslibra ~]# find . -name "*.html" | xargs sed -i 's/192/9999/'
[root@aslibra ~]# cat *.html
sdfjsldjf
9999
sdfdfdf
sldkjflsdjf
ksdjfsjd 9999
sdfsdf
[root@aslibra ~]# find . -name "*.html" | xargs sed -i 's/9999/+++++/'
[root@aslibra ~]# cat *.html
sdfjsldjf
+++++
sdfdfdf
sldkjflsdjf
ksdjfsjd +++++
sdfsdf
上面代码在linux下正常,可在mac下不正常了:
localhost:tmp hqlulu$ find . -name "*.html" | xargs sed -i 's/9999/+++++/'
sed: 1: "./a.html": invalid command code .
sed: 1: "./a.html": invalid command code .
sed方式有点不一样,需要用 sed -iE ,当然,我们可以找到别的方式,比如perl(搜得):
perl -pi -e 's/9999/+++++/g'
下面我们看看怎么修改svn库的地址~
svn的组织方式是在目录下有.svn的目录,里面有一个entries文件,记录了svn的地址
windows下的乌龟提供了relocation功能,mac下的svn工具暂时没有发现
不过没关系,这个事情很简单
比如你的svn服务器调整了,从192.168.1.1更换为 svn.aslibra.com 里
我们先确认一下是否存在
find . -name entries | xargs grep 192.168.1.1
#你会得到类似内容:
./.svn/entries:svn://lhq@192.168.1.1/server
#你会得到类似内容:
./.svn/entries:svn://lhq@192.168.1.1/server
我们运行如下命令修改:
find . -name entries | xargs perl -pi -e 's/192.168.1.1/svn.aslibra.com/g'
OK~
一些文件操作如果需要和web服务器通信,是可以考虑用curl的。
正常的POST表单:
上传文件:
简单的php处理代码:
正常的POST表单:
curl -d "user=nickwolfe&password=test" http://www.aslibra.com/?test.php
上传文件:
localhost:aslibra$ curl -F upload=@/Media/test.txt http://www.aslibra.com/?test/upload
Array
(
[upload] => Array
(
[name] => test.txt
[type] => text/plain
[tmp_name] => /tmp/phpKDS0MR
[error] => 0
[size] => 335
)
)
Array
(
[upload] => Array
(
[name] => test.txt
[type] => text/plain
[tmp_name] => /tmp/phpKDS0MR
[error] => 0
[size] => 335
)
)
简单的php处理代码:
print_r($_FILES);
if(isset($_FILES['upload'])){
@copy( $_FILES['upload']['tmp_name'], '/tmp/upload_'.$_FILES['upload']['name'] );
@unlink( $_FILES['upload']['tmp_name'] );
}
if(isset($_FILES['upload'])){
@copy( $_FILES['upload']['tmp_name'], '/tmp/upload_'.$_FILES['upload']['name'] );
@unlink( $_FILES['upload']['tmp_name'] );
}
1 下载文件
wget http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
2 解压
tar zxvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
cd ZendOptimizer-3.3.9-linux-glibc23-i386
这里要注意,进入data文件夹后,so文件是对应版本的,看好系统中的php版本再安装,我安装的是对应5.2版本PHP的。
把 ZendOptimizer.so 文件拷贝到某个目录,比如:
/usr/local/Zend/lib
把下列行加入php.ini,不要加入任何空格和tab
zend_optimizer.optimization_level=15
zend_extension=”/usr/local/Zend/lib/ZendOptimizer.so”
3 重启
/path/to/php-fpm restart
=问题集锦=
1 cannot restore segment prot after reloc: Permission denied
这是selinux的问题,如果无大的问题,可以关闭selinux
2 和eAccelerator冲突
wget http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
2 解压
tar zxvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
cd ZendOptimizer-3.3.9-linux-glibc23-i386
这里要注意,进入data文件夹后,so文件是对应版本的,看好系统中的php版本再安装,我安装的是对应5.2版本PHP的。
把 ZendOptimizer.so 文件拷贝到某个目录,比如:
/usr/local/Zend/lib
把下列行加入php.ini,不要加入任何空格和tab
zend_optimizer.optimization_level=15
zend_extension=”/usr/local/Zend/lib/ZendOptimizer.so”
3 重启
/path/to/php-fpm restart
=问题集锦=
1 cannot restore segment prot after reloc: Permission denied
这是selinux的问题,如果无大的问题,可以关闭selinux
引用
关闭SELinux即可解决:
修改/etc/sysconfig/selinux,修改为SELINUX=disabled
执行/usr/sbin/setenforce 0立即关闭,且无需重启系统
如果你不希望关闭SELinux的话,也可以
chcon -t shlib_t ZendOptimizer.so
chcon -t texrel_shlib_t ZendOptimizer.so
修改/etc/sysconfig/selinux,修改为SELINUX=disabled
执行/usr/sbin/setenforce 0立即关闭,且无需重启系统
如果你不希望关闭SELinux的话,也可以
chcon -t shlib_t ZendOptimizer.so
chcon -t texrel_shlib_t ZendOptimizer.so
2 和eAccelerator冲突





