火车采集器接口:gb2312和unicode间编码转换,php版

<?php
$str = "TTL全天候自动聚焦";
$str = preg_replace("|&#([0-9]{1,5});|", "\".u2utf82gb(\\1).\"", $str);
$str = "\$str=\"$str\";";

eval($str);
echo $str;

function u2utf82gb($c){
    $str="";
    if ($c < 0x80) {
         $str.=$c;
    } else if ($c < 0x800) {
         $str.=chr(0xC0 | $c>>6);
         $str.=chr(0x80 | $c & 0x3F);
    } else if ($c < 0x10000) {
         $str.=chr(0xE0 | $c>>12);
         $str.=chr(0x80 | $c>>6 & 0x3F);
         $str.=chr(0x80 | $c & 0x3F);
    } else if ($c < 0x200000) {
         $str.=chr(0xF0 | $c>>18);
         $str.=chr(0x80 | $c>>12 & 0x3F);
         $str.=chr(0x80 | $c>>6 & 0x3F);
         $str.=chr(0x80 | $c & 0x3F);
    }
    return iconv('UTF-8', 'GB2312', $str);
}
?>

智能的PHP缩图类

*作者:落梦天蝎(beluckly)
*完成时间:2006-12-18
*类名:CreatMiniature
*功能:生成多种类型的缩略图
*基本参数:$srcFile,$echoType
*方法用到的参数:
$toFile,生成的文件
$toW,生成的宽
$toH,生成的高
$bk1,背景颜色参数 以255为最高
$bk2,背景颜色参数
$bk3,背景颜色参数

PHP图片缩放函数

function imgageshow($link,$alt="",$x="",$y="",$class='')
{
$size = GetImageSize($link);
$width = $size[0];
$height = $size[1];
if($x!="" or $y!="")
{
if($width>$x){
$temp=$x/$width;
$width=$x;
$height=$height*$temp;
if($height>$y){
$temp=$y/$height;
$height=$y;
$width=$width*$temp;
}
}elseif ($height>$y){
$temp=$y/$height;
$height=$y;
$width=$width*$temp;
if($width>$x){
$temp=$x/$width;
$width=$x;
$height=$height*$temp;
}
}
else{
$width=$width;
$height=$height;
}
}else{
$width=$width;
$height=$height;
}
//echo "<img src="$link" alt="$alt" width="$width" height="$height" /><img src="\" border="0" alt="\&quot;$alt\&quot;" width="\&quot;$width\&quot;" height="\&quot;$height\&quot;" /><img src="\" border="0" alt="\&quot;$alt\&quot;" width="\&quot;$width\&quot;" height="\&quot;$height\&quot;" />

Snoopy初试,

snoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务。
下面是它的一些特征:
1、方便抓取网页的内容
2、方便抓取网页的文字(去掉HTML代码)
3、方便抓取网页的链接
4、支持代理主机
5、支持基本的用户/密码认证模式
6、支持自定义用户agent,referer,cookies和header内容
7、支持浏览器转向,并能控制转向深度
8、能把网页中的链接扩展成高质量的url(默认)
9、方便提交数据并且获取返回值
10、支持跟踪HTML框架(v0.92增加)
11、支持再转向的时候传递cookies

下面是简单的例子,比如说我们抓取我的blog的文字

<?php
include "Snoopy.class.php";
$snoopy = new Snoopy;
$snoopy->fetchtext("http://www.4wei.cn");
echo $snoopy->results;
?>
<?php

include "Snoopy.class.php";
$snoopy = new Snoopy;
$snoopy->fetchlinks("http://www.4wei.cn");
print_r($snoopy->results);
?>
<?php
/**
* @name Snoopy手册中文版
* @author 毛毛虫 wangchong1985@gmail.com
* @version Snoopy - the PHP net client v1.2.2
* @link http://www.wangchong.org
* @since 2008-04-27
*/

include "Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->fetchtext("http://www.php.net/");
print $snoopy->results;

$snoopy->fetchlinks("http://www.phpbuilder.com/");
print $snoopy->results;

$submit_url = "http://lnk.ispi.net/texis/scripts/msearch/netsearch.html";

$submit_vars["q"] = "amiga";
$submit_vars["submit"] = "Search!";
$submit_vars["searchhost"] = "Altavista";

$snoopy->submit($submit_url,$submit_vars);
print $snoopy->results;

$snoopy->maxframes=5;
$snoopy->fetch("http://www.ispi.net/");
echo "
 ";
    echo htmlentities($snoopy->results[0]);
    echo htmlentities($snoopy->results[1]);
    echo htmlentities($snoopy->results[2]);


include "Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->user = "joe";
$snoopy->pass = "bloe";

if($snoopy->fetch("http://www.slashdot.org/"))
{
echo "response code: ".$snoopy->response_code."
";
while(list($key,$val) = each($snoopy->headers))
echo $key.": ".$val."
";
echo "

";

例子: 展示所有属性的功能:

include "Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->proxy_host = "my.proxy.host";
$snoopy->proxy_port = "8080";

$snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)";
$snoopy->referer = "http://www.microsnot.com/";

$snoopy->cookies["SessionID"] = 238472834723489l;
$snoopy->cookies["favoriteColor"] = "RED";

$snoopy->rawheaders["Pragma"] = "no-cache";

$snoopy->maxredirs = 2;
$snoopy->offsiteok = false;
$snoopy->expandlinks = false;

$snoopy->user = "joe";
$snoopy->pass = "bloe";

if($snoopy->fetchtext("http://www.phpbuilder.com"))
{
while(list($key,$val) = each($snoopy->headers))
echo $key.": ".$val."
";
echo "

";

echo "
";

例子: 抓取框架内容并展示结果:

include "Snoopy.class.php";
$snoopy = new Snoopy;

$snoopy->maxframes = 5;

if($snoopy->fetch("http://www.ispi.net/"))
{
echo "

COPYRIGHT:
Copyright(c) 1999,2000 ispi. All rights reserved.
This software is released under the GNU General Public License.
Please read the disclaimer at the top of the Snoopy.class.php file.

THANKS:
Special Thanks to:
Peter Sorger help fixing a redirect bug
Andrei Zmievski implementing time out functionality
Patric Sandelin
help with fetchform debugging
Carmelo misc bug fixes with frames

文章出处:http://www.diybl.com/course/1_web/webjs/200855/114322.html

php图片处理类,缩放和裁剪

<?php
/**
 *  基本图片处理,用于完成图片缩入,水印添加
 *  当水印图超过目标图片尺寸时,水印图能自动适应目标图片而缩小
 *  水印图可以设置跟背景的合并度
 *
 *  Copyright(c) 2005 by ustb99. All rights reserved
 *
 *  To contact the author write to {@link mailto:ustb80@163.com}
 *
 * @author 偶然
 * @version $Id: thumb.class.php,v 1.9 2006/09/30 09:31:56 zengjian Exp $
 * @package system
 */

/**
 * ThumbHandler
 * @access public
 */

/*
 使用方法:
 自动裁切:
 程序会按照图片的尺寸从中部裁切最大的正方形,并按目标尺寸进行缩略

 $t->setSrcImg("img/test.jpg");
 $t->setCutType(1);//这一句就OK了
 $t->setDstImg("tmp/new_test.jpg");
 $t->createImg(60,60);

 手工裁切:
 程序会按照指定的位置从源图上取图

 $t->setSrcImg("img/test.jpg");
 $t->setCutType(2);//指明为手工裁切
 $t->setSrcCutPosition(100, 100);// 源图起点坐标
 $t->setRectangleCut(300, 200);// 裁切尺寸
 $t->setDstImg("tmp/new_test.jpg");
 $t->createImg(300,200);
*/
class ThumbHandler
{
 var $dst_img;// 目标文件
 var $h_src; // 图片资源句柄
 var $h_dst;// 新图句柄
 var $h_mask;// 水印句柄
 var $img_create_quality = 100;// 图片生成质量
 var $img_display_quality = 80;// 图片显示质量,默认为75
 var $img_scale = 0;// 图片缩放比例
 var $src_w = 0;// 原图宽度
 var $src_h = 0;// 原图高度
 var $dst_w = 0;// 新图总宽度
 var $dst_h = 0;// 新图总高度
 var $fill_w;// 填充图形宽
 var $fill_h;// 填充图形高
 var $copy_w;// 拷贝图形宽
 var $copy_h;// 拷贝图形高
 var $src_x = 0;// 原图绘制起始横坐标
 var $src_y = 0;// 原图绘制起始纵坐标
 var $start_x;// 新图绘制起始横坐标
 var $start_y;// 新图绘制起始纵坐标
 var $mask_word;// 水印文字
 var $mask_img;// 水印图片
 var $mask_pos_x = 0;// 水印横坐标
 var $mask_pos_y = 0;// 水印纵坐标
 var $mask_offset_x = 5;// 水印横向偏移
 var $mask_offset_y = 5;// 水印纵向偏移
 var $font_w;// 水印字体宽
 var $font_h;// 水印字体高
 var $mask_w;// 水印宽
 var $mask_h;// 水印高
 var $mask_font_color = "#ffffff";// 水印文字颜色
 var $mask_font = 2;// 水印字体
 var $font_size;// 尺寸
 var $mask_position = 0;// 水印位置
 var $mask_img_pct = 50;// 图片合并程度,值越大,合并程序越低
 var $mask_txt_pct = 50;// 文字合并程度,值越小,合并程序越低
 var $img_border_size = 0;// 图片边框尺寸
 var $img_border_color;// 图片边框颜色
 var $_flip_x=0;// 水平翻转次数
 var $_flip_y=0;// 垂直翻转次数

 var $cut_type=0;// 剪切类型

 var $img_type;// 文件类型

 // 文件类型定义,并指出了输出图片的函数
 var $all_type = array(
 "jpg"  => array("output"=>"imagejpeg"),
 "gif"  => array("output"=>"imagegif"),
 "png"  => array("output"=>"imagepng"),
 "wbmp" => array("output"=>"image2wbmp"),
 "jpeg" => array("output"=>"imagejpeg"));

 /**
 * 构造函数
 */
 function ThumbHandler()
 {
 $this->mask_font_color = "#ffffff";
 $this->font = 2;
 $this->font_size = 12;
 }

 /**
 * 取得图片的宽
 */
 function getImgWidth($src)
 {
 return imagesx($src);
 }

 /**
 * 取得图片的高
 */
 function getImgHeight($src)
 {
 return imagesy($src);
 }

 /**
 * 设置图片生成路径
 *
 * @param    string    $src_img   图片生成路径
 */
 function setSrcImg($src_img, $img_type=null)
 {
 if(!file_exists($src_img))
 {
 die("图片不存在");
 }

 if(!empty($img_type))
 {
 $this->img_type = $img_type;
 }
 else
 {
 $this->img_type = $this->_getImgType($src_img);
 }

 $this->_checkValid($this->img_type);

 // file_get_contents函数要求php版本>4.3.0
 $src = '';
 if(function_exists("file_get_contents"))
 {
 $src = file_get_contents($src_img);
 }
 else
 {
 $handle = fopen ($src_img, "r");
 while (!feof ($handle))
 {
 $src .= fgets($fd, 4096);
 }
 fclose ($handle);
 }
 if(empty($src))
 {
 die("图片源为空");
 }
 $this->h_src = @ImageCreateFromString($src);
 $this->src_w = $this->getImgWidth($this->h_src);
 $this->src_h = $this->getImgHeight($this->h_src);
 }

 /**
 * 设置图片生成路径
 *
 * @param    string    $dst_img   图片生成路径
 */
 function setDstImg($dst_img)
 {
 $arr  = explode('/',$dst_img);
 $last = array_pop($arr);
 $path = implode('/',$arr);
 $this->_mkdirs($path);
 $this->dst_img = $dst_img;
 }

 /**
 * 设置图片的显示质量
 *
 * @param    string      $n    质量
 */
 function setImgDisplayQuality($n)
 {
 $this->img_display_quality = (int)$n;
 }

 /**
 * 设置图片的生成质量
 *
 * @param    string      $n    质量
 */
 function setImgCreateQuality($n)
 {
 $this->img_create_quality = (int)$n;
 }

 /**
 * 设置文字水印
 *
 * @param    string     $word    水印文字
 * @param    integer    $font    水印字体
 * @param    string     $color   水印字体颜色
 */
 function setMaskWord($word)
 {
 $this->mask_word .= $word;
 }

 /**
 * 设置字体颜色
 *
 * @param    string     $color    字体颜色
 */
 function setMaskFontColor($color="#ffffff")
 {
 $this->mask_font_color = $color;
 }

 /**
 * 设置水印字体
 *
 * @param    string|integer    $font    字体
 */
 function setMaskFont($font=2)
 {
 if(!is_numeric($font) && !file_exists($font))
 {
 die("字体文件不存在");
 }
 $this->font = $font;
 }

 /**
 * 设置文字字体大小,仅对truetype字体有效
 */
 function setMaskFontSize($size = "12")
 {
 $this->font_size = $size;
 }

 /**
 * 设置图片水印
 *
 * @param    string    $img     水印图片源
 */
 function setMaskImg($img)
 {
 $this->mask_img = $img;
 }

 /**
 * 设置水印横向偏移
 *
 * @param    integer     $x    横向偏移量
 */
 function setMaskOffsetX($x)
 {
 $this->mask_offset_x = (int)$x;
 }

 /**
 * 设置水印纵向偏移
 *
 * @param    integer     $y    纵向偏移量
 */
 function setMaskOffsetY($y)
 {
 $this->mask_offset_y = (int)$y;
 }

 /**
 * 指定水印位置
 *
 * @param    integer     $position    位置,1:左上,2:左下,3:右上,0/4:右下
 */
 function setMaskPosition($position=0)
 {
 $this->mask_position = (int)$position;
 }

 /**
 * 设置图片合并程度
 *
 * @param    integer     $n    合并程度
 */
 function setMaskImgPct($n)
 {
 $this->mask_img_pct = (int)$n;
 }

 /**
 * 设置文字合并程度
 *
 * @param    integer     $n    合并程度
 */
 function setMaskTxtPct($n)
 {
 $this->mask_txt_pct = (int)$n;
 }

 /**
 * 设置缩略图边框
 *
 * @param    (类型)     (参数名)    (描述)
 */
 function setDstImgBorder($size=1, $color="#000000")
 {
 $this->img_border_size  = (int)$size;
 $this->img_border_color = $color;
 }

 /**
 * 水平翻转
 */
 function flipH()
 {
 $this->_flip_x++;
 }

 /**
 * 垂直翻转
 */
 function flipV()
 {
 $this->_flip_y++;
 }

 /**
 * 设置剪切类型
 *
 * @param    (类型)     (参数名)    (描述)
 */
 function setCutType($type)
 {
 $this->cut_type = (int)$type;
 }

 /**
 * 设置图片剪切
 *
 * @param    integer     $width    矩形剪切
 */
 function setRectangleCut($width, $height)
 {
 $this->fill_w = (int)$width;
 $this->fill_h = (int)$height;
 }

 /**
 * 设置源图剪切起始坐标点
 *
 * @param    (类型)     (参数名)    (描述)
 */
 function setSrcCutPosition($x, $y)
 {
 $this->src_x  = (int)$x;
 $this->src_y  = (int)$y;
 }

 /**
 * 创建图片,主函数
 * @param    integer    $a     当缺少第二个参数时,此参数将用作百分比,
 *                             否则作为宽度值
 * @param    integer    $b     图片缩放后的高度
 */
 function createImg($a, $b=null)
 {
 $num = func_num_args();
 if(1 == $num)
 {
 $r = (int)$a;
 if($r < 1)
 {
 die("图片缩放比例不得小于1");
 }
 $this->img_scale = $r;
 $this->_setNewImgSize($r);
 }

 if(2 == $num)
 {
 $w = (int)$a;
 $h = (int)$b;
 if(0 == $w)
 {
 die("目标宽度不能为0");
 }
 if(0 == $h)
 {
 die("目标高度不能为0");
 }
 $this->_setNewImgSize($w, $h);
 }

 if($this->_flip_x%2!=0)
 {
 $this->_flipH($this->h_src);
 }

 if($this->_flip_y%2!=0)
 {
 $this->_flipV($this->h_src);
 }
 $this->_createMask();
 $this->_output();

 // 释放
 if(imagedestroy($this->h_src) && imagedestroy($this->h_dst))
 {
 Return true;
 }
 else
 {
 Return false;
 }
 }

 /**
 * 生成水印,调用了生成水印文字和水印图片两个方法
 */
 function _createMask()
 {
 if($this->mask_word)
 {
 // 获取字体信息
 $this->_setFontInfo();

 if($this->_isFull())
 {
 die("水印文字过大");
 }
 else
 {
 $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h);
 $white = ImageColorAllocate($this->h_dst,255,255,255);
 imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色
 $this->_drawBorder();
 imagecopyresampled( $this->h_dst, $this->h_src,
 $this->start_x, $this->start_y,
 $this->src_x, $this->src_y,
 $this->fill_w, $this->fill_h,
 $this->copy_w, $this->copy_h);
 $this->_createMaskWord($this->h_dst);
 }
 }

 if($this->mask_img)
 {
 $this->_loadMaskImg();//加载时,取得宽高

 if($this->_isFull())
 {
 // 将水印生成在原图上再拷
 $this->_createMaskImg($this->h_src);
 $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h);
 $white = ImageColorAllocate($this->h_dst,255,255,255);
 imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色
 $this->_drawBorder();
 imagecopyresampled( $this->h_dst, $this->h_src,
 $this->start_x, $this->start_y,
 $this->src_x, $this->src_y,
 $this->fill_w, $this->start_y,
 $this->copy_w, $this->copy_h);
 }
 else
 {
 // 创建新图并拷贝
 $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h);
 $white = ImageColorAllocate($this->h_dst,255,255,255);
 imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色
 $this->_drawBorder();
 imagecopyresampled( $this->h_dst, $this->h_src,
 $this->start_x, $this->start_y,
 $this->src_x, $this->src_y,
 $this->fill_w, $this->fill_h,
 $this->copy_w, $this->copy_h);
 $this->_createMaskImg($this->h_dst);
 }
 }

 if(empty($this->mask_word) && empty($this->mask_img))
 {
 $this->h_dst = imagecreatetruecolor($this->dst_w, $this->dst_h);
 $white = ImageColorAllocate($this->h_dst,255,255,255);
 imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$white);// 填充背景色
 $this->_drawBorder();

 imagecopyresampled( $this->h_dst, $this->h_src,
 $this->start_x, $this->start_y,
 $this->src_x, $this->src_y,
 $this->fill_w, $this->fill_h,
 $this->copy_w, $this->copy_h);
 }
 }

 /**
 * 画边框
 */
 function _drawBorder()
 {
 if(!empty($this->img_border_size))
 {
 $c = $this->_parseColor($this->img_border_color);
 $color = ImageColorAllocate($this->h_src,$c[0], $c[1], $c[2]);
 imagefilledrectangle($this->h_dst,0,0,$this->dst_w,$this->dst_h,$color);// 填充背景色
 }
 }

 /**
 * 生成水印文字
 */
 function _createMaskWord($src)
 {
 $this->_countMaskPos();
 $this->_checkMaskValid();

 $c = $this->_parseColor($this->mask_font_color);
 $color = imagecolorallocatealpha($src, $c[0], $c[1], $c[2], $this->mask_txt_pct);

 if(is_numeric($this->font))
 {
 imagestring($src,
 $this->font,
 $this->mask_pos_x, $this->mask_pos_y,
 $this->mask_word,
 $color);
 }
 else
 {
 imagettftext($src,
 $this->font_size, 0,
 $this->mask_pos_x, $this->mask_pos_y,
 $color,
 $this->font,
 $this->mask_word);
 }
 }

 /**
 * 生成水印图
 */
 function _createMaskImg($src)
 {
 $this->_countMaskPos();
 $this->_checkMaskValid();
 imagecopymerge($src,
 $this->h_mask,
 $this->mask_pos_x ,$this->mask_pos_y,
 0, 0,
 $this->mask_w, $this->mask_h,
 $this->mask_img_pct);

 imagedestroy($this->h_mask);
 }

 /**
 * 加载水印图
 */
 function _loadMaskImg()
 {
 $mask_type = $this->_getImgType($this->mask_img);
 $this->_checkValid($mask_type);

 // file_get_contents函数要求php版本>4.3.0
 $src = '';
 if(function_exists("file_get_contents"))
 {
 $src = file_get_contents($this->mask_img);
 }
 else
 {
 $handle = fopen ($this->mask_img, "r");
 while (!feof ($handle))
 {
 $src .= fgets($fd, 4096);
 }
 fclose ($handle);
 }
 if(empty($this->mask_img))
 {
 die("水印图片为空");
 }
 $this->h_mask = ImageCreateFromString($src);
 $this->mask_w = $this->getImgWidth($this->h_mask);
 $this->mask_h = $this->getImgHeight($this->h_mask);
 }

 /**
 * 图片输出
 */
 function _output()
 {
 $img_type  = $this->img_type;
 $func_name = $this->all_type[$img_type]['output'];
 if(function_exists($func_name))
 {
 // 判断浏览器,若是IE就不发送头
 if(isset($_SERVER['HTTP_USER_AGENT']))
 {
 $ua = strtoupper($_SERVER['HTTP_USER_AGENT']);
 if(!preg_match('/^.*MSIE.*\)$/i',$ua))
 {
 header("Content-type:$img_type");
 }
 }
 $func_name($this->h_dst, $this->dst_img, $this->img_display_quality);
 }
 else
 {
 Return false;
 }
 }

 /**
 * 分析颜色
 *
 * @param    string     $color    十六进制颜色
 */
 function _parseColor($color)
 {
 $arr = array();
 for($ii=1; $ii_isFull())
 {
 switch($this->mask_position)
 {
 case 1:
 // 左上
 $this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;
 $this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;
 break;

 case 2:
 // 左下
 $this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;
 $this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y;
 break;

 case 3:
 // 右上
 $this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x;
 $this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;
 break;

 case 4:
 // 右下
 $this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x;
 $this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y;
 break;

 default:
 // 默认将水印放到右下,偏移指定像素
 $this->mask_pos_x = $this->src_w - $this->mask_w - $this->mask_offset_x;
 $this->mask_pos_y = $this->src_h - $this->mask_h - $this->mask_offset_y;
 break;
 }
 }
 else
 {
 switch($this->mask_position)
 {
 case 1:
 // 左上
 $this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;
 $this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;
 break;

 case 2:
 // 左下
 $this->mask_pos_x = $this->mask_offset_x + $this->img_border_size;
 $this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size;
 break;

 case 3:
 // 右上
 $this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size;
 $this->mask_pos_y = $this->mask_offset_y + $this->img_border_size;
 break;

 case 4:
 // 右下
 $this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size;
 $this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size;
 break;

 default:
 // 默认将水印放到右下,偏移指定像素
 $this->mask_pos_x = $this->dst_w - $this->mask_w - $this->mask_offset_x - $this->img_border_size;
 $this->mask_pos_y = $this->dst_h - $this->mask_h - $this->mask_offset_y - $this->img_border_size;
 break;
 }
 }
 }

 /**
 * 设置字体信息
 */
 function _setFontInfo()
 {
 if(is_numeric($this->font))
 {
 $this->font_w  = imagefontwidth($this->font);
 $this->font_h  = imagefontheight($this->font);

 // 计算水印字体所占宽高
 $word_length   = strlen($this->mask_word);
 $this->mask_w  = $this->font_w*$word_length;
 $this->mask_h  = $this->font_h;
 }
 else
 {
 $arr = imagettfbbox ($this->font_size,0, $this->font,$this->mask_word);
 $this->mask_w  = abs($arr[0] - $arr[2]);
 $this->mask_h  = abs($arr[7] - $arr[1]);
 }
 }

 /**
 * 设置新图尺寸
 *
 * @param    integer     $img_w   目标宽度
 * @param    integer     $img_h   目标高度
 */
 function _setNewImgSize($img_w, $img_h=null)
 {
 $num = func_num_args();
 if(1 == $num)
 {
 $this->img_scale = $img_w;// 宽度作为比例
 $this->fill_w = round($this->src_w * $this->img_scale / 100) - $this->img_border_size*2;
 $this->fill_h = round($this->src_h * $this->img_scale / 100) - $this->img_border_size*2;

 // 源文件起始坐标
 $this->src_x  = 0;
 $this->src_y  = 0;
 $this->copy_w = $this->src_w;
 $this->copy_h = $this->src_h;

 // 目标尺寸
 $this->dst_w   = $this->fill_w + $this->img_border_size*2;
 $this->dst_h   = $this->fill_h + $this->img_border_size*2;
 }

 if(2 == $num)
 {
 $fill_w   = (int)$img_w - $this->img_border_size*2;
 $fill_h   = (int)$img_h - $this->img_border_size*2;
 if($fill_w < 0 || $fill_h < 0)
 {
 die("图片边框过大,已超过了图片的宽度");
 }
 $rate_w = $this->src_w/$fill_w;
 $rate_h = $this->src_h/$fill_h;

 switch($this->cut_type)
 {
 case 0:
 // 如果原图大于缩略图,产生缩小,否则不缩小
 if($rate_w < 1 && $rate_h < 1)
 {
 $this->fill_w = (int)$this->src_w;
 $this->fill_h = (int)$this->src_h;
 }
 else
 {
 if($rate_w >= $rate_h)
 {
 $this->fill_w = (int)$fill_w;
 $this->fill_h = round($this->src_h/$rate_w);
 }
 else
 {
 $this->fill_w = round($this->src_w/$rate_h);
 $this->fill_h = (int)$fill_h;
 }
 }

 $this->src_x  = 0;
 $this->src_y  = 0;

 $this->copy_w = $this->src_w;
 $this->copy_h = $this->src_h;

 // 目标尺寸
 $this->dst_w   = $this->fill_w + $this->img_border_size*2;
 $this->dst_h   = $this->fill_h + $this->img_border_size*2;
 break;

 // 自动裁切
 case 1:
 // 如果图片是缩小剪切才进行操作
 if($rate_w >= 1 && $rate_h >=1)
 {
 if($this->src_w > $this->src_h)
 {
 $src_x = round($this->src_w-$this->src_h)/2;
 $this->setSrcCutPosition($src_x, 0);
 $this->setRectangleCut($fill_h, $fill_h);

 $this->copy_w = $this->src_h;
 $this->copy_h = $this->src_h;

 }
 elseif($this->src_w < $this->src_h)
 {
 $src_y = round($this->src_h-$this->src_w)/2;
 $this->setSrcCutPosition(0, $src_y);
 $this->setRectangleCut($fill_w, $fill_h);

 $this->copy_w = $this->src_w;
 $this->copy_h = $this->src_w;
 }
 else
 {
 $this->setSrcCutPosition(0, 0);
 $this->copy_w = $this->src_w;
 $this->copy_h = $this->src_w;
 $this->setRectangleCut($fill_w, $fill_h);
 }
 }
 else
 {
 $this->setSrcCutPosition(0, 0);
 $this->setRectangleCut($this->src_w, $this->src_h);

 $this->copy_w = $this->src_w;
 $this->copy_h = $this->src_h;
 }

 // 目标尺寸
 $this->dst_w   = $this->fill_w + $this->img_border_size*2;
 $this->dst_h   = $this->fill_h + $this->img_border_size*2;

 break;

 // 手工裁切
 case 2:
 $this->copy_w = $this->fill_w;
 $this->copy_h = $this->fill_h;

 // 目标尺寸
 $this->dst_w   = $this->fill_w + $this->img_border_size*2;
 $this->dst_h   = $this->fill_h + $this->img_border_size*2;

 break;
 default:
 break;

 }
 }

 // 目标文件起始坐标
 $this->start_x = $this->img_border_size;
 $this->start_y = $this->img_border_size;
 }

 /**
 * 检查水印图是否大于生成后的图片宽高
 */
 function _isFull()
 {
 Return (   $this->mask_w + $this->mask_offset_x > $this->fill_w
 || $this->mask_h + $this->mask_offset_y > $this->fill_h)
 ?true:false;
 }

 /**
 * 检查水印图是否超过原图
 */
 function _checkMaskValid()
 {
 if(    $this->mask_w + $this->mask_offset_x > $this->src_w
 || $this->mask_h + $this->mask_offset_y > $this->src_h)
 {
 die("水印图片尺寸大于原图,请缩小水印图");
 }
 }

 /**
 * 取得图片类型
 *
 * @param    string     $file_path    文件路径
 */
 function _getImgType($file_path)
 {
 $type_list = array("1"=>"gif","2"=>"jpg","3"=>"png","4"=>"swf","5" => "psd","6"=>"bmp","15"=>"wbmp");
 if(file_exists($file_path))
 {
 $img_info = @getimagesize ($file_path);
 if(isset($type_list[$img_info[2]]))
 {
 Return $type_list[$img_info[2]];
 }
 }
 else
 {
 die("文件不存在,不能取得文件类型!");
 }
 }

 /**
 * 检查图片类型是否合法,调用了array_key_exists函数,此函数要求
 * php版本大于4.1.0
 *
 * @param    string     $img_type    文件类型
 */
 function _checkValid($img_type)
 {
 if(!array_key_exists($img_type, $this->all_type))
 {
 Return false;
 }
 }

 /**
 * 按指定路径生成目录
 *
 * @param    string     $path    路径
 */
 function _mkdirs($path)
 {
 $adir = explode('/',$path);
 $dirlist = '';
 $rootdir = array_shift($adir);
 if(($rootdir!='.'||$rootdir!='..')&&!file_exists($rootdir))
 {
 @mkdir($rootdir);
 }
 foreach($adir as $key=>$val)
 {
 if($val!='.'&&$val!='..')
 {
 $dirlist .= "/".$val;
 $dirpath = $rootdir.$dirlist;
 if(!file_exists($dirpath))
 {
 @mkdir($dirpath);
 @chmod($dirpath,0777);
 }
 }
 }
 }

 /**
 * 垂直翻转
 *
 * @param    string     $src    图片源
 */
 function _flipV($src)
 {
 $src_x = $this->getImgWidth($src);
 $src_y = $this->getImgHeight($src);

 $new_im = imagecreatetruecolor($src_x, $src_y);
 for ($y = 0; $y < $src_y; $y++)
 {
 imagecopy($new_im, $src, 0, $src_y - $y - 1, 0, $y, $src_x, 1);
 }
 $this->h_src = $new_im;
 }

 /**
 * 水平翻转
 *
 * @param    string     $src    图片源
 */
 function _flipH($src)
 {
 $src_x = $this->getImgWidth($src);
 $src_y = $this->getImgHeight($src);

 $new_im = imagecreatetruecolor($src_x, $src_y);
 for ($x = 0; $x < $src_x; $x++)
 {
 imagecopy($new_im, $src, $src_x - $x - 1, 0, $x, 0, 1, $src_y);
 }
 $this->h_src = $new_im;
 }
}
?>

使用实例:
< ?php
require_once('lib/thumb.class.php');

$t = new ThumbHandler();

$t->setSrcImg("img/test.jpg");
$t->setDstImg("tmp/new_test.jpg");
$t->setMaskImg("img/test.gif");
$t->setMaskPosition(1);
$t->setMaskImgPct(80);
$t->setDstImgBorder(4,"#dddddd");

// 指定缩放比例
$t->createImg(300,200);
?>
< ?php
require_once('lib/thumb.class.php');

$t = new ThumbHandler();

// 基本使用
$t->setSrcImg("img/test.jpg");
$t->setMaskWord("test");
$t->setDstImgBorder(10,"#dddddd");

// 指定缩放比例
$t->createImg(50);
?>
< ?php
equire_once('lib/thumb.class.php');

$t = new ThumbHandler();

// 基本使用
$t->setSrcImg("img/test.jpg");
$t->setMaskWord("test");

// 指定固定宽高
$t->createImg(200,200);
?>
< ?php
require_once('lib/thumb.class.php');

$t = new ThumbHandler();

$t->setSrcImg("img/test.jpg");
$t->setDstImg("tmp/new_test.jpg");
$t->setMaskWord("test");

// 指定固定宽高
$t->createImg(200,200);
?>
< ?php
require_once('lib/thumb.class.php');

$t = new ThumbHandler();

$t->setSrcImg("img/test.jpg");

// 指定字体文件地址
$t->setMaskFont("c:/winnt/fonts/arial.ttf");
$t->setMaskFontSize(20);
$t->setMaskFontColor("#ffff00");
$t->setMaskWord("test3333333");
$t->setDstImgBorder(99,"#dddddd");
$t->createImg(50);

?>
< ?php
require_once('lib/thumb.class.php');

$t = new ThumbHandler();

$t->setSrcImg("img/test.jpg");
$t->setMaskOffsetX(55);
$t->setMaskOffsetY(55);
$t->setMaskPosition(1);
//$t->setMaskPosition(2);
//$t->setMaskPosition(3);
//$t->setMaskPosition(4);
$t->setMaskFontColor("#ffff00");
$t->setMaskWord("test");

// 指定固定宽高
$t->createImg(50);
?>
<?php
require_once('lib/thumb.class.php');

$t = new ThumbHandler();

$t->setSrcImg("img/test.jpg");
$t->setMaskFont("c:/winnt/fonts/simyou.ttf");
$t->setMaskFontSize(20);
$t->setMaskFontColor("#ffffff");
$t->setMaskTxtPct(20);
$t->setDstImgBorder(10,"#dddddd");
$text = "中文";
$str = mb_convert_encoding($text, "UTF-8", "gb2312");
$t->setMaskWord($str);
$t->setMaskWord("test");

// 指定固定宽高
$t->createImg(50);
?>

解决DEDEV5.1Web发布模块不能发布循环图集的办法[视频]。

收到很多朋友的求助,最开始自己并没有放在心上,因为我自己一直都是成功的,并做好了美眉手机网的图片展示功能。

后来发现可能很多朋友在采集的时候并不能很好组合出循环的图片地址,于是,做一个教程帮大家解决一下。

这里发布操作视频,如果有什么疑问,欢迎大家提出。

本程序需要修改DEDEV5.1的一个文件。根据不同的版本,本方法适用于DEDEV2007至V5.1SP1各版本:

打开程序管理目录下载的图片集发布处理页面,默认为:dedecms/dede/action/album_add_action.php

在页面最开始的部分添加以下代码(注意,WP会替换一些PHP代码,请你把不标准的引号替换成半角双引号)

//这里是火车采集器的配置文件
//注意事项:
//循环标记不能为特殊字符;
//所有图片文件均不能使用DEDE的下载功能,只能直接插入图片链接
if ($imgurl){
$imgurl=explode("vus520",$imgurl);//配置你的循环标记,我的改成vus520
$count=count($imgurl);
for ($i=0; $i< $count; $i++) {
	$iurl=$imgurl[$i];
	$imgurls .= "{dede:img ddimg='$iurl' text='$iinfo' width='".$imginfos[0]."' height='".$imginfos[1]."'} $iurl {/dede:img}\r\n";//这里的属性请根据自己的需要修改
	}
}

这里,请大家把所有图片放在一个标签里,即用imgurl来提交所有图片地址,所有图片地址以循环标记取出图片地址,然后插入数据库。

另外,我做了一个手机资源站,如果你愿意给我做一个友情链接,我将会十分感谢你。

美眉手机网,中国最大的手机资源中心;http://www.mmtxt.net/

点击dedev5.1 photo 火车采集器配置文件
在线观看视频教程dedev5.1 photo 火车采集器配置视频

交谊舞视频教程大全,免费下载,泡妞必学(狐步、慢四、华尔兹、快三、伦巴、恰恰)

狐步、慢四教学
http://cicebud.jztele.com/soft/交谊舞教程/狐步、慢四教学.rmvb

华尔兹
http://cicebud.jztele.com/soft/交谊舞教程/交谊舞教程_dance_华尔兹.rm

浪漫华尔兹
http://cicebud.jztele.com/soft/交谊舞教程/浪漫华尔兹.rm

继续阅读交谊舞视频教程大全,免费下载,泡妞必学(狐步、慢四、华尔兹、快三、伦巴、恰恰)

Google免费企业邮局申请、微软Live免费企业邮局申请

做网络做了这么久,一些企业做网站的时候买虚拟主机的时候都没有附送企业邮局,但一些公司为了体现公司形象,让我提供一个解决办法,当然我最终提出了使用免费企业邮局的建议。要说哪个免费的企业邮局好,当属GOOGLE和微软的LIVE了!

下面列一下当前网络上提供免费企业邮局的网站及申请地址:

1.Google免费企业邮局申请地址:
Google 企业应用套件
http://www.google.com/a/
(备注:一个账户提供2G空间)

2.微软Live免费企业邮局申请地址:
Windows Live ID
http://domains.live.com
微软Live免费企业邮局申请教程:
http://hi.baidu.com/wjfx/blog/item/f4a4309b75f952b6c8eaf432.html

3.MyEcorp.net免费企业邮局申请地址:
http://www.myecorp.net/corporation_register2.html
(备注:提供最少100MB邮局空间)

以前网易和搜狐都提供了免费企业邮局,我都使用过,后来就消沉下去了,对国内的这些服务商真是没话说!

以下是邮箱登陆入口

https://www.google.com/a/soohot.com/ServiceLogin?service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fa%2Fsoohot.com%2F&bsv=1k96igf4806cy<mpl=default<mplcache=2

精通CSS+DIV网页样式与布局,光盘视频

DIV+CSS当今WEB开发流行前台页面布局方式。 完整的代码演示,细致的讲解,高胖胖老师带你迅速掌握DIV+CSS应用技巧。

DIV+CSS视频教程(一)下载地址:

  1. http://www.phpchina.com/download/vido/div.css1/div.css1.rar

DIV+CSS视频教程(二)下载地址:

  1. http://www.phpchina.com/download/vido/div.css2/div.css2.rar

DIV+CSS视频教程(三)下载地址:

  1. http://www.phpchina.com/download/vido/div.css3/div.css3.rar

DIV+CSS视频教程(四)下载地址:

  1. http://www.phpchina.com/download/vido/div.css4/div.css4.rar

DIV+CSS视频教程(五)下载地址:

  1. http://www.phpchina.com/download/vido/div.css5/div.css5.rar

注意:

  1. 视频资料来源于http://www.phpchina.com,只供大家学习交流之用,请勿用于商业用途!

在线观看DIV+CSS视频教程地址:

CSS基本概念

  1. CSS初探 - CSS基本知识 - 第1课http://learning.artech.cn/uploads/2007/05/30/20070530.html
  2. CSS基本语法与核心概念 - CSS基本知识 - 第2课http://learning.artech.cn/uploads/2007/05/31/20070531.html
  3. 设置丰富的文字效果 - CSS基本知识 - 第3课http://learning.artech.cn/uploads/2007/06/01/20070601.html

CSS/DIV布局专题讲解

  1. 设置图片效果 - CSS/DIV专题讲解 - 第1课http://learning.artech.cn/uploads/2007/06/04/20070604.html
  2. 设置网页背景 - CSS/DIV布局专题讲解 - 第2课http://learning.artech.cn/uploads/2007/06/05/20070605.html
  3. 设置表格与表单的样式 - CSS/DIV布局专题讲解 - 第3课http://learning.artech.cn/uploads/2007/06/06/20070606.html
  4. 设置页面和浏览器的元素 - CSS/DIV布局专题 - 第4课http://learning.artech.cn/uploads/2007/06/07/20070607.html
  5. 用CSS制作漂亮的菜单- CSS/DIV布局专题讲解 - 第5课 http://learning.artech.cn/uploads/2007/06/08/20070608.html
  6. CSS滤镜的应用 - CSS/DIV布局专题讲解 - 第6课http://learning.artech.cn/uploads/2007/06/11/20070611.html
  7. 理解CSS定位与div布局 - CSS/DIV布局专题讲解 - 第7课http://learning.artech.cn/uploads/2007/06/12/20070612.html
  8. CSS排版 - CSS/DIV布局专题讲解 - 第8课http://learning.artech.cn/uploads/2007/06/13/20070613.html
  9. 网页变幻 - CSS/DIV布局专题讲解 - 第9课http://learning.artech.cn/uploads/2007/06/14/20070614.html

CSS与其他技术

  1. CSS与javascript的综合应用 - CSS与其他技术 - 第1课http://learning.artech.cn/uploads/2007/06/15/20070615.html
  2. CSS与XML的综合运用 - CSS与其他技术 - 第2课http://learning.artech.cn/uploads/2007/06/18/20070618.html
  3. CSS与AJAX的综合应用 - CSS与其他技术 - 第3课http://learning.artech.cn/uploads/2007/06/19/20070619.html

CSS/DIV综合实践

  1. 博客设计DIY - CSS/DIV综合实践 - 第1课 http://learning.artech.cn/uploads/2007/06/20/20070620.html
  2. 小型工作室 - CSS/DIV综合实践 - 第2课 http://learning.artech.cn/uploads/2007/06/21/20070621.html
  3. 公司网站 - CSS/DIV综合实践 - 第3课http://learning.artech.cn/uploads/2007/06/22/20070622.html

PHP正则表达式

开篇,还是得说说 ^ 和 $ 他们是分别用来匹配字符串的开始和结束,以下分别举例说明

  "^The": 开头一定要有"The"字符串;
  "of despair$": 结尾一定要有"of despair" 的字符串;

  那么,
  "^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配
  "notice": 匹配包含notice的字符串

  你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边

  接着,说说 '*', '+',和 '?',

  他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:
  "zero or more"相当于{0,},
  "one or more"相当于{1,},
  "zero or one."相当于{0,1}, 这里是一些例子:

  "ab*": 和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串("a", "ab", "abbb", 等);
  "ab+": 和ab{1,}同义,同上条一样,但最少要有一个b存在 ("ab", "abbb", 等.);
  "ab?":和ab{0,1}同义,可以没有或者只有一个b;
  "a?b+$": 匹配以一个或者0个a再加上一个以上的b结尾的字符串.

  要点, '*', '+',和 '?'只管它前面那个字符.

  你也可以在大括号里面限制字符出现的个数,比如

  "ab{2}": 要求a后面一定要跟两个b(一个也不能少)("abb");
  "ab{2,}": 要求a后面一定要有两个或者两个以上b(如"abb", "abbbb", 等.);
  "ab{3,5}": 要求a后面可以有2-5个b("abbb", "abbbb", or "abbbbb").

  现在我们把一定几个字符放到小括号里,比如:
  "a(bc)*": 匹配 a 后面跟0个或者一个"bc";
  "a(bc){1,5}": 一个到5个 "bc."

  还有一个字符 '│', 相当于OR 操作:

  "hi│hello": 匹配含有"hi" 或者 "hello" 的 字符串;
  "(b│cd)ef": 匹配含有 "bef" 或者 "cdef"的字符串;
  "(a│b)*c": 匹配含有这样多个(包括0个)a或b,后面跟一个c 的字符串;

  一个点('.')可以代表所有的单一字符,不包括"\n"

 

  如果,要匹配包括"\n"在内的所有单个字符,怎么办?
  对了,用'[\n.]'这种模式.

  "a.[0-9]": 一个a加一个字符再加一个0到9的数字
  "^.{3}$": 三个任意字符结尾 .

  中括号括住的内容只匹配一个单一的字符

  "[ab]": 匹配单个的 a 或者 b ( 和 "a│b" 一样);
  "[a-d]": 匹配'a' 到'd'的单个字符 (和"a│b│c│d" 还有 "[abcd]"效果一样); 一般我们都用[a-zA-Z]来指定字符为一个大小写英文
  "^[a-zA-Z]": 匹配以大小写字母开头的字符串
  "[0-9]%": 匹配含有 形如 x% 的字符串
  ",[a-zA-Z0-9]$": 匹配以逗号再加一个数字或字母结尾的字符串

  你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^' 作为开头 "%[^a-zA-Z]%" 匹配含有两个百分号里面有一个非字母的字符串.

  要点:^用在中括号开头的时候,就表示排除括号里的字符

  为了PHP能够解释,你必须在这些字符面前后加'',并且将一些字符转义.

  不要忘记在中括号里面的字符是这条规路的例外—在中括号里面, 所有的特殊字符,包括(''), 都将失去他们的特殊性质 "[*\+?{}.]"匹配含有这些字符的字符串.

  还有,正如regx的手册告诉我们: "如果列表里含有 ']', 最好把它作为列表里的第一个字符(可能跟在'^'后面). 如果含有'-', 最好把它放在最前面或者最后面, or 或者一个范围的第二个结束点[a-d-0-9]中间的‘-’将有效.

  看了上面的例子,你对{n,m}应该理解了吧.要注意的是,n和m都不能为负整数,而且n总是小于m. 这样,才能 最少匹配n次且最多匹配m次. 如"p{1,5}"将匹配 "pvpppppp"中的前五个p

  下面说说以\开头的

  \b 书上说他是用来匹配一个单词边界,就是...比如've\b',可以匹配love里的ve而不匹配very里有ve

  \B 正好和上面的\b相反.例子我就不举了

  好,我们来做个应用:

  如何构建一个模式来匹配 货币数量 的输入

  构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式: "10000.00" 和 "10,000.00",或者没有小数部分, "10000" and "10,000". 现在让我们开始构建这个匹配模式:

  ^[1-9][0-9]*$

  这是所变量必须以非0的数字开头.但这也意味着 单一的 "0" 也不能通过测试. 以下是解决的方法:
  ^(0│[1-9][0-9]*)$

  "只有0和不以0开头的数字与之匹配",我们也可以允许一个负号在数字之前:
  ^(0│-?[1-9][0-9]*)$

  这就是: "0 或者 一个以0开头 且可能 有一个负号在前面的数字." 好了,现在让我们别那么严谨,允许以0开头.现在让我们放弃负号 , 因为我们在表示钱币的时候并不需要用到. 我们现在指定 模式 用来匹配小数部分:
  ^[0-9]+(\.[0-9]+)?$

  这暗示匹配的字符串必须最少以一个阿拉伯数字开头. 但是注意,在上面模式中 "10." 是不匹配的, 只有 "10" 和 "10.2" 才可以. (你知道为什么吗)

  ^[0-9]+(\.[0-9]{2})?$

  我们上面指定小数点后面必须有两位小数.如果你认为这样太苛刻,你可以改成:
  ^[0-9]+(\.[0-9]{1,2})?$

  这将允许小数点后面有一到两个字符. 现在我们加上用来增加可读性的逗号(每隔三位), 我们可以这样表示:
  ^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$

  不要忘记 '+' 可以被 '*' 替代 如果你想允许空白字符串被输入话 (为什么?). 也不要忘记反斜杆 ’\’ 在PHP字符串中可能会出现错误 (很普遍的错误).

  现在,我们已经可以确认字符串了, 我们现在把所有逗号都去掉 str_replace(",", "", $money) 然后在把类型看成 double然后我们就可以通过他做数学计算了.

  再来一个:

  构造检查email的正则表达式

  在一个完整的email地址中有三个部分:
  1. 用户名 (在 '@' 左边的一切),
  2.'@',
  3. 服务器名(就是剩下那部分).
  用户名可以含有大小写字母阿拉伯数字,句号 ('.'), 减号('-'), and 下划线 ('_'). 服务器名字也是符合这个规则,当然下划线除外.

  现在, 用户名的开始和结束都不能是句点. 服务器也是这样. 还有你不能有两个连续的句点他们之间至少存在一个字符,好现在我们来看一下怎么为用户名写一个匹配模式:

  ^[_a-zA-Z0-9-]+$

  现在还不能允许句号的存在. 我们把它加上:
  ^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$

  上面的意思就是说: "以至少一个规范字符(除了.)开头,后面跟着0个或者多个以点开始的字符串."

  简单化一点, 我们可以用 eregi()取代 ereg().eregi()对大小写不敏感, 我们就不需要指定两个范围 "a-z" 和 "A-Z" – 只需要指定一个就可以了:
  ^[_a-z0-9-]+(\.[_a-z0-9-]+)*$

  后面的服务器名字也是一样,但要去掉下划线:
  ^[a-z0-9-]+(\.[a-z0-9-]+)*$

  好. 现在只需要用”@”把两部分连接:
  ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$

  这就是完整的email认证匹配模式了,只需要调用
  eregi(‘^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$ ’,$eamil)
  就可以得到是否为email了

  正则表达式的其他用法

  提取字符串
  ereg() and eregi() 有一个特性是允许用户通过正则表达式去提取字符串的一部分,比如说,我们想从 path/URL 提取文件名 – 下面的代码就是你需要:
  ereg("([^\\/]*)$", $pathOrUrl, $regs);
  echo $regs[1];

  高级的代换
  ereg_replace() 和 eregi_replace()也是非常有用的: 假如我们想把所有的间隔负号都替换成逗号:
  ereg_replace("[ \n\r\t]+", ",", trim($str));

  最后,我把另一串检查EMAIL的正则表达式让看文章的你来分析一下.
  "^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$"
  如果能方便的读懂,那这篇文章的目的就达到了.

DedeCms2007rc1/DedeCms V5.01 到DedeCms V5.1 升级程序

DedeCms2007rc1/DedeCms V5.01 到DedeCms V5.1 升级程序

下载后请按照说明执行

升级有风险,请做好数据和原程序的备份

假如你的数据表和官方原版的不一致有可能会造成升级失败,请先确认数据表

Quote:致歉:于2008年3月31日前下载的下面两个升级补丁,因模板编码问题而出现乱码的,请重新下载后覆盖 templets/default 目录下的所有文件

dedecms V5.01 gbk 到 dedecms V5.1 gbk升级程序
http://www.dedecms.com/upimg/soft/2008/dedecmsv51-501up.rar

dedecms2007 rc1gbk 到 dedecms V5.1 gbk升级程序

http://www.dedecms.com/upimg/soft/2008/dedecms2007rc1-v51-gbk.rar

如果已经升级到V5.1但后台系统设置混乱的话,请再后台 sql 命令器 运行下面的语句

Copy code update `#@__sysconfig` set `aid`='2', `group`='8' where varname='cfg_basehost';
update `#@__sysconfig` set `aid`='3', `group`='8' where varname='cfg_cmspath';
update `#@__sysconfig` set `aid`='5', `group`='8' where varname='cfg_cookie_encode';
update `#@__sysconfig` set `aid`='4', `group`='8' where varname='cfg_indexurl';
update `#@__sysconfig` set `aid`='1', `group`='8' where varname='cfg_webname';
update `#@__sysconfig` set `aid`='8', `group`='8' where varname='cfg_adminemail';
update `#@__sysconfig` set `aid`='4', `group`='8' where varname='cfg_indexname';
update `#@__sysconfig` set `aid`='9', `group`='5' where varname='cfg_backup_dir';
update `#@__sysconfig` set `aid`='13', `group`='5' where varname='cfg_html_editor';
update `#@__sysconfig` set `aid`='5', `group`='8' where varname='cfg_arcdir';
update `#@__sysconfig` set `aid`='11', `group`='2' where varname='cfg_medias_dir';
update `#@__sysconfig` set `aid`='12', `group`='2' where varname='cfg_ddimg_width';
update `#@__sysconfig` set `aid`='13', `group`='2' where varname='cfg_ddimg_height';
update `#@__sysconfig` set `aid`='14', `group`='2' where varname='cfg_album_width';
update `#@__sysconfig` set `aid`='15', `group`='2' where varname='cfg_imgtype';
update `#@__sysconfig` set `aid`='16', `group`='2' where varname='cfg_softtype';
update `#@__sysconfig` set `aid`='17', `group`='2' where varname='cfg_mediatype';
update `#@__sysconfig` set `aid`='9', `group`='5' where varname='cfg_specnote';
update `#@__sysconfig` set `aid`='12', `group`='8' where varname='cfg_list_symbol';
update `#@__sysconfig` set `aid`='20', `group`='4' where varname='cfg_notallowstr';
update `#@__sysconfig` set `aid`='14', `group`='8' where varname='cfg_album_width';
update `#@__sysconfig` set `aid`='14', `group`='8' where varname='cfg_album_width';

REPLACE INTO `#@__sysconfig` (`aid`, `varname`, `info`, `value`, `type`, `group`) VALUES
(21, 'cfg_feedbackcheck', '评论及留言(是/否)需审核', 'Y', 'bool', 4),
(22, 'cfg_keyword_replace', '关键字替换(是/否)
使用本功能会影响HTML生成速度', 'Y', 'bool', 4),
(5, 'cfg_fck_xhtml', '编辑器(是/否)使用XHTML', 'N', 'bool', 5),
(11, 'cfg_df_style', '模板默认风格', 'default', 'string', 8),
(25, 'cfg_multi_site', '是/否支持多站点\r\n
开启此项后附件、栏目连接、arclist内容启用绝对网址', 'N', 'bool', 8),
(1, 'cfg_dede_cache', '是/否开启Dede模块引擎的缓存功能', 'Y', 'bool', 1),
(1, 'cfg_dede_log', '是/否开启管理日志', 'N', 'bool', 5),
(7, 'cfg_powerby', '网站版权信息', '网站版权信息', 'string', 8),
(709, 'cfg_safeurl', '安全的引用地址(外部JS调用时可用到,多个用回车区别)', 'dedecms.com', 'string', 4),
(5, 'cfg_keywords', 'Meta 关键词', '织梦内容管理系统', 'string', 8),
(5, 'cfg_arcsptitle', '(是/否)开启分页标题,开启会影响HTML生成速度', 'N', 'bool', 1),
(6, 'cfg_arcautosp', '(是/否)开启长文章自动分页', 'N', 'bool', 1),
(7, 'cfg_arcautosp_size', '文章自动分页大小(单位: K)', '5', 'string', 1),
(6, 'cfg_auot_description', '自动摘要长度(0-250,0表示不启用)', '255', 'string', 5),
(3, 'cfg_ftp_host', 'FTP主机', '', 'string', 9),
(4, 'cfg_ftp_port', 'FTP端口', '21', 'string', 9),
(5, 'cfg_ftp_user', 'FTP用户名', '', 'string', 9),
(6, 'cfg_ftp_pwd', 'FTP密码', '', 'string', 9),
(2, 'cfg_ftp_root', '网站根在FTP中的目录', '/', 'string', 9),
(1, 'cfg_ftp_mkdir', '是否强制用FTP创建目录', 'N', 'bool', 9),
(39, 'cfg_feedback_ck', '评论加验证码重确认', 'N', 'bool', 4),
(0, 'cfg_list_son', '上级列表是否包含子类内容', 'Y', 'bool', 1),
(1, 'cfg_mb_open', '是否开启会员功能', 'Y', 'bool', 3),
(12, 'cfg_mb_album', '是否开启会员图集功能', 'Y', 'bool', 3),
(10, 'cfg_mb_upload', '是否允许会员上传非图片附件', 'Y', 'bool', 3),
(9, 'cfg_mb_upload_size', '会员上传文件大小(K)', '1024', 'string', 3),
(6, 'cfg_mb_sendall', '是否开放会员对自定义模型投稿', 'Y', 'bool', 3),
(11, 'cfg_mb_rmdown', '是否把会员指定的远程文档下载到本地', 'Y', 'bool', 3),
(47, 'cfg_cli_time', '时区设置(默认+8)', '+8', 'string', 8),
(8, 'cfg_mb_mediatype', '会员附件许可的类型', 'jpg|gif|png|bmp|swf|mp3|rmvb|wma|zip|rar|', 'string', 3),
(8, 'cfg_mb_max', '会员附件总大小限制(MB)', '10', 'string', 3),
(20, 'cfg_replacestr', '替换词语(词语会被替换成***)', '她妈|它妈|他妈|你妈|fuck|去死|贱人|老母', 'string', 4),
(10, 'cfg_makeindex', '发布文档后自动更新网站主页', 'Y', 'bool', 1),
(8, 'cfg_keyword_like', '使用关键词关连文章', 'Y', 'bool', 1),
(14, 'cfg_online_type', '在线支付网关类型', 'nps', 'string', 1),
(53, 'cfg_jpeg_query', 'JPEG缩略图质量', '100', 'string', 2),
(3, 'cfg_pwdtype', '会员密码类型:none/md5/dd(织梦加密)', 'md5', 'string', 3),
(4, 'cfg_md5len', 'MD5密码位数', '32', 'string', 3),
(5, 'cfg_ddsign', '织梦加密算法密码(6-12位)\r\n
\r\n会员密码类型为dd时输入', '', 'string', 3),
(58, 'cfg_use_vdcode', '是否开启后台登录的验证码', 'N', 'bool', 8),
(7, 'cfg_send_score', '会员投稿增加积分', '2', 'string', 3),
(7, 'cfg_guest_send', '是否允许游客投稿', 'N', 'bool', 3),
(2, 'cfg_al_cachetime', 'arclist标记缓存时间(小时)', '1', 'string', 1),
(6, 'cfg_df_score', '注册会员默认积分', '1000', 'string', 3),
(2, 'cfg_member_regsta', '新注册会员是否需要审核', 'N', 'bool', 3),
(9, 'cfg_up_prenext', '更新单个文档时是否同时更新上一篇和下一篇', 'N', 'bool', 1),
(18, 'cfg_mb_exiturl', '会员退出后默认跳转页', '/', 'string', 3),
(8, 'cfg_ct_mode', '内容管理模式(0-传统,1-分表)', '1', 'string', 5),
(15, 'cfg_mb_score2money', '是否开启积分和金币兑换功能', 'Y', 'bool', 3),
(16, 'cfg_score2money', '多少积分兑换一个金币', '3', 'string', 3),
(17, 'cfg_money2score', '一个金币购买多少积分', '3', 'string', 3),
(0, 'cfg_websafe_open', '关闭站点(仅允许访问后台及前台部份程序)', 'Y', 'bool', 8),
(7, 'cfg_cat_seltype', '栏目选择类型(0-弹窗、1-select列表)', '1', 'string', 5),
(3, 'cfg_arc_all', '是否在arclist标记中包含附加表指定的字段', 'N', 'bool', 1),
(101, 'cfg_gif_wartermark', 'gif图片是否增加水印', 'N', 'bool', 2),
(11, 'cfg_allsearch_limit', '网站全局搜索时间限制', '1', 'string', 1),
(12, 'cfg_search_maxlimit', '搜索结果最大数限制', '500', 'string', 1),
(13, 'cfg_search_cachetime', '搜索缓存有效期(单位:小时)', '1', 'string', 1),
(14, 'cfg_locked_day', '会员文章加锁时间(天)审核后多少天不能再修改', '7', 'string', 3),
(107, 'cfg_sendmail_bysmtp', '是否启用smtp方式发送邮件', 'Y', 'bool', 10),
(108, 'cfg_smtp_server', 'smtp服务器', 'smtp.xinhuanet.com', 'string', 10),
(109, 'cfg_smtp_port', 'smtp服务器端口', '25', 'string', 10),
(110, 'cfg_smtp_usermail', 'SMTP服务器的用户邮箱', '[email]rong112@xinhuanet.com[/email]', 'string', 10),
(111, 'cfg_smtp_user', 'SMTP服务器的用户帐号', 'rong112', 'string', 10),
(112, 'cfg_smtp_password', 'SMTP服务器的用户密码', '123456', 'string', 10),
(114, 'cfg_feedback_make', '评论后是否更新文档', 'Y', 'bool', 4),
(200, 'cfg_ask', '是否启用问答模块', 'Y', 'bool', 6),
(201, 'cfg_ask_ifcheck', '问答模块提问是否需要审核', 'N', 'bool', 6),
(202, 'cfg_ask_dateformat', '问答模块日期格式', 'Y-n-j', 'string', 6),
(203, 'cfg_ask_timeformat', '问答模块时间格式', 'H:i', 'string', 6),
(204, 'cfg_ask_timeoffset', '问答模块时区设定', '8', 'string', 6),
(205, 'cfg_ask_gzipcompress', '是否启用gzip压缩', '1', 'string', 6),
(206, 'cfg_ask_authkey', '问答模块会员key', 'AeN896fG', 'string', 6),
(207, 'cfg_ask_cookiepre', '问答模块cookie前缀', 'deask_', 'string', 6),
(208, 'cfg_answer_ifcheck', '问答模块回答问题是否需要审核', 'N', 'bool', 6),
(209, 'cfg_ask_expiredtime', '问答模块问题有效期(天)', '20', 'string', 6),
(210, 'cfg_ask_tpp', '问答模块列表显示问题数', '14', 'string', 6),
(211, 'cfg_ask_sitename', '问答系统名称', '织梦问答', 'string', 6),
(212, 'cfg_ask_symbols', '问答模块导航间隔符', '>', 'string', 6),
(213, 'cfg_ask_answerscore', ' 会员回答问题就增加积分', '2', 'string', 6),
(214, 'cfg_ask_bestanswer', '最佳答案系统奖励积分', '20', 'string', 6),
(215, 'cfg_ask_subtypenum', '首页显示子类数据', '10', 'string', 6),
(92, 'cfg_siteid', 'PW营销系统密钥一', 'adb62f3fc9f26e0d', 'string', 5),
(93, 'cfg_siteownerid', 'PW营销系统密钥二', '83f91a7c840ee7c0d3', 'string', 5),
(91, 'cfg_sitehash', 'PW营销唯一识别码', '12X1JdVlZQVgQBVgQHUVoHVV0MVAlQUwVTBlAOXgIGAFI', 'string', 5),
(6, 'cfg_description', 'Meta 描述', '织梦内容管理系统是不错的系统', 'string', 8),
(9, 'cfg_beian', '备案号', '粤ICP备05010852号', 'string', 8),
(10, 'cfg_updateperi', '百度新闻xml更新时间 (单位:分钟)', '15', 'string', 5),
(11, 'cfg_baidunews_limit', '百度新闻xml更新新闻数量 最大100', '100', 'string', 5);

 

TextAloud 作者赠送的正版注册码

TextAloud uses voice synthesis to convert text into spoken audio. Listen on your PC or create MP3 or WMA files for use on portable devices like iPods, PocketPCs, and CD players.
•    Directly open Word, PDF, and HTML files 
•    Advanced Pronunciation Tools 
•    Toolbar plug-ins for Internet Explorer, Firefox, and Outlook 
•    Optional premium voices for a wide variety of accents and languages 
•    TextAloud is for Windows. Mac Users

作者赠送的正版注册码:
UCMCAX-725227-AYQFSC-757735-5934

适用于TextAloud 2.X

修复多系统下VISTA启动菜单的一些经验

现在一般都是双系统,先在C盘装XP,再在D盘装VISTA。由于某种原因,我们可能会重装C盘的XP,此时WINDOWS BOOT MANAGER菜单会丢失,开机只能直接进XP。这种情况下我们需要在XP下自己来恢复原来的多重引导菜单。
网上很多帖子说在这种情况下可以用VISTA的安装光盘进行引导修复;这种办法估计可行。但我是在XP下用虚拟光驱安装的VISTA,没有安装光盘可用。这就需要另外想办法。
以下操作在XP中进行
=======================
下载安装Vistabootpro和Easybcd,都无法修复双启动菜单。
多次试验,后来才发现问题所在:Vistabootpro和Easybcd的修复菜单功能必须依赖于C:\BOOT文件夹和C:\BOOTMGR这个文件。如果C盘不存在上面的两个文件和文件夹,则无论如何无法用Vistabootpro或者Easybcd来修复启动菜单。
初步分析,Vistabootpro和Easybcd需要的是C:\BOOT\bcd这个文件中的数据,如果不存在这个文件,用bcdedit命令行工具会发现无法打开数据。另一个需要的是C:\BOOT\FONT文件夹中的字体文件。
C:\BOOTMGR这个文件是用来在启动之后接管引导权的,也必须存在(在XP单系统下,是C:\NTLDR接管引导)
============================================
总结:如果你发现自己在XP下无法用上面的工具修复多重引导菜单,请检查是否存在c:\boot文件夹和c:\bootmgr文件,查看c:\boot\font中的字体文件是否存在,查看c:\boot\bcd文件是否存在。
如果不存在,你需要获得上述文件和文件夹,然后将它们复制到c盘
最简单的办法,使用备份恢复,或者从别人的电脑上获取一份拷贝(他人电脑上的拷贝复制到C盘之后,必须用VISTABOOTPRO删除原来存在的菜单,然后你再增加菜单)
结论:无论是VISTABOOTPOR 还是 EASYBCD 都无法独立恢复多重菜单,它依赖C:\boot和c:\bootmgr。
所以安装好VISTA后请尽量尽量用工具(Vistabootpro和Easybcd)备份你的启动文件,生成的文件后缀为*.BCD。
顺便提一下以下方法,
不少朋友用这个方法却发现怎么也进不了系统了,所以别轻易测试的说:
(1)使用 Daemon Tools 加载 Vista 光盘映像。(2)打开“运行” (开始〉运行), 输入 cmd。(3)输入 X: (X代表你的虚拟光驱盘符)。(4)输入 cd boot。(5)输入 bootsect /nt60 SYS (删除是nt52) 。(6)重新启动,Vista 的启动管理器已经恢复。

关于“市场,广告,营销……”

市场是什么?

是用户,是用户的需求,是用户不同的体验——人人都能做的,你如果去做,就是红海,不是蓝海。所以,你要做市场,你必须面向“问题”——企业的导向,是市场导向、用户导向、需求导向,但是归根结蒂,是“问题”导向:问题就是机会,挑战就是机会。所以,你必须解决他人不能解决的问题,在这个基础之上,满足用户的需求,你就抢先一步站在了所有竞争对手的更前更高更远的地方;


广告是什么?
广告是告知,广告是花钱说自己想说的话,是花钱后可以适当地说胡话、大话、假话和空话——由于你的花钱,使得所有这些本来不合理合法的,在某种程度上得到一种保护:不是说就合法了,而是说由于你花了钱,把这些本来不可信的话,由于变换了说话的方式(不是满口喷唾沫,不是手抄小广告,不是串街走巷叫卖)和地点情境,例如是在报纸上,在广播里,在电视里,等等。借助了这第三方的公信力,所以你的鼓吹和夸大,有了更加广泛的传播面积范围以及更大的欺骗性。不过,这只是表面。你不能借着这个机会就忘乎所以。把自己想说的都一鼓脑儿地向外倒,也不管别人喜欢不喜欢,或者相信不相信——就是说,你不能把广告,仅仅当成了花钱买个说话权,广而告之,不管不顾。我要告诉你的是:广告的目的可能是告知,但是广告的灵魂,是承诺——你是在通过广告,告诉你的目标消费者,你的产品和服务,会给他们带来怎样的价值、变化、体验、后果。你绝对不能在广告中只说你的各种参数,而是要直接了当简明扼要一语中的一针见血地告诉他们:如果他们成为你的客户,他们将会如何如何……变得年轻美丽?
  以所有的化妆品为例,我们从来不见一个广告是如何说他们的产品成分如何,重量体积几多,有效期多久,使用方法是什么,等等,而是把年轻,美丽,高雅,健康等等,这些永远都不能永远保留但又永远希望成为永远的梦想——它们把一种期许,当成一种承诺,不直说又胜过直说,用那些美仑美奂的广告模特和广告画面,印刻在每一个广告受众的脑海中,心灵里。把美丽年轻青春永驻返老还童以“今年20,明年18”这样一个明显是违背常理的梦幻承诺,给了广告受众。
  所以,广告是什么?广告可以是很多,是话语,是画面,是音频,是视频,是平面,是立体,是多媒体——这些都是形式,是外在。而它真正的内在,其灵魂,您永远都不要忘了——是承诺。


营销,是什么?
营销,是竞争,是超越,是差异化,是否定,是否定之否定,是蓝海……都对,但都不够直击要害。
  在我看来,营销,是全盘的否定,是彻底的决裂,是从头到尾从内到外的颠覆。
  你在任何时候,都必须是唯一。要以唯一的姿态出现。二十多年以前,我看的第一本营销专业的书,名字是《二十二条商规》,其第一条就是:第一胜过更好。大意是说,人们只记得第一,第一个登上月球的人,第一个横跨英吉利海峡的人,第一个摘取奥运金牌的人……即使后来者不断超越,做得比当初更好一百倍,但是,人们脑海里记住的,始终是第一个,而不是后来的“更好”的。
  而现在这个时候,做第一,是很难了。常规意义上,你能够比别人起得更早?生得更早?做的更早?买的更早?都不能。不要说你是人,就是猿人,也轮不到你是第一。
  那么,你只好另辟蹊径,走别人不那么走的路,做别人不那么做的事,用别人不使的方法。
  你成为理所当然的唯一——更为叫绝的是,你也自然成为了第一。尽管,这个第一,显然不是那种经过有竞争对手参与而比赛的结果,因为只有你一个选手,这种情形下,你的水平的高低显然不再是问题,没有对手,水平低也成了高。但是,在你选择的方向和领域里,你是唯一的焦点,只要你想,你愿意开始吸引公众的视线,那么,在市场公众的视网膜里,成像的只有你自己。
  这是什么?营销的本质所在。就是颠覆一切,否定现实,把当前的竞争态势置于度外,完全无视现实彻底目中无人——这是一个市场态度,是对事的,不是对人的。所以,与修养无关。与你所从事的业务产品竞争市场有关。跳出你死我活的沙场,开辟自己的天地,把沙漠当成绿洲。多年以前,我就深深地理解并身体力行了这样的理念,做杀毒软件的时候,做IT和英语培训的时候,我从来都不把现在的竞争态势太放在眼中。你身处其中,但又必须能做到跳出圈外——有点象是出家人那种感觉:不在五行,跳出三界。这样,才能独来独往,天马行空,任由发挥。其实,与多少年后,大家一窝蜂地去争看什么红蓝海战略,有什么本质的区别?思路不新鲜,怎么说到是新鲜了。中国人说不新鲜,外国人说,就新鲜了。