博客链接收集中
公司行业: 互联网/电子商务
公司规模: 150-500人
公司简介:
上海商派(ShopEx)网络科技有限公司
国内最大的电子商务软件及服务提供商,始于2002年,是国内网店系统持续研发最久、业内规模最大、国内市场占有率最高、发展速度最快的公司。
目前,ShopEx仅研发团队就超过100多人,市场占有率达70%,日增用户更高达1500个!ShopEx旗下的网上商店、网上商城、网络分销管理系统以及丰富的网商工具,以强大的功能、领先的技术、专业的服务以及快速的价值体现,获得了市场上近50万用户的肯定,也是80%年营业额过亿的电子商务企业的首选。
多年来,ShopEx虚心听取所有用户的建议,不断总结经验,深受业内及社会各界的好评,多次荣获国家权威机构颁发的重要奖项。
2006最具价值电子商务软件奖
2007优秀电子商务服务商奖
2008最佳电子商务技术服务奖
2009 最佳电子商务技术服务奖
2009年度上海明星软件企业
公司网站:http://www.shopex.cn
联 系 人:梁小姐
电子邮箱:liangliang@shopex.cn
PHP软件工程师 2名 ,工作地点上海徐家汇虹桥路333号4和6楼
| 职位描述 | |||||
| 职位说明 负责公司软件产品的研发工作与其他项目的开发; 职位要求 PHP实际项目编程经验1年以上,熟练掌握PHP5面向对象编程,熟悉Mysql; 精通Html、Java Script、CSS、XML等知识; 熟悉AJAX,用户行为分析等web2.0关键技术; 熟悉软件设计流程和软件工程规范,具备良好而规范的设计和技术文档编写能力; 工作积极主动,富有创造力和激情,有良好的团队合作能力,善于沟通, 善于表达自己的思想; 有Linux下JAVA,C/C++编程经验者优先。 |
该方案使用mysqldump 导出数据包并压缩(一个数据库一个压缩包),使用shell搭配crontab每天凌晨3点导出并删除七天前的压缩文件夹
如下代码最早出处来自国外,看如下注释
mysql_shell_backup\mysql_del_old_backups.sh
#!/bin/bash
# Shell script to backup MySql database
# To backup Nysql databases file to /backup dir and later pick up by your
# script. You can skip few databases from backup too.
# For more info please see (Installation info):
# http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/01/mysql-backup-script.html
# Last updated: Aug - 2005
# --------------------------------------------------------------------
# This is a free shell script under GNU GPL version 2.0 or above
# Copyright (C) 2004, 2005 nixCraft project
# Feedback/comment/suggestions : http://cyberciti.biz/fb/
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# -------------------------------------------------------------------------
MyUSER="xxxx" # USERNAME mysql用户名 记得修改为自己的
MyPASS="xxxx" # PASSWORD mysql密码 记得修改为自己的
MyHOST="localhost" # Hostname
# Linux bin paths, change this if it can not be autodetected via which command
MYSQL="$(which mysql)" #获取mysql路径
MYSQLDUMP="$(which mysqldump)"#获取mysqldump路径
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"
#TAR="$(which tar)"
#echo 'date %y%m%d'
# Backup Dest directory, change this if you have someother location
#date +%Y-%m-%d-%H-%M-%S
DEST="/e"
# Get hostname
HOST="$(hostname)"
# Get data in dd-mm-yyyy format
NOW="$(date +"%Y-%m-%d")" #获取当前时间
#(date +%Y-%m-%d-%H-%M-%S)
# File to store current backup file
# Main directory where backup will be stored
MBD="$DEST/mysqlbackup"
FILE=""
# Store list of databases
DBS=""
#alias mysql1="mysql -uroot -pz5896321 -S /tmp/mysql.sock"
# DO NOT BACKUP these databases
IGGY="information_schema test mysql"#IGGY内的数据库不需要被mysqldump出来备份
[ ! -d $MBD ] && mkdir -p $MBD || :
# Only root can access it!
$CHOWN 0.0 -R $DEST
$CHMOD 0600 $DEST
# Get all database list first
DBS="$($MYSQL -S /tmp/mysql.sock -u$MyUSER -p$MyPASS -h $MyHOST -Bse 'show databases')"#Bse 具体看mysql手册中的解释
#-S /tmp/mysql.sock 我这台服务器的sock路径是这个
for db in $DBS
do
skipdb=-1
if [ "$IGGY" != "" ];
then
for i in $IGGY
do
[ "$db" == "$i" ] && skipdb=1 || :
done
fi
if [ "$skipdb" == "-1" ] ; then
# FILE="$MBD/$db.$HOST.$NOW.gz"
FILE="$MBD/$db.$NOW.gz"
# do all inone job in pipe,
# connect to mysql using mysqldump for select mysql database
# and pipe it out to gz file in backup dir
$MYSQLDUMP -S /tmp/mysql.sock -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE
fi
done
删除七天前的备份文件数据
mysql_del_old_backups.sh
#!/bin/env bash upper_days=7 #该变量表示 “前几天” directory=$(find /e -mtime +$upper_days |grep mysql |grep -v mysql_backup.sh |grep -v gz) # 先说明这里的/e 文件夹下没有其他多余的文件 全都时备份文件夹和里面的备份文件 # -mtime参数表示 修改时间 modify time +7 大于7天 就是7天和7天以前的 # grep mysql 这个目录下所有mysql开头 # grep -v gz 结果里去除以gz结尾的文件 echo $directory rm -rf $directory #之后删除 #find /e/ -mtime +7 |grep mysql |grep -v mysql_backup.sh |grep -v gz
crontab -e 0 3 * * * /d/env/crontab/mysql_backup.sh >> /e/mysql_backup.log 0 3 * * * /d/env/crontab/mysql_del_old_backups.sh >> /e/mysql_del_old_backups.log
ban_ip_with_memcached_flood这篇文章根据 互联网网站的反爬虫策略浅析 使用php实现
假设现有一phpwind搭建论坛,在global.php文件内require_once(‘ban_ip_with_memcached_flood.php’)
ban_ip_with_memcached_flood.php文件
<?php
/* begin iptable with memcache for ban the flood ip*/
//memcache 连接
$memcache_obj = new Memcache;
$memcache_host = "127.0.0.1";
$memcache_obj->connect($memcache_host, 11211) or die ("Could not connect memcached at localserver");
//获取客户端ip
function getIp()
{
//php获取ip的算法
if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])
{
$ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
}
elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])
{
$ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
}
elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"])
{
$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
}
elseif (getenv("HTTP_X_FORWARDED_FOR"))
{
$ip = getenv("HTTP_X_FORWARDED_FOR");
}
elseif (getenv("HTTP_CLIENT_IP"))
{
$ip = getenv("HTTP_CLIENT_IP");
}
elseif (getenv("REMOTE_ADDR"))
{
$ip = getenv("REMOTE_ADDR");
}
else
{
$ip = "Unknown";
}
echo "你的IP:".$ip ;
return $ip;
}
$client_ip = getIp();
//防火墙拦截语句 可惜开了 php.ini的safe_mode为on才可使用,并且需要相应权限才能让php重新加载php配置文件
$iptable_statement= "iptables -A INPUT -i eth0 -j DROP -p tcp --dport 80 -s $client_ip";
#echo($iptable_statement);
$ip_counter = $memcache_obj->increment($client_ip);
#var_dump($ip_counter);
if (!$ip_counter) {
$memcache_obj->set($client_ip,1, 0, 60);
}elseif ($ip_counter>300) {
$crawler_counter = $memcache_obj->increment("crawler/$client_ip");
if (!$crawler_counter) {
$memcache_obj->set("crawler/$client_ip",1, 0, 60);
}
elseif ($crawler_counter>50){
#BlackList.add(ip_sec)
//执行iptable 防火墙指令
#echo exec($iptable_statement);
echo exec("echo 'deny $client_ip;\n'>>/d/nginx/conf/ip_ban.conf");
#注意nginx 配置文件路径
#echo exec("nginx -s reload");
header('HTTP/1.1 403 Forbidden');
die("Unauthorized access forbidden! 爬虫再见");
}
#var_dump($crawler_counter);
header('HTTP/1.0 401 Unauthorized');
die("Unauthorized access forbidden! 未认证授权");
#render :template => 'test', :status => 401 and return false
}
/* end iptable with memcache for ban the flood ip*/
?>
这里的 ip_ban.conf 是nginx的 httpaccess module 加载配置文件,利用它和crontab来实现每2秒重新reload
nginx配置文件禁止ip访问,从0.8版本开始nginx的reload方法 /d/env/nginx/sbin/nginx -s reload
mkdir -p /d/env/crontab #创建cron执行的shell文件 nano /d/env/crontab/nginx_ban_ip.sh #!/bin/env sh #每2分钟重载nginx配置 /d/nginx/sbin/nginx -t /d/nginx/sbin/nginx -s reload #shell文件需要x权限 chmod +x /d/env/crontab/nginx_ban_ip.sh #给ip_ban加上www执行权限,由于我的nginx和php都是www用户执行 chmod 777 /d/nginx/conf/ip_ban.conf chown www:www /d/nginx/conf/ip_ban.conf ll /d/nginx/conf/ip_ban.conf #crontab -e 添加2分钟执行shell的语句 */2 * * * * /d/env/crontab/nginx_ban_ip.sh
找到一款不错的网站压力测试工具webbench[原创]
使用该压力测试对nginx服务器进行虐待,测试以上反爬虫效果,注意linux系统专用
webbench -c 200 -t 30 http://www.xxxxxxxxxxxxxxxxxxxxxxxx.com/
30秒内开启浏览器访问网址吧 ,应该会显示“爬虫再见”,2分钟之后nginx就会重读配置文件,之后返回403,ip地址被禁止访问了。
(403页面可以自定义)
1 如何查看phpwind的版本?
登陆论坛 管理页面 默认为admin.php ,页面底部最下方
Powered by PHPWind 7.5 SP3 (GBK) © 2003-09,phpwind.com 这字样
不过pw系统更新太快 而且版本号居然也不写,,真是。。。只能从这个时间上判断
从服务器 部署的老版本 web文件和数据库文件导出压缩之后传输到本地进行升级
以下环境都在linux服务器下
1 进入web文件存放处(假设文件存放在/d/web/phpwind)
cd /d/htdocs/phpwind tar zcvf filename.tgz ./ \ --exclude="pwb" \ --exclude="works_file" \ --exclude="home/attachment" \ --exclude="attachment" \
\ 为换行分隔符,为了可以让命令多行
–exclude表示排除 可以排除文件夹 可以以扩展名排除文件 例如 –exclude=”*.jpg”
2 导出 mysql数据库文件
mysqldump -udbusername -pdbpwd -S /tmp/mysql.sock dbname>dbname.sql tar zcvf dbname.sql.tgz dbname.sql
解说
dbname #是数据库名
dbusername #是数据库访问用户名
dbpwd #是数据库访问密码
剩下要做的就是使用各种ftp ssh 文件来传输文件
3 之后下载下来的phpwind 修改 data/sql_config.php 修改连接字符串
pw的模板就不用提了,和discuz比较看看。
以下phpwind

以下discuz

至于shopex,dedcms的也不用介绍了。拜托,phpwind,专业点。
前几天和同事 讨论起一个javascript问题,为了搞一个幻灯js播放的效果,使用的是veryide的js.
这段代码单独独立了出来放在干净的html里没什么问题,可是一放到phpwind的系统里就出错。
print <<<EOT
-->
<script type="text/javascript" src="mode/area/themes/home1/js/veryide.core.js"></script>
<script type="text/javascript" src="mode/area/themes/home1/js/veryide.library.js"></script>
<script type="text/javascript" src="mode/area/themes/home1/js/veryide.effect.js"></script>
<script type="text/javascript">
addLoadEvent(function(){
/*****************/
var TO = new VeryIDE.TabOption("mouseover");
TO.TabClass("active","");
var Sel = $E("#a-slide ol li");
var Box = $E("#a-slide ul li");
//使用firefox查看
console.log(Sel);
//console.log(Box);
for(var i=0;i<Sel.length;i++){
TO.Add(Sel[i],Box[i]);
}
TO.Play(0);
TO.Auto(3000);
/*****************/
});
</script>
<!--
EOT;
单独运行以上的代码,使用firebug查看console.log 返回的是4个li
[li, li, li, li]
一旦放入phpwind,变成
"#a-slide ol li"
本以为是pw做了和dz一样事情,改写了javascript的prototoype中的push方法(详见google),但最后发觉问题出在模板引擎上,最后模板引擎出现的结果是
addLoadEvent(function(){
/*****************/
var TO = new VeryIDE.TabOption("mouseover");
TO.TabClass("active","");
var Sel = ("#a-slide ol li");
var Box = ("#a-slide ul li");
console.log(Sel);
真相大白,由于模板引擎将dollar符合也给解析掉了,大家都很喜欢$啊。使用转义字符或者干脆直接将js文件放到文件里用script载入,而且可以进行js减肥和压缩。
var Sel = \$("#a-slide ol li");
修改在运行 这下对了
addLoadEvent(function(){
/*****************/
var TO = new VeryIDE.TabOption("mouseover");
TO.TabClass("active","");
var Sel = $("#a-slide ol li");
var Box = $("#a-slide ul li");
51dpg 的全名就是 我要点评游戏,作为一个类似像fami通一样的投票网站而诞生的。本blog是一个纯粹的以讨论计算机技术为主的博客。