特色

如何成为淘宝客,淘宝联盟申请流程

一年一度的剁手节又要到了,11.11本来应该是单身狗们伤心难过的日子,而马云却把它变成购物狂欢节!相信互联网如此发达的今天,淘宝网上购物应该是越来越多的生活习惯了。伴随着淘宝购物的如火如荼,另一种赚钱方式也应运而生——淘宝客!

淘宝客,即是通过自己的渠道推广淘宝商品,从中获取商品佣金的人。淘宝客是那些想在网络上空手赚白银的人实现网赚非常适合的项目,操作简单,上手比较快。互联网上那些从草根到大牛的站长们几乎都操作过淘宝客项目,所以也是互联网小白练手的不错选择!

关于淘宝客的历史由来以及现状,我就不再多说,网上很多有兴趣可以搜索了解。下面介绍下淘宝联盟的申请流程:

1.访问登录淘宝联盟 http://pub.alimama.com/,一般用你的淘宝账户登录即可:

qt2-1

2.登录后,点击进入我的联盟:

qt2-2

3.点击进入【推广管理】,并新建网站推广:

qt2-3

4.填写你的网站信息,并下一步

注意:如果使用香港主机或者其他海外主机,网站是没有备案信息。此处的备案信息淘宝联盟没有严格要求,可以随便写比如0000000

qt2-4

5.这里需要把验证文件root.txt下载到本地桌面:

qt2-5

6.使用FTP软件连接空间,并打开空间根目录public_html(路径:domains/域名/public_html),将刚刚下载的root.txt上传到根目录:

注意1.验证文件root.txt必须上传到根目录public_html,上传到其他地方是无效的;2.验证文件root.txt文件名不得修改,比如修改成root1.txt;3.验证文件root.txt必须在下载后30分钟内完成上传并验证,否则无效。

qt2-6

7.完成上传后,返回到淘宝联盟的申请页面,点击【完成验证】:

qt2-7

8.这里淘宝联盟的申请就已经提交上去了,等待审核通过即可!

tupian

以上就是淘宝联盟申请提交的详细流程,审核结果如果无法通过,会有原因标注。根据要求再对你的网站进行修改即可。

特色

网站受攻击需要防御,如何接入百度云加速

网站安全一直以来都是受到广大站长关心的问题,加强网站防御能力从而防止网站受到攻击时瘫痪宕机是必须要做的工作!

百度去年刚刚推出百度云加速就受到很多站长的欢迎,作为一项免费的服务,有兴趣都不妨尝试下。闲话少说了,下面就简单介绍下如何接入百度云加速:

1.访问百度云加速官网:http://su.baidu.com/ 在上面可以注册或者登录(如果用百度账户就可以直接登录了):

qt1

2.登录后,打开【我的网站】

qt2

3.添加网站:

qt3

4.输入你的域名,注意不要加www,下一步:

qt4

5.百度云加速会自动检测你的域名解析记录,不需要修改,直接下一步即可:

qt5

6.这里是百度云加速提供给你的DNS,把之前域名的DNS修改成这个:

qt6

7.现在需要到域名控制面板修改DNS,这里我用的域名是在万网买的,就以万网的解析为例:

qt7

8.点击【修改域名DNS】

qt8

9.填写刚才百度云加速提供的DNS地址,然后确认即可。

qt9

10.完成在域名控制面板的DNS修改后,返回到百度云加速界面,点击保存设置即可。

注意:DNS修改生效需要一段时间,耐心等待下!

qt10

以上即是接入百度云加速的全部过程。待DNS生效后,我们可以在百度云加速里进行详细的设置。具体设置里面都有详细说明,这里就不过多介绍了。

特色

Contact Form 7插件简单强大的表单插件制作报名表

wordpress网站如何做个在线提交报名表页面呢?很简单,今天给你介绍一款wordpress联系表单插件:Contact Form 7

这款插件简单实用,下面就介绍下它的安装和使用:

1.wordpress网站后台,安装插件里搜索 Contact Form 7 ,安装并启用;

form1

2.启用后,在左侧导航栏里,可以看到【联系】这个目录,点击进入其子目录【联系表单】;

form2

3.这里你可以看到系统默认已经制作一张联系表单,现在复制其中的简码;

form3

4.你可以创建个新页面,将这段简码复制进去,然后发布;

form4

5.查看这个页面,你就可以看到下面的效果了。提交个测试下吧!

form5

当然你也可以自己动手制作更精美的表单页面,是不是很简单呢?哈哈

补充:1.Contact Form 7插件制作表单,可以直接使用HTML代码以及CSS样式,只需要对里面的参数修改即可;

2.邮箱发送的内容也可以使用HTML代码;

3.可以配合Contact Form DB插件一起使用,方便在网站后台直接查看提交的表单信息。

特色

WP SMTP插件安装配置方法

有时候,服务器出于安全稳定的考虑,会屏蔽到mail()功能。但是我们需要网站在有新用户注册、留言或者其他情况时可以发送邮件给用户,这样我们应该如何实现呢?
如果你使用的wordpress网站,这里就推荐一款非常简单实用邮件功能插件:WP SMTP。下面介绍下这款插件的安装配置方法:
1.在wordpress网站后台,安装插件里面搜索”WP SMTP”,并安装启用;
smtp1

2.完成安装启用后,点击【设置】,进入设置界面;

smtp2

3.下面就需要对SMTP进行配置,填写方式如图,这里推荐你使用163邮箱进行配置(QQ邮箱有时无法验证,具体原因不明)

smtp3

4.完成配置后,我们可以通过下面的测试选项,发送一份测试邮件。确认下SMTP功能是否实现。

smtp4

完成以上设置后,您的网站就可以正常的发送邮件了!

抢红包利用redis处理高并发

抢红包的业务流程大概是设置固定金额及数量的红包,比如1.68元20000个、3.8元20000个、8.8元1000个。

考虑高并发的情况下,我们需要有redis消息队列实现,具体方法如下:

1、创建抢红包活动,将5万份红包随机打乱,并放入redis中,使用队列list类型存储

lpush hongbao 每份红包…

2、访客来抢红包,考虑瞬间会有很多用户访问,这边需要对访客做个队列

lpush users 每个用户…

3、有了两个队列,需要跑一个定时任务,给每个用户分配一个红包

rpop users 弹出一个用户,并rpop hongbao 弹出一个红包。分配的结果存入结果队列。分配时还需要判断该用户是否已中奖,因此中奖时可以另外将已中奖用户存入redis的哈希类型。

4、另外一个定时任务去跑结果队列,将结果入库。

 

 

sql注入攻击与预防

一、常用的sql注入方法

1、数字

http://localhost/article.php?id=-1 OR 1=1;

2、字符串

用户登陆

用户名填 admin”#

密码可以随便填

可能拼接的sql语句是

'SELECT * FROM admin WHERE username=admin"#" AND password="123"'

注意:#后面的代码会被注释,因此可以绕过对用户名和密码对判断。

二、常见防御sql注入的方法

1、最有效简单的办法是使用pdo预处理

pdo预处理会对传入的参数进行处理,可以有效防御sql注入

2、对参数进行过滤

数字参数,可以使用is_numeric判断或intval强转

字符串参数,可以使用正则匹配过滤

preg_match('/[a-zA-Z]{6,}/',$usrname);

或者用addslashes对特殊字符转义。

 

curl请求范例

php的curl请求是非常好用的功能,下面简单写个范例:

function curl_get($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    $response = curl_exec($ch);
    $head_info = curl_getinfo($ch);

    if ($head_info['http_code'] != 200){
        return false;
    }

    return $response;
}

 

AMH开启数据库远程连接

AMH默认是不支持远程连接数据库的,但是有时我们需要在其他地方使用我们的数据库,就需要开启远程连接,下面简单介绍下如何开启:

1.在AMH管理后台 Madmin 参数设置中,有一项 【是否开启监听端口远程访问 (skip_networking)】开启;

2.开启后需要设置msyql的权限:

(1)连接ssh,登陆mysql

mysql -uroot -p9RaDA9L9y -S /tmp/mysql-generic-5.5.sock

(2)授权

//授权给任意主机
mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

//授权给特定主机
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

(3)刷新数据库

mysql>flush privileges;

完成以上步骤,就可以远程连接数据库了。

JavaScript基础 – HTML DOM元素

当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。

HTML DOM 模型被构造为对象的树。

1.查找 HTML 元素

(1)通过 id 查找 HTML 元素

document.getElementById(“id”);

(2)通过标签名查找 HTML 元素

document.getElementsByTagName(“p”);  注意这里是Elements,跟id不同

(3)通过类名查找 HTML 元素

document.getElementByClassName(“class”);

注意:通过类名查找 HTML 元素在 IE 5,6,7,8 中无效。

<div class="c" id="id1">
	<p>这是第一段内容</p>
	<p>这是第二段内容</p>
</div>
		
<script type="text/javascript">
//通过ID查找元素
var x = document.getElementById("id1");
x.style.color = "blue";
//通过class查找元素,注意得到的是一个数组,即使只找到一个元素也是数组
var y = document.getElementsByClassName("c");
var z = y[0].getElementsByTagName("p");	//通过标签名查找元素,得到的也是个数组
z[0].style.color = "red";
</script>

2.改变 HTML 输出流

使用 document.write() 直接向 HTML 输出流写内容

3.改变 HTML 内容

最简单的办法使用 innerHTML 属性。

<div class="c" id="id1">
	<p>这是第一段内容</p>
	<p>这是第二段内容</p>
</div>
		
<script type="text/javascript">
var x = document.getElementById("id1");
x.innerHTML = "<p>更换新内容</p>";
</script>

4.改变 HTML 属性

如需改变 HTML 元素的属性,请使用这个语法:

document.getElementById(id).attribute=new value
<img id="image" src="abc.jpg">
		
<script type="text/javascript">
var x = document.getElementById("image");
x.src = "123.jpg";
</script>

5.改变 HTML 样式

如需改变 HTML 元素的样式,请使用这个语法:

document.getElementById(id).style.property=new style
<p id="p2">Hello World!</p>

<script>
document.getElementById("p2").style.color="blue";
</script>

相关的style属性可以参考 http://www.w3school.com.cn/jsref/dom_obj_style.asp

6.HTML 事件属性

<button onclick="displayDate()">点击这里</button>

<script>
function displayDate()
{
document.getElementById("demo").innerHTML=Date();
}
</script>

<p id="demo"></p>

7.使用 HTML DOM 来分配事件

<button id="myBtn">点击这里</button>

<script>
document.getElementById("myBtn").onclick=function(){displayDate()};
function displayDate()
{
document.getElementById("demo").innerHTML=Date();
}
</script>

<p id="demo"></p>

8.onload 和 onunload事件

<body onload="test()">

<script>
function test(){
alert("测试");
}
</script>
</body>

onunload貌似不起作用,可能跟浏览器兼容问题有关

9.onchange 事件

<!DOCTYPE html>
<html>
<head>
<script>
function myFunction()
{
var x=document.getElementById("fname");
x.value=x.value.toUpperCase();
}
</script>
</head>
<body>

请输入英文字符:<input type="text" id="fname" onchange="myFunction()">
<p>当您离开输入字段时,会触发将输入文本转换为大写的函数。</p>

</body>
</html>

10.onmouseover 和 onmouseout 事件

<!DOCTYPE html>
<html>
<body>

<div onmouseover="mOver(this)" onmouseout="mOut(this)" style="background-color:green;width:120px;height:20px;padding:40px;color:#ffffff;">把鼠标移到上面</div>

<script>
function mOver(obj)
{
obj.innerHTML="谢谢"
}

function mOut(obj)
{
obj.innerHTML="把鼠标移到上面"
}
</script>

</body>
</html>

11.onmousedown、onmouseup 以及 onclick 事件

<!DOCTYPE html>
<html>
<body>

<div onmousedown="mDown(this)" onmouseup="mUp(this)" style="background-color:green;color:#ffffff;width:90px;height:20px;padding:40px;font-size:12px;">请点击这里</div>

<script>
function mDown(obj)
{
obj.style.backgroundColor="#1ec5e5";
obj.innerHTML="请释放鼠标按钮"
}

function mUp(obj)
{
obj.style.backgroundColor="green";
obj.innerHTML="请按下鼠标按钮"
}
</script>

</body>
</html>

12.onfocus

13.onmouseover 和 onmouseout

<h1 onmouseover="style.color='red'" onmouseout="style.color='blue'">
请把鼠标移到这段文本上
</h1>

 

JavaScript基础 – 异常处理try catch

try 语句测试代码块的错误。

catch 语句处理错误。

throw 语句创建自定义错误。

与PHP类似

try
{
	aaaa("12243");
}catch(err){
	document.write(err.message);	//输出 aaaa is not defined
}

可以使用throw抛出异常

try
{
	var a = 10;
	if(a<100) throw "var erro";
}catch(err){
	document.write(err);	//输出 var erro
}

 

JavaScript基础 – 流程控制if switch

一、if语句

if 语句 – 只有当指定条件为 true 时,使用该语句来执行代码

if…else 语句 – 当条件为 true 时执行代码,当条件为 false 时执行其他代码

if…else if….else 语句 – 使用该语句来选择多个代码块之一来执行

特别注意:else if 之间要空开,这点与PHP不同。

二、switch语句

switch 语句 – 使用该语句来选择多个代码块之一来执行

switch(n)
{
case 1:
  执行代码块 1
  break;
case 2:
  执行代码块 2
  break;
default:
  n 与 case 1 和 case 2 不同时执行的代码
}

用法与PHP中的一致。

三、for循环

1.for循环

for (var i=0; i<5; i++)
  {
  x=x + "The number is " + i + "<br>";
  }

用法与PHP一致

2.for/in循环

遍历数组或对象的属性

var person={fname:"John",lname:"Doe",age:25};
var txt = new String();
for (x in person)
{
txt=txt + person[x];
}
document.write(txt);

3.while 和 do..while循环

与PHP类似

4.break 和 continue

break 语句用于跳出循环。

continue 用于跳过循环中的一个迭代。

 

JavaScript基础 – 函数和运算符

一、函数

使用function定义函数,函数参数不能设置默认值。

function myfun(var1,var2){
	$str = "My name is "+var1+", my age is "+var2;
	console.log($str);
}
myfun("zhangsan",12);

可以使用return 返回值

function myfun(var1,var2){
	var str = "My name is "+var1+", my age is "+var2;
	return str;
}
var result = myfun("zhangsan",12);
alert(result);

提示:JavaScript 对大小写敏感。关键词 function 必须是小写的,并且必须以与函数名称相同的大小写来调用函数。

二、运算符

1.算术运算符

+ 加  – 减  * 乘  / 除  % 求余数  ++ 递增  — 递减

2.赋值运算符

= += -= *= /= %=

3.字符串运算符

+ 运算符是将两个字符串连接起来。

var str1 = "China";
var str2 = "BeiJing";
var str = str1+str2;
document.write(str);  //输出ChinaBeiJing

4.对字符串和数字进行加法运算

x=5+5;  结果是10

x=5+”5″;  结果是55

字符串和数字相加,会直接当做字符串连接起来。

如果向让5+”5″的结果是10,需要对字符串进行转数字。

字符串转数字有两种方法:

(1)使用转换函数:parseInt()转为整数  parseFloat()转为浮点数

(2)强制类型转换:Number()转为数字(可以是整数或浮点数),还有其他两种强制类型转换 Boolean()转为boolean值  String()转为字符串。

5.比较运算符

== 等于   === 全等于(值和类型都相等)  != 不等于  > 大于  < 小于  >= 大于等于  <= 小于等于

6.逻辑运算符

&& 逻辑与   || 逻辑或  ! 逻辑非

7.条件运算符

variablename=(condition)?value1:value2

var a = 5;
var b = 8;
var d = a>b ? "a大于b" : "a小于b";
document.write(d);

类似于PHP的三元运算符。

 

JavaScript基础 – 变量和数据类型

一、变量

1.声明变量

变量必须以字母开头,也能以 $ 或 _ 符号开头;

变量名称对大小写敏感;

使用 var 关键字声明变量;

可以在一条语句中声明多个变量;

var a=1,b=2,c=3;  //可以一次声明多个变量

未使用值来声明的变量,值是 undefined;

如果重新声明 javascript 变量,该变量的值不会丢失;

var a = 12;
var a;
alert(a);  //值仍是12

2.全局变量和局部变量

函数内部声明的变量(使用var)是局部变量,只在函数内有效

在函数外部声明的变量是全局变量,所有脚本和函数都能访问它。(与php不同)

注意:如果函数内的变量与全局变量重名,函数内使用全局变量需要用 this

var a = 100;
function fun(){
	var a = 200;
	alert(this.a); //输出 100
}
fun();

二、数据类型

字符串、数字、布尔、数组、对象、Null、Undefined

1.字符串

字符串可以是引号中的任意文本,可以用单引号或双引号

var a = "aaaa";
var b = 'bbbbb';
var c = "this is 'c'";
var d = 'this is "d"';
var e = "this is \"e\"";
var f = 'this is \'f\'';

双引号与单引号的区别:

(1)只使用字符的字符串,单引号和双引号没有区别

(2)在单引号包括的字符串中可以直接用双引号,在双引号包括的字符串中可以直接用单引号

(3)如果在双引号包括的字符串中用双引号,需要用反斜杠转义,注意是”\”   ;同样在单引号包括的字符串中用单引号,也需要转义

(4)如果要用反斜杠,则输入‘\\’

2.数字

JavaScript 只有一种数字类型。数字可以带小数点,也可以不带。

var a = 3.14;
var b = 5;

3.布尔

布尔(逻辑)只能有两个值:true 或 false。

var a = true;
var b = false;

4.数组

数组有两种定义方式:[]、Array()

//使用[]定义数组
var arr1 = ["car","house","money"];
//使用Array,注意区分大小写
var arr2 = new Array();
arr2[0] = "car";
arr2[1] = "house";
arr2[2] = "money";	//特别注意不能用arr2[]定义,它不会自动分配下标
var arr3 = new Array("car","house","money");
//获取某个值用arr[1],下标从0开始
alert(arr3[1]);

可以定义关联数组,由于js的一切都是对象,因此关联数组本质上是给数组增加了属性,因此使用关联数组并不是一个好习惯,我们可以使用对象,其实对象也就是关联数组。

var arr = new Array();
arr["a"] = "aaaa";
arr["b"] = "bbbb";

注意:常规数组是可以通过数组的length属性获得数组长度,比如 arr.length。但是关联数组无法使用length获取长度。

5.对象

对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔。

var person={firstname:"Bill", lastname:"Gates", id:5566};
alert(person.lastname);
alert(person['lastname']);

注意:虽然关联数组和对象非常相似,但是关联数组不能使用 person.lastname 这种方式获取其值。

也可以使用下面的方式定义

var student = new Object();
student.name = "zhangsan";
student.age = 12;
student.sex = "boy";
alert(student.name);

6.Undefined 和 Null

Undefined 这个值表示变量不含有值。

可以通过将变量的值设置为 null 来清空变量。

var a = 12;
a = null;

7.声明变量类型

当您声明新变量时,可以使用关键词 “new” 来声明其类型:

var carname = new String;
var x = new Number;
var y = new Boolean;
var cars = new Array;
var person = new Object;