首页 > php100

PHP通用检测函数集

// ※CheckMoney($C_Money) 检查数据是否是99999.99格式
// ※CheckEmailAddr($C_mailaddr) 判定是否为有效邮件地址
// ※CheckWebAddr($C_weburl) 判定是否为有效网址
// ※CheckEmpty($C_char) 判定字符串是否为空
// ※CheckLengthBetween($C_char, $I_len1, $I_len2=100) 判定是否为指定长度内字符串
// ※CheckUser($C_user) 判定是否为合法用户名
// ※CheckPassword($C_passwd) 判定是否为合法用户密码
// ※CheckTelephone($C_telephone) 判定是否为合法电话号码
// ※CheckValueBetween($N_var, $N_val1, $N_val2) 判定是否是某一范围内的合法值
// ※CheckPost($C_post) 判定是否为合法邮编(固定长度)
// ※CheckExtendName($C_filename,$A_extend) 判定上传文件的扩展名
// ※CheckImageSize($ImageFileName,$LimitSize) 检验上传图片的大小
// ※AlertExit($C_alert,$I_goback=0) 非法操作警告并退出
// ※Alert($C_alert,$I_goback=0) 非法操作警告
// ※ReplaceSpacialChar($C_char) 非凡字符替换函数
// ※ExchangeMoney($N_money) 资金转换函数
// ※WindowLocation($C_url,$C_get="",$C_getOther="") PHP中的window.location函数
//---------------------------------------------------------------


//-------------------------------------------------------------

// 函数名:CheckMoney($C_Money)
// 作 用:检查数据是否是99999.99格式
// 参 数:$C_Money(待检测的数字)
// 返回值:布尔值
// 备 注:无
//------------------------------------------------------------

function CheckMoney($C_Money)
{
if (!ereg("^[0-9][.][0-9]$", $C_Money)) return false;
return true;
}
//---------------------------------------------------------------


//--------------------------------------------------------

// 函数名:CheckEmailAddr($C_mailaddr)
// 作 用:判定是否为有效邮件地址
// 参 数:$C_mailaddr(待检测的邮件地址)
// 返回值:布尔值
// 备 注:无
//--------------------------------------------------------

function CheckEmailAddr($C_mailaddr)
{
if (!eregi("^[_a-z0-9-] (.[_a-z0-9-] )*@[a-z0-9-] (.[a-z0-9-] )*$",
$C_mailaddr))
//(!ereg("^[_a-zA-Z0-9-] (.[_a-zA-Z0-9-] )*@[_a-zA-Z0-9-] (.[_a-zA-Z0-9-] )*$",
$c_mailaddr))
{
return false;
}
return true;
}
//----------------------------------------------------------------

阅读全文

OutputBuffer(输出缓冲)函数的妙用

在PHP编程中, 我们经常会碰到一些直接产生输出的函数, 如passthru(),readfile(), var_dump() 等. 但有时我们想把这些函数的输出导入到文件中,或者先经过处理再输出, 或者把这些函数的输出作为字符串来处理.
这时我们就要用到 Output Buffer(输出缓冲) 函数了.

处理输出缓冲的函数主要有这么几个:
ob_start() 开始输出缓冲, 这时PHP停止输出, 在这以后的输出都被转到一个内部的缓冲里.

ob_get_contents() 这个函数返回内部缓冲的内容. 这就等于把这些输出都变成了字符串.

ob_get_ length() 返回内部缓冲的长度.

ob_end_flush() 结束输出缓冲, 并输出缓冲里的内容. 在这以后的输出都是正常输出.

ob_end_clean() 结束输出缓冲, 并扔掉缓冲里的内容.

举个例子, var_dump()函数输出一个变量的结构和内容, 这在调试的时候很有用.
但假如变量的内容里有 < , > 等HTML的非凡字符, 输出到网页里就看不见了. 怎么办呢?
用输出缓冲函数能很轻易的解决这个问题.

ob_start();
var_dump($var);
$out = ob_get_contents();
ob_end_clean();


这时var_dump()的输出已经存在 $out 里了. 你可以现在就输出:

echo '

阅读全文

重载

PHP4中已经有了重载的语法来建立对于外部对象模型的映射,就像Java和COM那样. PHP5带来了强大的面向对象重载,答应程序员建立自定义的行为来访问属性和调用方法.

  重载可以通过__get, __set, and __call几个非凡方法来进行. 当Zend引擎试图访问一个成员并没有找到时,PHP将会调用这些方法.

  在例6.14中,__get和__set代替所有对属性变量数组的访问. 假如必要,你可以实现任何类型你想要的过滤. 例如,脚本可以禁止设置属性值, 在开始时用一定的前缀或包含一定类型的值.

  __call方法说明了你如何调用未经定义的方法. 你调用未定义方法时,方法名和方法接收的参数将会传给__call方法, PHP传递__call的值返回给未定义的方法.

  Listing 6.14 User-level overloading


class Overloader
{
private $properties = array();

function __get($property_name)
{
if(isset($this->properties[$property_name]))
{
return($this->properties[$property_name]);
}
else
{
return(NULL);
}
}

function __set($property_name, $value)
{
$this->properties[$property_name] = $value;
}

function __call($function_name, $args)
{
print("Invoking $function_name()
n");
print("Arguments: ");
print_r($args);

return(TRUE);
}
}
$o = new Overloader();

//invoke __set() 给一个不存在的属性变量赋值,激活__set()
$o->dynaProp = "Dynamic Content";

//invoke __get() 激活__get()
print($o->dynaProp . "
n");

//invoke __call() 激活__call()
$o->dynaMethod("Leon", "Zeev");
?>

阅读全文

构造函数和析构函数

假如你在一个类中声明一个函数,命名为__construct,这个函数将被当成是一个构造函数并在建立一个对象实例时被执行. 清楚地说,__是两个下划线. 就像其它任何函数一样,构造函数可能有参数或者默认值. 你可以定义一个类来建立一个对象并将其属性全放在一个语句(statement)中.

  你也可以定义一个名为__destruct的函数,PHP将在对象被销毁前调用这个函数. 它称为析构函数.

  继续是类的一个强大功能. 一个类(子类/派生类)可以继续另一类(父类/基类)的功能. 派生类将包含有基类的所有属性和方法,并可以在派生类中加上其他属性和方法. 你也可以覆写基类的方法和属性. 就像3.1.2中显示的,你可以用extends要害字来继续一个类.
  你可能想知道构造函数是如何被继续的. 当它们和其它方法一起被继续时,他们不会在创建对象时被执行.
假如你需要这个功能,你需要用第二章提到的::运算符. 它答应你指向一块命名空间. parent指向父类命名空间,你可以用parent::__construct来调用父类的构造函数.

  一些面向对象语言在类之后命名构造函数. PHP的前几个版本也是如此,到现在这种方法仍然有效.也就是:假如你把一个类命名为Animal并且在其中建立一个命名也是Animal的方法,则这个方法就是构造函数.假如一个类的同时拥有__construt构造函数和与类名相同的函数,PHP将把__construct看作构造函数.这使得用以前的PHP版本所写的类仍然可以使用. 但新的脚本(PHP5)应当使用__construct.

  PHP的这种新的声明构造函数的方法可以使构造函数有一个独一无二的名称,无论它所在的类的名称是什么. 这样你在改变类的名称时,就不需要改变构造函数的名称.

  你可能在PHP中给构造函数一个像其它类方法一样的访问方式. 访问方式将会影响从一定范围内实例化对象的能力. 这答应实现一些固定的设计模式,如Singleton模式.

  析构函数,相反于构造函数. PHP调用它们来将一个对象从内存中销毁. 默认地,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源. 析构函数答应你在使用一个对象之后执行任意代码来清除内存.

  当PHP决定你的脚本不再与对象相关时,析构函数将被调用. 在一个函数的命名空间内,这会发生在函数return的时候. 对于全局变量,这发生于脚本结束的时候. 假如你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值. 通常将变量赋值勤为NULL或者调用unset .

  下面的例子中,计算从类中实例化的对象的个数. Counter类从构造函数开始增值,在析构函数减值.

  一旦你定义了一个类,你可以用new来建立一个这个类的实例. 类的定义是设计图,实例则是放在装配线上的元件. New需要类的名称,并返回该类的一个实例. 假如构造函数需要参数,你应当在new后输入参数.


class Counter
{
private static $count = 0;

function __construct()
{
self::$count ;
}

function __destruct()
{
self::$count--;
}

function getCount()
{
return self::$count;
}
}

//建立第一个实例
$c = new Counter();

//输出1
print($c->getCount() . "
n");

//建立第二个实例
$c2 = new Counter();

//输出2
print($c->getCount() . "
n");

//销毁实例
$c2 = NULL;

//输出1
print($c->getCount() . "
n");
?>
  当你新建了一个实例,内存会被预备来存储所有属性. 每个实例有自己独有的一组属性. 但方法是由该类的所有实例共享的。

阅读全文

类的自动加载

当你尝试使用一个未定义的类时,PHP会报告一个致命错误. 解决方法就是添加一个类,可以用include包含一个文件. 究竟你知道要用到哪个类. 但是,PHP提供了类的自动加载功能, 这可以节省编程的时间. 当你尝试使用一个PHP没有组织到的类, 它会寻找一个__autoload的全局函数. 假如存在这个函数,PHP会用一个参数来调用它,参数即类的名称.

  例子6.15说明了__autoload是如何使用的. 它假设当前目录下每个文件对应一个类. 当脚本尝试来产生一个类User的实例,PHP会执行__autoload. 脚本假设class_User.php中定义有User类.. 不管调用时是大写还是小写,PHP将返回名称的小写.

Listing 6.15 Class autoloading


//define autoload function
function __autoload($class)
{
include("class_" . ucfirst($class) . ".php");
}

//use a class that must be autoloaded
$u = new User;
$u->name = "Leon";
$u->printName();
?>

阅读全文

克隆

 PHP5中的对象模型通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 . 为了这样的目的,PHP定义了一个非凡的方法,称为__clone. 像__construct和__destruct一样,前面有两个下划线.

  默认地,用__clone方法将建立一个与原对象拥有相同属性和方法的对象. 假如你想在克隆时改变默认的内容,你要在__clone中覆写(属性或方法).

  克隆的方法可以没有参数,但它同时包含this和that指针(that指向被复制的对象). 假如你选择克隆自己,你要小心复制任何你要你的对象包含的信息,从that到this. 假如你用__clone来复制. PHP不会执行任何隐性的复制,

  下面显示了一个用系列序数来自动化对象的例子:


class ObjectTracker file://对象跟踪器
{
private static $nextSerial = 0;
private $id;
private $name;

function __construct($name) file://构造函数
{
$this->name = $name;
$this->id = self::$nextSerial;
}

function __clone() file://克隆
{
$this->name = "Clone of $that->name";
$this->id = self::$nextSerial;
}

function getId() file://获取id属性的值
{
return($this->id);
}

function getName() file://获取name属性的值
{
return($this->name);
}
}

$ot = new ObjectTracker("Zeev's Object");
$ot2 = $ot->__clone();

//输出: 1 Zeev's Object
print($ot->getId() . " " . $ot->getName() . "
");

//输出: 2 Clone of Zeev's Object
print($ot2->getId() . " " . $ot2->getName() . "
");
?>

阅读全文

PHP中的DOMXML函数

DOM XML functions
These functions are only available if PHP was configured with --with-dom=[DIR], using the GNOME xml library. You will need at least libxml-2.0.0 (the beta version will not work). These functions have been added in PHP4.

This module defines the following constants:

Table 1. XML constants

Constant Value Description
XML_ELEMENT_NODE 1
XML_ATTRIBUTE_NODE 2
XML_TEXT_NODE 3
XML_CDATA_SECTION_NODE 4
XML_ENTITY_REF_NODE 5
XML_ENTITY_NODE 6
XML_PI_NODE 7
XML_COMMENT_NODE 8
XML_DOCUMENT_NODE 9
XML_DOCUMENT_TYPE_NODE 10
XML_DOCUMENT_FRAG_NODE 11
XML_NOTATION_NODE 12
XML_GLOBAL_NAMESPACE 1
XML_LOCAL_NAMESPACE 2

This module defines a number of classes. The DOM XML functions return a parsed tree of the XML document with each node being an object belonging to one of these classes.

xmldoc
(PHP4 >= 4.0b4)

xmldoc -- Creates a DOM object of an XML document
Description

object xmldoc (string str)


The function parses the XML document in str and returns an object of class "Dom document", having the properties "doc" (resource), "version" (string) and "type" (long).

xmldocfile
(PHP4 >= 4.0b4)

xmldocfile -- Creates a DOM object from XML file
Description

object xmldocfile (string filename)


The function parses the XML document in the file named filename and returns an object of class "Dom document", having the properties "doc" (resource), "version" (string).

xmltree
(PHP4 >= 4.0b4)

xmltree -- Creates a tree of php objects from XML document
Description

object xmltree (string str)


The function parses the XML document in str and returns a tree PHP objects as the parsed document.

阅读全文

Email URL的判断和自动转换函数

function validateEmail($email)
{ return eregi("^[_a-z0-9-] (.[_a-z0-9-] )*@[a-z0-9-] (.[a-z0-9-] )*(.[a-z]{2,3})$", $email);
}

function validateURL(http://pic2.phprm.com/2013/09/05/$url.jpg)
{ return eregi("^((ht|f)tp://)((([a-z0-9-] (.[a-z0-9-] )*(.[a-z]{2,3}))|(([0-9]{1,3}.){3}([0-9]{1,3})))((/|?)[a-z0-9~#%&'_ =:?.-]*)*)$", $url);
}

function convertURLS($text)
{ $text = eregi_replace("((ht|f)tp://www.|www.)([a-z0-9-] (.[a-z0-9-] )*(.[a-z]{2,3})((/|?)[a-z0-9~#%&/'_ =:?.-]*)*)", "http://www.3", $text);
$text = eregi_replace("((ht|f)tp://)((([a-z0-9-] (.[a-z0-9-] )*(.[a-z]{2,3}))|(([0-9]{1,3}.){3}([0-9]{1,3})))((/|?)[a-z0-9~#%&'_ =:?.-]*)*)", "

阅读全文

一个用PHP写的中文分词函数

class Segmentation {
var $options = array('lowercase' => TRUE,
'segment_english' => FALSE);
var $dict_name = 'Unknown';
var $dict_words = array();
function setLowercase($value) {
if ($value) {
$this->options['lowercase'] = TRUE;
} else {
$this->options['lowercase'] = FALSE;
}
return TRUE;
}
function setSegmentEnglish($value) {
if ($value) {
$this->options['segment_english'] = TRUE;
} else {
$this->options['segment_english'] = FALSE;
}
return TRUE;
}
function load($dict_file) {
if (!file_exists($dict_file)) {
return FALSE;
}
$fp = fopen($dict_file, 'r');
$temp = fgets($fp, 1024);
if ($temp === FALSE) {
return FALSE;
} else {
if (strpos($temp, "t") !== FALSE) {
list ($dict_type, $dict_name) = explode("t", trim($temp));
} else {
$dict_type = trim($temp);
$dict_name = 'Unknown';
}
$this->dict_name = $dict_name;
if ($dict_type !== 'DICT_WORD_W') {
return FALSE;
}
}
while (!feof($fp)) {
$this->dict_words[rtrim(fgets($fp, 32))] = 1;
}
fclose($fp);
return TRUE;
}
function getDictName() {
return $this->dict_name;
}
function segmentString($str) {
if (count($this->dict_words) === 0) {
return FALSE;
}
$lines = explode("n", $str);
return $this->_segmentLines($lines);
}
function segmentFile($filename) {
if (count($this->dict_words) === 0) {
return FALSE;
}
$lines = file($filename);
return $this->_segmentLines($lines);
}
function _segmentLines($lines) {
$contents_segmented = '';
foreach ($lines as $line) {
$contents_segmented .= $this->_segmentLine(rtrim($line)) . " n";
}
do {
$contents_segmented = str_replace(' ', ' ', $contents_segmented);
} while (strpos($contents_segmented, ' ') !== FALSE);
return $contents_segmented;

阅读全文

字符串截取函数开始

字符串截取函数开始        function csubStr($str,$start,$len)
        {
                $strlen=strlen($str);
                $clen=0;
                for($i=0;$i<$strlen;$i++,$clen++)
                {
                        if ($clen>=$start+$len)
                        break;

                        if(ord(substr($str,$i,1))>0xa0)
                        {
                                if ($clen>=$start)
                                $tmpstr.=substr($str,$i,2);
                                $i++;
                        }
                        else
                        {
                                if ($clen>=$start)
                                $tmpstr.=substr($str,$i,1);
                        }
        }
       
        return $tmpstr;
        }
       
    //------------------------------字符串截取函数结束-------------------------------------------

/*使用方法:
<?php
$str=csubStr("ipod光环太耀眼 苹果的电脑本业该怎么办?",0,20);
echo $str;
?>       

阅读全文