四种 PHP验证码

<?php

//checkNum.php
session_start();
function random($len)
{
$srcstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
mt_srand();//配置乱数种子
$strs="";
for($i=0;$i <$len;$i++){
$strs.=$srcstr[mt_rand(0,35)];
}

return strtoupper($strs);
}
$str=random(4); //随机生成的字符串" title="字符串" >字符
$width = 50; //验证码图片的宽度
$height = 25; //验证码图片的高度

@header("Content-Type:image/png");
$_SESSION["code"] = $str;
//echo $str;
$im=imagecreate($width,$height);
//背景色
$back=imagecolorallocate($im,0xFF,0xFF,0xFF);
//模糊点颜色
$pix=imagecolorallocate($im,187,230,247);
//字体色
$font=imagecolorallocate($im,41,163,238);
//绘模糊作用的点
mt_srand();
for($i=0;$i <1000;$i++)
{
imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pix);
}
imagestring($im, 5, 7, 5,$str, $font);
imagerectangle($im,0,0,$width-1,$height-1,$font);
imagepng($im);
imagedestroy($im);
$_SESSION["code"] = $str;

session_destroy();
?>


<?php
//checkNum.php
session_start();
function random($len)
{
$srcstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
mt_srand();//配置乱数种子
$strs="";
for($i=0;$i <$len;$i++){
$strs.=$srcstr[mt_rand(0,35)];
}

return strtoupper($strs);
}
$str=random(4); //随机生成的字符串" title="字符串" >字符
$width = 50; //验证码图片的宽度
$height = 25; //验证码图片的高度

@header("Content-Type:image/png");
$_SESSION["code"] = $str;
//echo $str;
$im=imagecreate($width,$height);
//背景色
$back=imagecolorallocate($im,0xFF,0xFF,0xFF);
//模糊点颜色
$pix=imagecolorallocate($im,187,230,247);
//字体色
$font=imagecolorallocate($im,41,163,238);
//绘模糊作用的点
mt_srand();
for($i=0;$i <1000;$i++)
{
imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pix);
}
imagestring($im, 5, 7, 5,$str, $font);
imagerectangle($im,0,0,$width-1,$height-1,$font);
imagepng($im);
imagedestroy($im);
$_SESSION["code"] = $str;

session_destroy();

?>

<?php
session_start();
$authnum=random(6);//验证码字符.
$_SESSION['yan']=$authnum;
//生成验证码图片
Header("Content-type: image/PNG");
$im = imagecreate(55,18); //imagecreate() 新建图像,大小为 x_size 和 y_size 的空白图像
$red = ImageColorAllocate($im, 153,51,0); //设置背景颜色
$white = ImageColorAllocate($im, 255,204,0);//设置文字颜色
$gray = ImageColorAllocate($im, 102,102,0); //设置杂点颜色


 

 

 

imagefill($im,55,18,$red);

for ($i = 0; $i < strlen($authnum); $i++)
{
// $i%2 == 0?$top = -1:$top = 3;

imagestring($im, 6, 13*$i+4, 1, substr($authnum,$i,1), $white);
//int imagestring ( resource image, int font, int x, int y, string s, int col)
//imagestring() 用 col 颜色字符串" title="字符串" >字符串 s 画到 image 所代表的图像的 x,y 座标处(图像的左上角为 0, 0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。
}
for($i=0;$i<100;$i++) //加入干扰象素
{
imagesetpixel($im, rand()%55 , rand()%18 , $gray);
//int imagesetpixel ( resource image, int x, int y, int color)
//imagesetpixel() 在 image 图像中用 color 颜色在 x, y 坐标(图像左上角为 0, 0)上画一个点。
}
ImagePNG($im); //以 PNG 格式图像输出浏览器文件
ImageDestroy($im);//销毁一图像

//产生随机数函数
function random($length) {
$hash = '';
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';

$max = strlen($chars) - 1;

for($i = 0; $i < $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;

}
?>

 


<?php

session_start();

//生成验证码图片

Header("Content-type: image/PNG");

srand((double)microtime()*1000000);

$im = imagecreate(62,20);

$black = ImageColorAllocate($im, 0,0,0);

$white = ImageColorAllocate($im, 255,255,255);

$gray = ImageColorAllocate($im, 200,200,200);

imagefill($im,68,30,$gray);

while(($authnum=rand()%100000)<10000);

//将四位整数验证码绘入图片

imagestring($im, 5, 10, 3, $authnum, $white);

for($i=0;$i<200;$i++) //加入干扰象素

{

$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));

imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);

}
ImagePNG($im);
ImageDestroy($im);
$_SESSION['SESSION_VALIDATE_CODE'] = $authnum.'';

?>

 

php使用phpmailer发送邮件不显示中文的解决办法

phpmailer
是很优秀的发件程序

今天使用
phpmailer
要发件时,

按照说明
设置
smtp服务器
用户
密码

能正常利用支持
smtp/pop3服务的邮箱
发送信件给指定邮箱

但是中文
却显示不了,

最后经过解决

只要将send.php(我写发送逻辑
代码
文件
)转为utf
-8的文件
格式
即可。

window下设置apache虚拟主机

apache设置个虚拟主机使域名可行有两种办法:1.个IP解析到不同虚拟主机 2.单个IP绑定域名分解到不同虚拟主机

我们一般都是第2种,域名绑定同一IP。

首先,修改hosts文件域名访问方式。添加域名指向

不同的windows版本位置不同,

Windows 3.1/95/98/ME:
c:\windows\hosts

Windows NT/2000/XP Pro:
c:\winnt\system32\drivers\etc\hosts or c:\windows\system32\drivers\etc\hosts

Windows XP Home:
c:\windows\system32\drivers\etc\hosts

Windows Vista:
C:\Windows\System32\Drivers\etc\hosts

打开hosts文件,一般已有 ‘127.0.0.1       localhost’ ,添加你要增加的域名,如 ‘127.0.0.1 sjolzy ’,左边是ip,右边是域名。这样子,在本地访问//sjolzy/ (不存在的域名) 就如同http://localhost 指向设定的网站目录

接着,在apache配置文件上,创建相对应的虚拟主机

打开 httpd.conf文件,添加如下


<VirtualHost *:80>
DocumentRoot "D:/www/sjolzy"
ServerName sjolzy
</VirtualHost>

这样子在浏览器直接输入//sjolzy 就能转到相应的虚拟主机上。

 

或者参考以下:

实现Apache虚拟主机方法一:
开启虚拟主机配置文件

httpd.conf进行设置

1.注释以下三行

#ServerAdmin
#ServerName
#DocumentRoot

2.去掉mod_proxy.so和mod_proxy_ajp.so的注释

3.#Virtual hosts

#Include conf/extra/httpd-vhosts.conf查找这行,把前面的#去掉)
/conf/extra/httpd-vhosts.conf

4.打开 /conf/extra/httpd-vhosts.conf

#192.168.1.24为本地Ip
NameVirtualHost 192.168.1.24:80 


# php项目

<VirtualHost 192.168.1.24:80>

<Directory "D:/phproot/phpmyadmin">

DirectoryIndex index.php

</Directory>

ServerAdmin baibiao @gmail.com

ServerName email.sinoepiboly.com

#ServerAlias email.sinoepiboly.com

DocumentRoot D:/phproot/phpmyadmin

</VirtualHost>

==================================================================

方法二:

二级域名主机开发环境设置说明
第一步 DNS解析实现

找到本机的host文件,一般在 C:\WINNT\system32\drivers\etc,在文件结尾添加:

127.0.0.1 localhost
127.0.0.1 www.com.cn
127.0.0.1 home.com.cn
127.0.0.1 mail.com.cn
127.0.0.1 music.com.cn
127.0.0.1 browseusers.com.cn
127.0.0.1 search.com.cn
127.0.0.1 invite.com.cn
127.0.0.1 rank.com.cn
127.0.0.1 blog.com.cn
127.0.0.1 favorites.com.cn
127.0.0.1 forum.com.cn
127.0.0.1 groups.com.cn
127.0.0.1 events.com.cn
127.0.0.1 classifieds.com.cn
127.0.0.1 signup.com.cn
192.168.6.153 i.com.cn
192.168.6.153 x.com.cn

其中
192.168.6.2 i.com.cn
192.168.6.2 x.com.cn
技术人员不作修改,是美工页面专用的

第二步:apache设置

打开httpd.conf,以music.com.cn为例,其他栏目似添加,在文件最后加入:

1. 保证
Listen 80

2. 打开注释
NameVirtualHost *:80

3. 在末尾添加
<VirtualHost *:80>
ServerAdmin x_cn@msn.com
DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs/espace/music"
ServerName music.com.cn
</VirtualHost>
<VirtualHost *:80>
ServerAdmin x_cn@msn.com
DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs/espace/blog"
ServerName blog.com.cn
</VirtualHost>

...

重启即可,Apache虚拟主机设置完成。

自己写一个网络爬虫蜘蛛程序

 

这里是维基百科对网络
爬虫的词条页面
网络
爬虫以叫网络
蜘蛛
网络
机器人,这是一个程序
,其会自动的通过网络
抓取
互联网
上的网页
,这种技术
一般可能用来检查你的站点上所有的链接是否是都是有效的。当然,更为高级的技术
是把网页
中的相关数据
保存下来,可以成为搜索引
擎。

从技相来说,实现抓取
网页
可能并不是一件很困难的事情
,困难的事情
是对网页
的分析和整理
,那是一件需要有轻量智能,需要大量数学计算的程序
才能做的事情
。下面一个简单的流程:


在这里,我们只是说一下如何写一个网页
抓取
程序

首先我们先看一下,如何使用
命令
行的方式
来找开网页

telnet somesite.com 80
GET /index.html HTTP/1.0
按回车两次

使用
telnet就是告诉你其实这是一个socket的技术
,并且使用
HTTP的协议,如GET方法
获得
网页
,当然,接下来的事你就需要解析HTML文法,甚至还需要解析Javascript,因为现在的网页
使用
Ajax的越来越
了,而很
网页
内容
都是通过Ajax技术
加载
的,因为,只是简单地解析HTML文件
在未来会远远不够。当然,在这里,只是展示一个非常简单的抓取
,简单到只能做为一个例子,下面这个示例
的伪代码

网页


for each 链接 in 当前网页

所有的链接
{
if(如果本链接是我们想要的 || 这个链接从未访问过)
{
处理对本链接
把本链接设置

为已访问
}
}
require “rubygems”
require “mechanize”

class Crawler < WWW::Mechanize

attr_accessor :callback
INDEX = 0
DOWNLOAD = 1
PASS = 2

def initialize
super
init
@first = true
self.user_agent_alias = “Windows IE 6″
end

def init
@visited = []
end

def remember(link)
@visited << link
end

def perform_index(link)
self.get(link)
if(self.page.class.to_s == “WWW::Mechanize::Page”)
links = self.page.links.map {|link| link.href } - @visited
links.each do |alink|
start(alink)
end
end
end

def start(link)
return if link.nil?
if(!@visited.include?(link))
action = @callback.call(link)
if(@first)
@first = false
perform_index(link)
end
case action
when INDEX
perform_index(link)
when DOWNLOAD
self.get(link).save_as(File.basename(link))
when PASS
puts “passing on #{link}”
end
end
end

def get(site)
begin
puts “getting #{site}”
@visited << site
super(site)
rescue
puts “error getting #{site}”
end
end
end

上面的代码
就不必
说了,大家可以去试试。下面是如何使用
上面的代码

require “crawler”

x = Crawler.new
callback = lambda do |link|
if(link =~/\\.(zip|rar|gz|pdf|doc)
x.remember(link)
return Crawler::PASS
elsif(link =~/\\.(jpg|jpeg)/)
return Crawler::DOWNLOAD
end
return Crawler::INDEX;
end

x.callback = callback
x.start(”http://somesite.com”)

下面是一些和网络
爬虫相关的开源网络
项目

昨天又把工作辞了,

不想要,

公司前景不好,

今天有约面试,

看看这次能不能找到ok的,

不要再像那首杯具的歌...

我要的公司不要我,我不要的公司我辞了。

我一直觉得第一份正式的工作要方面考虑,

看是否合适自己长期发展

不然工作久了某些方面定势下来,

虽然发现问题

知道是不好的,

但那时候已经不好改变了或者懒得改变的,

也就难已回头,

对以后的发展影响不好,

我不想输在起跑线上,

所以我宁愿现在奔波几次,

年轻人嘛,

跑跑更健康。

再次怀念一下天铭..

生活姿态

这次的遇挫,

一下子让我的生活态度改变,

怀疑,不自信,迷茫,无助,无力感,

种种负面情绪接踵压至,

蛮以为自己可以克服,

无所谓,

以为自己不在意,

其实原来在浮躁的表面下已波滔带汹涌,

一下子奄了我的姿态,

找不着北,

不晓得该以什么样的精神世界去面对,

只是想发泄,

我不知道是什么。

再加上物质界的影响,

真有想哭的冲动,

韶光22如我,

希望自己能满足自己满足他人了,

可是似乎目标又远了,

我发现现在的我没有足够的智慧去处理这些事,