2016/01/30

WordPress免插件生成完整站点地图(sitemap.xml)的php代码

张戈改造过的代码比网络流传的同类代码更加完善,可以同时生成首页、文章、单页面、分类和标签的sitemap。

一、PHP代码


<?php
require('./wp-blog-header.php');
header("Content-type: text/xml");
header('HTTP/1.1 200 OK');
$posts_to_show = 1000; 
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">'
?>
<!-- generated-on=<?php echo get_lastpostdate('blog'); ?> Diy By 张戈博客(http://zhangge.net)-->
 <url>
 <loc><?php echo get_home_url(); ?></loc>
 <lastmod><?php $ltime = get_lastpostmodified(GMT);$ltime = gmdate('Y-m-d\TH:i:s 00:00', strtotime($ltime)); echo $ltime; ?></lastmod>
 <changefreq>daily</changefreq>
 <priority>1.0</priority>
 </url>
<?php
/* 文章页面 */ 
header("Content-type: text/xml");
$myposts = get_posts( "numberposts=" . $posts_to_show );
foreach( $myposts as $post ) { ?>
 <url>
 <loc><?php the_permalink(); ?></loc>
 <lastmod><?php the_time('c') ?></lastmod>
 <changefreq>monthly</changefreq>
 <priority>0.6</priority>
 </url>
<?php } /* 文章循环结束 */ ?> 
<?php
/* 单页面 */ 
$mypages = get_pages();
if(count($mypages) > 0) {
 foreach($mypages as $page) { ?>
 <url>
 <loc><?php echo get_page_link($page->ID); ?></loc>
 <lastmod><?php echo str_replace(" ","T",get_page($page->ID)->post_modified); ?> 00:00</lastmod>
 <changefreq>weekly</changefreq>
 <priority>0.6</priority>
 </url>
<?php }} /* 单页面循环结束 */ ?> 
<?php
/* 博客分类 */ 
$terms = get_terms('category', 'orderby=name&hide_empty=0' );
$count = count($terms);
if($count > 0){
foreach ($terms as $term) { ?>
 <url>
 <loc><?php echo get_term_link($term, $term->slug); ?></loc>
 <changefreq>weekly</changefreq>
 <priority>0.8</priority>
 </url>
<?php }} /* 分类循环结束 */?> 
<?php
 /* 标签(可选) */
$tags = get_terms("post_tag");
foreach ( $tags as $key => $tag ) {
 $link = get_term_link( intval($tag->term_id), "post_tag" );
 if ( is_wp_error( $link ) )
 return false;
 $tags[ $key ]->link = $link;
?>
 <url>
 <loc><?php echo $link ?></loc>
 <changefreq>monthly</changefreq>
 <priority>0.4</priority>
 </url>
<?php } /* 标签循环结束 */ ?> 
</urlset>
将以上代码保存为sitemap.php,传到网站根目录。手动访问查看效果,比如:http://zhangge.net/sitemap.php

二、伪静态

①、Nginx

编辑已存在的Nginx伪静态规则,新增如下规则后(平滑)重启nginx即可:
rewrite ^/sitemap.xml$ /sitemap.php last;

②、Apache

编辑网站根目录的 .htaccess ,加入如下规则:
RewriteRule ^(sitemap)\.xml$ $1.php
做好伪静态规则后,就可以直接访问sitemap.xml看看效果了,比如 http://zhangge.net/sitemap.xml

三、文章最后

①、确认无误之后,已开通sitemap权限的就可以前往百度站长平台提交了,没开通权限的可以发送申请邮件到百度站长平台管理员邮箱申请,并且将sitemap.xml使用a标签链接在网站底部即可。
②、代码使用很简单,可以根据需要增减内容,比如觉得标签不应该出现在sitemap里面的,可以将标签部分的php代码删除即可,但一定要注意不要误删除结尾的
标签。
③、今天,把分类、单页面及标签的sitemap都整出来了,那开放适配专用sitemap的php代码也就可以继续完善下了,回头有时间我会整理总结一篇关于sitemap及开放适配的终结篇,敬请期待!
(转载结束)

修改WordPress页面底部“自豪地采用WordPress”

具体修改步骤如下:
登入wordpress后台;点击左侧导航“外观”-“编辑”;在右侧文件列表中选择“foot.php”。
在foot.php文件编辑框中,拉到底部找到类似下面代码,按需修改后更新。
” title=””>
比如修改为:(还可以加上站点统计代码)
Copyright © 2005 - 2015 ifshow.com, All Rights Reserved. Powered by Wo

Centos 7安装Postfix用于发送提醒邮件

本文仅介绍Centos 7安装Postfix用于发送提醒邮件,并非搭建完整邮件服务器教程。
1. 卸载sendmail,没有安装sendmail的跳过
yum remove sendmail
2. 安装 Postfix
yum install postfix
3. 更改默认MTA为Postfix
/usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix
4. 检查是否将MTA改为Postfix
alternatives --display mta
5. 配置Postfix,修改main.cf
vi /etc/postfix/main.cf
查找以下各项,去掉最前面的#,参考说明修改
myhostname = www.ifshow.com
mydomain = ifshow.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relay_domains =
home_mailbox = Maildir/
myhostname是服务器的主机名,mydomain是域名,myorigin定义邮箱后缀,inet_interfaces是指定使用的网络接口,relay_domains是转发域留空,home_mailbox是指定邮箱格式。
6. 启动Postfix并设为开机自启
systemctl start postfix.service
systemctl enable postfix.service
到此完成配置,其它服务已经能够通过postfix发送提醒邮件。
由于只发邮件,所以防火墙不必开启POP3、SMTP等服务端口。

CentOS 7安装Fail2ban防御暴力破解密码(配合FirewallD)

fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则表达式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽)。比如有人在试探你的SSH、SMTP、FTP密码,只要达到你预设的次数,fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员。

1. 安装EPEL源

yum -y install epel-release.noarch

2. 安装支持firewalld的fail2ban

yum -y install fail2ban-firewalld fail2ban-systemd

3. 安装相关软件,让fail2ban可以通过postfix发送提醒邮件(可选)

yum -y install postfix whois fail2ban-sendmail
systemctl enable postfix
systemctl start postfix

4. 设定fail2ban

新建配置文件jail.local
vi /etc/fail2ban/jail.local
输入以下内容后保存退出
[DEFAULT]
bantime = 86400
findtime = 300
maxretry = 3
sender = fail2ban@ifshow.com
destemail = admin@ifshow.com
action = %(action_mwl)s
[sshd]
enabled = true
port = 2345
[sshd-ddos]
enabled = true
port = 2345
bantime是被封IP禁止访问的时间,设定值为24小时,单位是秒。
findtime是检测时间,在此时间内超过规定的次数会激活fail2ban,单位是秒。
maxretry是允许错误登录的最大次数,和findtime配合使用。
sender为邮件发送者,destemail为接收通知邮箱。
action是触发fail2ban采取的动作,action_mwl为禁IP+发通知邮件+写入日志。
sshd区块的enabled = true开启对SSH服务的防护,port为SSH的自定义端口。
sshd-ddos区块的enabled = true开启SSH-DDOS防护,port为SSH的自定义端口。
如果装有vsftpd,在配置文件最后加上以下内容(port为vsftpd的登录和数据端口)
[vsftpd]
enabled = true
port = 2121,2122

5. 启用fail2ban并设为开机自启

systemctl enable fail2ban
systemctl start fail2ban

6. fail2ban常用命令

查看SSH服务监护状态,能看到当前被禁IP。
fail2ban-client status sshd
在SSH监护服务忽略IP列表(白名单)中添加IP 192.168.111.111
fail2ban-client set sshd addignoreip 192.168.111.111
在SSH监护服务忽略IP列表(白名单)中删除IP 192.168.111.111
fail2ban-client set sshd delignoreip 192.168.111.111
查看fail2ban日志
tail /var/log/fail2ban.log

CetnOS 7默认防火墙FirewallD的使用说明

1. firewalld简介
CetnOS 7默认防火墙使用firewalld替代了之前的iptables,主要特点:动态管理防火墙,不需要重启整个防火墙便可应用更改;使用“区域(zone)”概念。
firewalld支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项。firewalld也支持允许服务或者应用程序直接添加防火墙规则的接口。firewalld无法解析由 iptables 和 ebtables 命令行工具添加的防火墙规则。firewalld和iptables不能同时运行,只能选择其中之一。
2. “区域(zone)”介绍
区域定义了网络连接的可信等级。这是一个一对多的关系,这意味着一次连接可以仅仅是一个区域的一部分,而一个区域可以用于很多连接。区域按照从不信任到信任的顺序排序:
  • 丢弃(drop):任何流入网络的包都被丢弃,不作出任何响应。只允许流出的网络连接。
  • 阻塞(block):任何进入的网络连接都被拒绝,并返回 IPv4 的 icmp-host-prohibited 报文或者 IPv6 的 icmp6-adm-prohibited 报文。只允许由该系统初始化的网络连接。
  • 公开(public):用以可以公开的wangl,默认区域。只允许选中的连接接入。
  • 外部(external):用在路由器等启用伪装的外部网络。只允许选中的连接接入。
  • 隔离区(dmz):用以允许隔离区(dmz)中的电脑有限地被外界网络访问。只接受被选中的连接。
  • 工作(work):用在工作网络。只接受被选中的连接。
  • 家庭(home):用在家庭网络。只接受被选中的连接。
  • 内部(internal):用在内部网络。只接受被选中的连接。
  • 受信任的(trusted):允许所有网络连接。
区域设置以 ZONE= 选项 存储在网络连接的ifcfg文件中。如果这个选项缺失或者为空,firewalld 将使用配置的默认区域。在/etc/firewalld/zones下面新增或修改区域。
网络接口可以指定到某个区域,未指定区域的网络接口一律配置到默认区域。
3. firewalld配置文件
/usr/lib/firewalld/ 存放默认配置文件,不能被修改,即使修改也会随着 firewalld 软件包的更新被重置。
/etc/firewalld/ 这里的配置文件可以是系统管理员通过配置接口定制的,也可以是手动定制的。这些文件将替代默认配置文件生效。
通常将配置文件从/usr/lib/firewalld/拷贝到/etc/firewalld/ 相应目录,再根据需求进行修改。
4. firewalld服务常用操作
启动firewalld并设为开机自启
systemctl start firewalld.service
systemctl enable firewalld.service
重载firewalld配置文件,不改变当前连接状态
systemctl reload firewalld.service
重启firewalld服务
systemctl restart firewalld.service
停止firewalld服务
systemctl stop firewalld.service
禁用firewalld服务
systemctl disable firewalld.service
查看firewalld服务状态
systemctl status firewalld.service
5. firewall-cmd常用命令
firewalld有图像界面工具firewall-config和命令行工具firewall-cmd,服务器上通常使用命令行工具firewall-cmd
firewall-cmd命令默认同时对IPv4和IPv6生效;
加参数–zone=XXX为指定命令操作区域,不加此参数对默认区域操作;
加参数–permanent为使命令在firewalld重载后永久生效,不加此参数命令立刻生效但firewalld重载后失效。
查询防火墙运行状态
firewall-cmd --state
查询防火墙版本
firewall-cmd --version
查询防火墙默认区域配置信息
firewall-cmd --list-all
查询防火墙所有区域配置信息,且分屏显示
firewall-cmd --list-all-zones | more
设置默认区域为public,立刻生效
(也可以修改/etc/firewalld/firewalld.conf文件中DefaultZone=public,重载后生效)
firewall-cmd --set-default-zone=public
默认区域开启TCP 8080端口,重载后永久生效,可以设定端口号范围比如6000-7000
firewall-cmd --permanent --add-port=8080/tcp
默认区域关闭TCP 8080端口,重载后永久生效
firewall-cmd --permanent --remove-port=8080/tcp
默认区域开启HTTP服务(默认配置下等于开启TCP 80端口),重载后永久生效
firewall-cmd --permanent --add-service=http
默认区域关闭HTTP服务(默认配置下等于关闭TCP 80端口),重载后永久生效
firewall-cmd --permanent --remove-service=http
默认区域禁止ping,重载后永久生效
firewall-cmd --permanent --add-icmp-block=echo-reply
firewall-cmd --permanent --add-icmp-block=echo-request
重载防火墙配置,使用参数–reload保持当前连接,使用参数–complete-reload重置连接
firewall-cmd --reload
firewall-cmd --complete-reload
6. 使用“Rich Language” 配置复杂防火墙规则
默认区域新增Rich Language规则,规则内容为:在IPv4拒绝来自IP 192.168.111.111的访问,重载后永久生效。
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.111.111" reject'
默认区域移除上述Rich Language规则,重载后永久生效。
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.111.111" reject'
默认区域查询上述Rich Language规则是否存在
firewall-cmd --query-rich-rule='rule family="ipv4" source address="192.168.111.111" reject'
7. firewalld直接接口(firewall-cmd –direct 命令)
firewall-cmd –direct 命令主要用于使服务和应用程序能够增加规则,不推荐手动操作;命令立刻生效,但重载后失效。如果不熟悉 iptables ,使用直接接口非常危险,可能无意间导致防火墙被入侵。具体操作就不介绍了。

安装CentOS 7后必做的安全加固

刚装好的CentOS 7系统存在很大风险,需要立刻进行安全加固。

1. 用root账号通过SSH登录服务器

通常使用SSH远程登录服务器进行日常维护。在windows系统下可以用PuTTY软件,Linux和MAC系统内置SSH客户端功能直接在终端(terminal)输入相关指令。
SSH首次登录服务器,会提示是否接受该服务器的加密公钥,请选择“是”(yes)。

2. 修改root账号的密码(可选)

如果root的密码是安装时自动生成无法确认安全,则必须立刻修改root密码。指令如下:
passwd root
系统会提示输入新的密码,需要输入两次相同的新密码。
服务器上所有账号的密码都要采用毫无关联的强密码,密码为不少于16位的大小写字母数字特殊符号的组合。推荐采用专门的密码管理软件,比如KeePass。

3. 新增一个普通账号并设定密码

该账号主要用于SSH登录服务器进行管理,root账号通常禁止远程SSH登录。指令如下:
useradd ifshow
ifshow就是普通账号的名称,根据实际情况来取名。随后给该账号设定密码:
passwd ifshow

4. 修改SSH配置文件(改默认端口、禁止root账号登录、指定允许登录账号)

用vi文本编辑器修改SSH配置文件,指令如下:
vi /etc/ssh/sshd_config
打开配置文件后,查找
#Port 22
修改为
Port 2345
2345是更改后的端口号,可以是 1024 ~ 65535 之间的任意数字,不要和系统其他服务端口冲突即可。
查找
#PermitRootLogin yes
修改为
PermitRootLogin no
AllowUsers ifshow
第一行是禁止root账号通过SSH登录;
第二行是指定允许通过SSH登录的账号ifshow,可以输入多个账号用空格隔开。
然后检查配置文件中,以下字段是否设置为no,字段最前面有#的删除#
PermitEmptyPasswords no
UsePAM no
X11Forwarding no
UseDNS no
再检查配置文件中,以下字段设置,字段最前面有#的删除#
Protocol 2
MaxAuthTries 3
MaxSessions 2
修改完成,保存配置文件退出编辑器。重启SSH服务,使得配置文件生效。
systemctl restart sshd.service
为防止失误,保持当前窗口连接,新建SSH连接2345端口测试ifshow能否登录系统。
用ifshow账号登录系统后执行su指令切换到root账号,系统会提示输入root账号的密码;
或者在命令前加上sudo空格,可临时以root权限执行,系统会提示输入root账号的密码。
本文后续内容均需root权限执行,下文不重复说明。
对安全有更高要求的还可以使用SSH证书登录

4. 启用firewalld防火墙

CentOS 7默认采用firewalld防火墙,firewalld的使用说明请点这里
因为更改过SSH默认端口,所以先修改firewall中SSH服务配置文件。执行如下指令:
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
vi /etc/firewalld/services/ssh.xml
查找
修改为
启动firewalld并设为开机自启,执行如下指令:
systemctl start firewalld.service
systemctl enable firewalld.service
在fierwalld中开放ssh服务端口:
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
为防止失误,保持当前窗口连接,新建SSH连接2345端口测试ifshow能否登录系统。

5. 让系统自动更新

查询当前系统版本
cat /etc/*release*
安装EPEL源(可选)
yum -y install epel-release.noarch
手动进行系统更新,安装所需软件cron和yum-cron,执行如下指令:
yum -y update
yum -y install cronie
yum -y install yum-cron
修改yum-cron配置文件
vi /etc/yum/yum-cron.conf
查找
apply_updates = no
修改为
apply_updates = yes
再检查配置文件中,以下字段是否设置为yes
update_messages = yes
download_updates = yes
apply_updates = yes
修改完成,保存配置文件退出编辑器。启动cron和yum-cron并设为开机自启。
systemctl start crond.service
systemctl enable crond.service
systemctl start yum-cron.service
systemctl enable yum-cron.service

6. 开启SELinux(可选)

编辑SELinux配置文件
vi /etc/selinux/config
修改SELINUX的值(enforcing为开启,disabled为关闭)
SELINUX=enforcing
注意:别错误修改SELINUXTYPE的值为disabled,误改会导致系统无法启动。

7. 增加swap分区(已有swap分区的跳过)

查看当前分区情况
free -m
增加 swap分区,容量为1GB
dd if=/dev/zero of=/var/swap bs=1024 count=1024000
设置交换文件
mkswap /var/swap
立即激活启用交换分区
swapon /var/swap
添加系统引导时自启动运行
vi /etc/fstab
添加一行
/var/swap swap swap defaults 0 0
如果不需要了,收回 swap 空间
swapoff /var/swap
从文件系统中回收
rm /var/swap

8. 必做的安全加固已经完成,还可以安装fail2ban防止暴力破解密码

2013/08/16

品牌电商如何控制成本

本文来源于:《天下网商·经理人》 作者:莫邪,戒凡
成本是所有公司老板都非常关心的因素,毕竟利润=收入 – 成本 。当然,就算有利润也不一定能赚钱,因为还有各种各样的税,咱们就不谈了。今天重点讲电商运营的成本计算。
相信很多电商朋友跟我们一样,对财务都不太懂,只能慢慢摸索,想了解如何计算电商运营成本的一些知识,发现网络上基本找不到。现在很多小公司的计算方法很粗糙,而大公司虽然会有自己很专业的财务团队,但算来算去很多老板也看不懂。我们在电商领域做了5年,做代运营公司做了3年多,服务过的类目有食品滋补品、服装服饰、美妆个护、家电等,形成了一套相对比较实用的成本核算和成本控制方法,这里分享给大家,供大家参考。

2013/08/06

卖家强文:天猫、京东开店15个不同点

无论是天猫“双11”132亿的销售收入,还是京东POP平台的宏大布局,卖家在平台上的生存境遇并不“理想”,趣玩网运营部经理于潇雨从一个卖家的角度,撰文比较了在天猫和京东开店的16个不同点,卖家的应对之策。其核心观点认为,京东和天猫是不一样的企业,在不一样的企业环境中生存就需要不一样的方法。虎嗅摘编其观点:

2013/07/04

WORD插入特殊符号

“插入”--“符号”-- 选择字体“Wingdings 2”,便会出现各种符号。

2013/05/14

EXCEL批量删除区域里非公式单元格的数字数据源


批量删除区域里非公式单元格的数字数据源(即被公式引用,用于运算的单元格):

1、选中区域

2、CTRL+G(定位)——定位条件——常量——数字——确定,就会选中区域里所有非公式产生的数值型数字

3、删除