当前位置:  编程技术>php
本页文章导读:
    ▪php代码把全角数字转为半角数字       //把全角数字转为半角数字 function GetAlabNum($fnum){     $nums = array('0','1','2','3','4','5','6','7','8','9','.','-','+',':');     $fnums = array('0','1',  '2','3',  '4','5',  '6', '7','8'.........
    ▪利用PHP制作简单的内容采集器的代码       采集器,通常又叫小偷程序,主要是用来抓取别人网页内容的。关于采集器的制作,其实并不难,就是远程打开要采集的网页,然后用正则表达式将需要的内容匹配出来,只要稍微有点正则.........
    ▪php a simple smtp class       smtp.class.php 代码如下:<?php   define('SMTP_STATUS_NOT_CONNECTED', 1, TRUE);  define('SMTP_STATUS_CONNECTED', 2, TRUE);  class smtp  {  var $connection;  var $recipients;  var $headers;  var $timeout;  var $errors;  var.........

[1]php代码把全角数字转为半角数字
    来源: 互联网  发布时间: 2013-11-30
//把全角数字转为半角数字
function GetAlabNum($fnum){
    $nums = array('0','1','2','3','4','5','6','7','8','9','.','-','+',':');
    $fnums = array('0','1',  '2','3',  '4','5',  '6', '7','8',  '9','.',  '-', '+',':');
    $fnlen = count($fnums);
    for($i=0;$i<$fnlen;$i++) $fnum = str_replace($nums[$i],$fnums[$i],$fnum);
    $slen = strlen($fnum);
    $oknum = '';
    for($i=0;$i<$slen;$i++){
        if(ord($fnum[$i]) > 0x80) $i++;
        else $oknum .= $fnum[$i];
    }
    if($oknum=="") $oknum=0;
    return $oknum;
}

    
[2]利用PHP制作简单的内容采集器的代码
    来源: 互联网  发布时间: 2013-11-30
采集器,通常又叫小偷程序,主要是用来抓取别人网页内容的。关于采集器的制作,其实并不难,就是远程打开要采集的网页,然后用正则表达式将需要的内容匹配出来,只要稍微有点正则表达式的基础,都能做出自己的采集器来的。 

  前几天做了个小说连载的程序,因为怕更新麻烦,顺带就写了个采集器,采集八路中文网的,功能比较简单,不能自定义规则,不过大概思路都在里面了,自定义规则可以自己来扩展。 

  用php来做采集器主要用到两个函数:file_get_contents()和preg_match_all(),前一个是远程读取网页内容的,不过只在php5以上的版本才能用,后一个是正则函数,用来提取需要的内容的。 

  下面就一步一步来讲功能实现。 

  因为是采集小说,所以首先要将书名、作者、类型这三个提取出来,别的信息可根据需要提取。

  这里以《回到明朝当王爷》为目标,先打开书目页,链接:http://www.86zw.com/Book/3727/Index.aspx

  多打开几本书会发现,书名的基本格式是:http://www.86zw.com/Book/书号/Index.aspx,于是我们可以做一个开始页,定义一个<input type=text name=number>,用来输入需要采集的书号,以后就可以通过$_POST[‘number']这种格式来接收需要采集的书号了。接收到书号,下面要做的就是构造书目页:$url=http://www.86zw.com/Book/$_POST[‘number']/Index.aspx,当然这里是举个例子,主要是为了讲解方便,实际制作的时候最好检查一下$_POST[‘number']的合法性。 

  构造好URL以后就可以开始采集书籍信息了。使用file_get_contents() 函数打开书目页:$content=file_get_contents($url),这样就能将书目页的内容都读取出来了。接下来就是将书名、作者和类型等信息匹配出来了。这里就以书名为例,其他的都一样。 打开书目页,查看源文件,找到“<span >《回到明朝当王爷》</span>”,这就是要提取出来的书名了。提取书名的正则表达式:/<span newstitle\">(.*?)\<\/span>/is,使用preg_match_all()函数将书名取出:preg_match_all("/<span newstitle\">(.*?)\<\/span>/is",$contents,$title);这样$title[0][0]的内容就是我们要的标题了(preg_match_all函数的用法可以去百度查,这里就不详细说明了)。取出了书籍信息,接下来就是取章节内容了,要取章节内容,首先要做的就是找到每一章的地址,然后远程打开章节,用正则将内容取出来,入库或者直接生成html静态文件。这个是章节列表的地址:http://www.86zw.com/Html/Book/18/3727/List.shtm,可以看出这个和书目页一样,是有规律可寻的:http://www.86zw.com/Html/Book/分类号/书号/List.shtm。书号前面已经取得,这里的关键是找到分类号,分类号可以在前面的书目页找到,提取分类号:

  preg_match_all("/Html\/Book\/[0-9]{1,}\/[0-9]{1,}\/List\.shtm/is",$contents,$typeid);这样还不够,还需要一个切取函数:
PHP代码如下:
代码如下:

function cut($string,$start,$end){ 
$message = explode($start,$string); 
$message = explode($end,$message[1]); return $message[0];}其中$string为要被切取的内容,$start为开始的地方,$end为结束的地方。取出分类号: 

$start = "Html/Book/"; 
$end 
= "List.shtm"; 
$typeid = cut($typeid[0][0],$start,$end); 
$typeid = explode("/",$typeid);[/php]  

  这样,$typeid[0]就是我们要找的分类号了。接下来就是构造章节列表的地址了:$chapterurl = http://www.86zw.com/Html/Book/.$typeid[0]/$_POST[‘number']/List.shtm。有了这个就能找到每一章节的地址了。方法如下:

代码如下:

$ustart = "\"";  
$uend 
= "\"";  
//t表示title的缩写 
$tstart = ">";  
$tend 
= "<";  
//取路径,例如:123.shtm,2342.shtm,233.shtm 
preg_match_all("/\"[0-9]{1,}\.(shtm)\"/is",$chapterurl,$url);  
//取标题,例如:第一章 九世善人 
preg_match_all("/<a href=/index.html"[0-9]{1,}\.shtm\"(.*?)\<\/a>/is",$file,$title);  
$count = count($url[0]); 
for($i=0;$i<=$count;$i++) 

$u = cut($url[0][$i],$ustart,$uend); 
$t = cut($title[0][$i],$tstart,$tend); 
$array[$u] = $t; 
}  


  $array数组就是所有的章节地址了,到这里,采集器就完成一半了,剩下的就是循环打开每个章节地址,读取,然后将内容匹配出来。这个比较简单,这里就不详细叙述了。好了,今天就先写到这吧,第一次写这么长的文章,语言组织方面难免有问题,还请大家多包涵!
本篇文章来源于 站长资讯网 原文链接:http://webdevelop.chinahtml.com/2/2007/php-119440156516960.shtml

    
[3]php a simple smtp class
    来源: 互联网  发布时间: 2013-11-30
smtp.class.php
代码如下:

<?php  

define('SMTP_STATUS_NOT_CONNECTED', 1, TRUE); 
define('SMTP_STATUS_CONNECTED', 2, TRUE); 

class smtp 


var $connection; 
var $recipients; 
var $headers; 
var $timeout; 
var $errors; 
var $status; 
var $body; 
var $from; 
var $host; 
var $port; 
var $helo; 
var $auth; 
var $user; 
var $pass; 
var $debug; 

/** 
* 参数为一个数组 
* host SMTP 服务器的主机 默认:localhost 
* port SMTP 服务器的端口 默认:25 
* helo 发送HELO命令的名称 默认:localhost 
* user SMTP 服务器的用户名 默认:空值 
* pass SMTP 服务器的登陆密码 默认:空值 
* timeout 连接超时的时间 默认:5 
* @return bool 
*/ 

function smtp($params = array()) 


if(!defined('CRLF')) define('CRLF', “\r\n”, TRUE); 

$this->timeout = 5; 
$this->status = SMTP_STATUS_NOT_CONNECTED; 
$this->host = ‘localhost'; 
$this->port = 25; 
$this->auth = FALSE; 
$this->user = ”; 
$this->pass = ”; 
$this->errors = array(); 
$this->debug = false; 
foreach($params as $key => $value) 

$this->$key = $value; 


$this->helo = $this->host; 

// 如果没有设置用户名则不验证 
$this->auth = (” == $this->user) ? FALSE : TRUE; 


function connect($params = array()) 


if(!isset($this->status)) 

$obj = new smtp($params); 

if($obj->connect()) 

$obj->status = SMTP_STATUS_CONNECTED; 


return $obj; 


else 


$this->connection = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout); 
socket_set_timeout($this->connection, 0, 250000); 

$greeting = $this->get_data(); 

if(is_resource($this->connection)) 

$this->status = 2; 
return $this->auth ? $this->ehlo() : $this->helo(); 

else 

$this->errors[] = ‘Failed to connect to server: ‘.$errstr; 
return FALSE; 




/** 
* 参数为数组 
* recipients 接收人的数组 
* from 发件人的地址,也将作为回复地址 
* headers 头部信息的数组 
* body 邮件的主体 
*/ 

function send($params = array()) 


foreach($params as $key => $value) 

$this->set($key, $value); 


if($this->is_connected()) 

// 服务器是否需要验证 
if($this->auth) 

if(!$this->auth()) return FALSE; 


$this->mail($this->from); 

if(is_array($this->recipients)) 

foreach($this->recipients as $value) 

$this->rcpt($value); 


else 

$this->rcpt($this->recipients); 


if(!$this->data()) return FALSE; 

$headers = str_replace(CRLF.'.', CRLF.'..', trim(implode(CRLF, $this->headers))); 
$body = str_replace(CRLF.'.', CRLF.'..', $this->body); 
$body = $body[0] == ‘.' ? ‘.'.$body : $body; 

$this->send_data($headers); 
$this->send_data(”); 
$this->send_data($body); 
$this->send_data('.'); 

return (substr(trim($this->get_data()), 0, 3) === ‘250′); 

else 

$this->errors[] = ‘Not connected!'; 
return FALSE; 



function helo() 

if(is_resource($this->connection) 
AND $this->send_data('HELO ‘.$this->helo) 
AND substr(trim($error = $this->get_data()), 0, 3) === ‘250′ ) 

return TRUE; 


else 

$this->errors[] = ‘HELO command failed, output: ‘ . trim(substr(trim($error),3)); 
return FALSE; 



function ehlo() 

if(is_resource($this->connection) 
AND $this->send_data('EHLO ‘.$this->helo) 
AND substr(trim($error = $this->get_data()), 0, 3) === ‘250′ ) 

return TRUE; 

else 

$this->errors[] = ‘EHLO command failed, output: ‘ . trim(substr(trim($error),3)); 
return FALSE; 



function auth() 

if(is_resource($this->connection) 
AND $this->send_data('AUTH LOGIN') 
AND substr(trim($error = $this->get_data()), 0, 3) === ‘334′ 
AND $this->send_data(base64_encode($this->user)) // Send username 
AND substr(trim($error = $this->get_data()),0,3) === ‘334′ 
AND $this->send_data(base64_encode($this->pass)) // Send password 
AND substr(trim($error = $this->get_data()),0,3) === ‘235′ ) 

return TRUE; 

else 

$this->errors[] = ‘AUTH command failed: ‘ . trim(substr(trim($error),3)); 
return FALSE; 



function mail($from) 


if($this->is_connected() 
AND $this->send_data('MAIL FROM:<'.$from.'>') 
AND substr(trim($this->get_data()), 0, 2) === ‘250′ ) 

return TRUE; 

else 

return FALSE; 



function rcpt($to) 

if($this->is_connected() 
AND $this->send_data('RCPT TO:<'.$to.'>') 
AND substr(trim($error = $this->get_data()), 0, 2) === ‘25′ ) 

return TRUE; 

else 

$this->errors[] = trim(substr(trim($error), 3)); 
return FALSE; 



function data() 


if($this->is_connected() 
AND $this->send_data('DATA') 
AND substr(trim($error = $this->get_data()), 0, 3) === ‘354′ ) 

return TRUE; 

else 

$this->errors[] = trim(substr(trim($error), 3)); 
return FALSE; 



function is_connected() 

return (is_resource($this->connection) AND ($this->status === SMTP_STATUS_CONNECTED)); 


function send_data($data) 

if(is_resource($this->connection)) 

if($this->debug) 
echo nl2br($data.CRLF); 
return fwrite($this->connection, $data.CRLF, strlen($data)+2); 

else 

return FALSE; 



function &get_data() 


$return = ”; 
$line = ”; 

if(is_resource($this->connection)) 

while(strpos($return, CRLF) === FALSE OR substr($line,3,1) !== ‘ ‘) 

$line = fgets($this->connection, 512); 
$return .= $line; 

if($this->debug===true) 
echo nl2br($return.CRLF); 
return $return; 


else 

return FALSE; 



function set($var, $value) 

$this->$var = $value; 
return TRUE; 

} // End of class 
?> 


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3