php 素数

我在这里列举几种方法,仅供参考,学习php编程的思路。
方法一:判断素数的办法是用1到某个数之间的所有数去除这个数,如果能够整除这个数的数超过2个那么这个数就不是素数,反之如果能够整除这个数的数只有1个或者2个,那么他就是素数.

<?php
$n = 1000;
echo $n . "以内的素数:";
for ($m = 2; $m <= $n; $m++) { //第一层循环,循环1-$n直接的所有数
    $k = 0; //计数器初始化
    for ($i = 1; $i <= $m; $i++) { //第二层循环,循环1-$m直接的所有数,$m属于区间【1,$n】
        if ($m % $i == 0) { //取模运算,如果余数为0,K自增1
            $k++;
        }
    }
    if ($k == 2) { //如果k的值等于1或者2,那么是素数,将其输出
        echo $m . "-";
    }
}
?>

方法二:判断素数的办法是除了1和本身外,有其它能够整除这个数的数,那么这个数就不是素数

<?php

$isPrime = true;
$n = 1000;
echo $n . "以内的素数:";
for ($i = 2; $i < $n; $i++) { //第一层循环,循环1-$n直接的所有数
    for ($j = 2; $j <= intval(sqrt($i)); $j++) { //第二层循环,$i开平方,这里的intval是10进制取整数的意思
        if ($i % $j == 0) { //取模运算,如果余数为0,输出$isPrime=false,并跳出第二层循环
            $isPrime = false;
            break;
        }
        $isPrime = true;
    }
    if ($isPrime) { //如果$isPrime=true,将$i输出
        echo $i . " ";
    }
}
?>

方法三:这个方法其实和方法二差不多,思路是同一个,实现的代码不同。

<?php
$ss = 2;
//声明变量$ss,赋初值为最小的素数
$max = 1000;
//声明变量$max,赋值为最大的范围
$arr = array();
//声明一个数组$arr
echo $max . '以内的素数为:';
while ($ss < $max) {
    //判断变量是否在允许的范围内
    $boo = false;
    //声明一个布尔变量$boo,初值为false
    foreach ($arr as $value) {
        //使用foreach语句遍历$arr数组
        if ($ss % $value == 0) {
            //如果变量$ss 能够被数组元素整除
            $boo = true;
            //将布尔变量赋值为true
            break;
        }
    }
    if (!$boo) {
        //判断变量$boo值
        echo $ss . ' ';
        //如果$boo为假,则说明当前变量$ss为素数,输出素数
        $arr[count($arr)] = $ss;
    }
    $ss++;
}
?>

利用Data URL(data:image/jpg;base64,)加速网页加载的方法

利用Data URL(data:image/jpg;base64,)base64形式存储图片,将小图片生成数据流形式

先来看下下边这段代码:

<img src=”data:image/gif;base64,R0lGODlhJQAlAJECAL3L2AYrTv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgACACwAAAAA
JQAlAAACi5SPqcvtDyGYIFpF690i8xUw3qJBwUlSadmcLqYmGQu6KDIeM13beGzYWWy3DlB4IYaM
k+Dso2RWkFCfLPcRvFbZxFLUDTt21BW56TyjRep1e20+i+eYMR145W2eefj+6VFmgTQi+ECVY8iG
xcg35phGo/iDFwlTyXWphwlm1imGRdcnuqhHeop6UAAAIfkEBQoAAgAsEAACAAQACwAAAgWMj6nL
XAAh+QQFCgACACwVAAUACgALAAACFZQvgRi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwXABEA
DAADAAACBYyPqcsFACH5BAUKAAIALBUAFQAKAAsAAAITlGKZwWoMHYxqtmplxlNT7ixGAQAh+QQF
CgACACwQABgABAALAAACBYyPqctcACH5BAUKAAIALAUAFQAKAAsAAAIVlC+BGL3Z3IlxUmUuhtR2
LzHhsiEFACH5BAUKAAIALAEAEQAMAAMAAAIFjI+pywUAIfkEBQoAAgAsBQAFAAoACwAAAhOUYJnA
agwdjGq2amXGU1PuLEYBACH5BAUKAAIALBAAAgAEAAsAAAIFhI+py1wAIfkEBQoAAgAsFQAFAAoA
CwAAAhWUL4AIvdnciXFSZS6G1HYvMeGyIQUAIfkEBQoAAgAsFwARAAwAAwAAAgWEj6nLBQAh+QQF
CgACACwVABUACgALAAACE5RgmcBqDB2MarZqZcZTU+4sRgEAIfkEBQoAAgAsEAAYAAQACwAAAgWE
j6nLXAAh+QQFCgACACwFABUACgALAAACFZQvgAi92dyJcVJlLobUdi8x4bIhBQAh+QQFCgACACwB
ABEADAADAAACBYSPqcsFADs=
“>

其实“data:image/gif;base64,R0lGODlhJ……” 就是一张图片的Data URL,就是利用base64编码把图片数据翻译成标准ASCII字符。
等同于:

<img src=”http://www.lrxin.com/images/loading.gif”>

显示结果:

Data URL它现将图片转换成base64编码,以文本的形象随着文件加载。
再由浏览器在本地直接绘制图片,不是从服务器加载,所以节省了HTTP连接,起到加速网页的作用。

语法:
data:image/jpg;    声明数据协议及类型名称
base64,               编码形式为base64
/9j/4AAQSkZ……    base64编码结果

最后附上Data URL的生成方法(PHP):

<?php 
//php读取和保存base64编码的图片内容
header('Content-type:text/html;charset=utf-8'); 
//读取图片文件,转换成base64编码格式
//$image_file = './loading.gif'; 
$image_file = 'http://www.lrxin.com/images/loading.gif'; 
$image_info = getimagesize($image_file); 
$base64_image_content = "data:{$image_info['mime']};base64," . chunk_split(base64_encode(file_get_contents($image_file)));
?>

<img src="<?php echo $base64_image_content;?>" />

需要注意:本方法适合于小图片,大图片就不要考虑了,另外IE8以下浏览器不支持这种方法。
用这种方法会加重客户端的CPU和内存负担,总之有利有弊。
IE8 之前的浏览器不支持 Data URL

在线生成工具:
http://www.greywyvern.com/code/php/binary2base64
http://www.kawa.net/works/js/data-scheme/base64-e.html

简单的说,data类型的Url大致有下面几种形式。

data:,<文本数据>
data:text/plain,<文本数据>
data:text/html,<HTML代码>
data:text/html;base64,<base64编码的HTML代码>
data:text/plain;charset=UTF-8;base64,<base64编码的HTML代码>
data:text/css,<CSS代码>
data:text/css;base64,<base64编码的CSS代码>
data:text/javascript,<Javascript代码>
data:text/javascript;base64,<base64编码的Javascript代码>
data:image/gif;base64,<base64编码的gif图片数据>
data:image/png;base64,<base64编码的png图片数据>
data:image/jpeg;base64,<base64编码的jpeg图片数据>
data:image/x-icon;base64,<base64编码的icon图片数据>

php读取和保存base64编码的图片内容

<?php 
//php读取和保存base64编码的图片内容
header('Content-type:text/html;charset=utf-8'); 
//读取图片文件,转换成base64编码格式
//$image_file = './loading.gif'; 
$image_file = 'http://www.lrxin.com/images/loading.gif'; 
$image_info = getimagesize($image_file); 
$base64_image_content = "data:{$image_info['mime']};base64," . chunk_split(base64_encode(file_get_contents($image_file)));



//保存base64字符串为图片 
//匹配出图片的格式 
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){ 
	$type = $result[2]; 
	$new_file = "./test.{$type}"; 
	if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))){ 
		echo '新文件保存成功:', $new_file ,'<br/>'; 
	}
}
?>


<img src="<?php echo $base64_image_content;?>" />
<br/>
<textarea style="width:80%; min-height:300px;"><?php echo $base64_image_content;?></textarea>

php取整函数ceil,floor,round,intval函数的区别

 PHP取整函数有
 ceil – 进一法取整,
 floor – 舍去法取整 ,
 round — 对浮点数进行四舍五入,
 intval — 获取变量的整数值,
 下面详细介绍一下:

1、ceil — 进一法取整
说明
float ceil ( float $value )
返回不小于 value 的下一个整数,value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。
ceil() 例子

<?php
            echo ceil(4.3); // 5
            echo ceil(9.999); // 10
?>

2、floor — 舍去法取整
说明
float floor ( float $value )
返回不大于 value 的下一个整数,将 value 的小数部分舍去取整。floor() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。
floor() 例子

<?php
            echo floor(4.3); // 4
            echo floor(9.999); // 9
?>

3、round — 对浮点数进行四舍五入
说明
float round ( float $val [, int $precision ] )
返回将 val 根据指定精度 precision(十进制小数点后数字的数目)进行四舍五入的结果。precision 也可以是负数或零(默认值)。
round() 例子

<?php
            echo round(3.4); // 3
            echo round(3.5); // 4
            echo round(3.6); // 4
            echo round(3.6, 0); // 4
            echo round(1.95583, 2); // 1.96
            echo round(1241757, -3); // 1242000
            echo round(5.045, 2); // 5.05
            echo round(5.055, 2); // 5.06
?>

Note: PHP 默认不能正确处理类似 “12,300.2″ 的字符串。
Note: precision 参数是在 PHP 4 中被引入的。

4、intval — 获取变量的整数值
说明
int intval ( mixed $var [, int $base ] )
通过使用特定的进制转换(默认是十进制),返回变量 var 的 integer 数值。
var 可以是任何标量类型。intval() 不能用于 array 或 object。
intval() 例子

<?php
echo intval(4.3); // 4
echo intval(9.999); // 9
?>

Note:
除非 var 参数是字符串,否则 intval() 的 base 参数不会有效果。

个人认为floor函数与intval函数功能相同,所不同之处是一个返回的浮点数(float),而另一个是整数(integer),因为 float 值的范围通常比 integer 要大。不过就数值本身来说两者是相等的。

对PHP安全有帮助的一些函数

安全一直是一个在编程语言中非常值得去关注的方面。在任何一种成熟的编程语言中都有合适的办法来保证程序的安全性,在现代的 WEB 开发中,我们常常需要去处理用户的输入。(那么这时候,问题就来了)有一句编程格言是: 千万不要相信用户输入的安全性。所以呢,今天就介绍一些在PHP 中最常用的为你的代码提供安全保护的方法。

在PHP 中有许多方便的函数可以帮助你免于类似于 SQL注入,XSS攻击。现在让我们来看一下这些能够给你的项目增加安全性的函数吧。但是,请注意,这里只是一些常用的函数的列表,也许他们并不全面,但是我相信他们都是对你的项目是非常有帮助的。

mysql_real_escape_string( string sqlQuery ) :

●转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集。一个非常有用的函数,可以有效地避免 SQL 注入。

以下字符会被转换:

\x00,\n,\r,\,’,”,\x1a

在执行sql语句之前,对要将执行的sql query 使用该函数处理,会将一些危 险扼杀在摇篮中。

但是现在一般在较为成熟的项目中,一般比较推荐使用类似 PDO 这样的数据库持久层来处理所有的数据库操作。他们代表着更为先进的数据库操作处理技术,在安全性,数据读写的速度上逗比那些古老的 mysql_* api 强大了不少。

addslashes() :

在将一些数据插入到数据库中时,这个函数会非常有用,它可以在单引号前加上反斜杠,使得数据在插入时不会出现错误。但是它的使用与php.ini 中的一项设置有关系 — magic_quotes_gpc

1. 对于PHP magic_quotes_gpc=on的情况, 我们可以不对输入和输出数据库的字符串数据作addslashes()和stripslashes()的操作,数据也会正常显示。

如果此时你对输入的数据作了addslashes()处理,那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。

2. 对于PHP magic_quotes_gpc=off 的情况

必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出,因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。

【stripslashes() :删除由 addslashes() 函数添加的反斜杠。】

htmlentities() :

一个非常有用的用来处理输出的函数。它用来将一些可能导致XXS攻击的字符转化为html实体,这些字符在浏览器显示的时候是正常的,但是当你查看它的源代码时,实际上这些特殊字符必不会是他显示的那样,例如

输出:

John & ‘Adams’

源码:

John&nbsp;&amp;&nbsp;’Adams’;

输出:

<>

源码:

&lt;&gt;gt;

编码这些符号,有效地避免了XSS 攻击。

htmlspecialchars():

和上面的函数是一样的,但是它更常用一些,因为 htmlentities() 是将所有的有在html 标准中定义了的字符转换成他们对应的html实体,这样会是你的输出缺乏易读性(html 实体列表 http://www.w3school.com.cn/tags/html_ref_entities.html)。所以呢,使用 htmlspecialchars() 只是将一些 预定义的字符(就是会导致出现问题的)转换为html实体。例如:

& (和号) 成为 &

” (双引号) 成为 ”

‘ (单引号) 成为 ‘

< (小于) 成为 <

> (大于) 成为 >

所以,在一些项目中,我还是常常使用 htmlspecialchars() 来处理html 的输出的。他在安全这一方面做得更具体一些。

strip_tags(): 一般在输出时使用,将HTML、XML 以及 PHP 的标签剥去。

函数原型: strip_tags(string,allow)

String 代表输入的字符串,allow 代表 不删除的标签,你可以通过 allow 来自定义过需要滤掉的标签

md5() :

一个将字符串转换为一个32位的哈希值的函数(不能逆向解密),任何一个字符串都能通过这个函数获得一个唯一的32位字符串。但是,现在使用这个函数时,需要注意有一些数据库记录了大量的md5 值,通过暴力枚举的方式来破解你的密码,所以在使用的时候,你可以先将你的原字符串加一层密,然后再使用md5()哈希,会获得更好的效果。

sha1() :

和md5() 和相似的一个函数,但是他使用不同的算法生成一个 40个字符的字符串。可以在项目中考虑使用

intval() :

也许你认为这个函数不是一个 security function。但是它在某些情况下可以很好地保护你的code。对从用户收集到的一些数据例如 ID,password,username处理,也许可以消除一些安全隐患,毕竟这里是重灾区。

织梦系统中出现DedeTag Engine Create File False提示原因及解决方法

今天更新网站时dedecms系统时,遇到一个问题:DedeTag Engine Create File False  出现这样的提示。

其实这也不算是什么错误,我个人觉得最重要的一点就是根目录下没有给写权限。当然,我用的是Linux系统。我直接给了777权限之后就可以了。

之后在网上看到了一些答案,也贴在这里。希望对有需要的朋友有所帮助。

第一种情况:站点、文件夹权限不足造成无法建立文件

这种情况的出现,一方面可能是Apache设置的读写权限较严格,另一方面原因可能是使用者通过服务器或FTP对一些文件夹设置了错误的读写权限造成。这时候,只需修改网站根目录或相关栏目的目录上修改权限为755即可解决。

解决办法:
第一步、定位出错的文件,即查找生成什么文件时出的问题。
方法:修改 include/dedetag.class.php文件,搜索”DedeTag Engine Create File False“,会找到以下代码
$fp = @fopen($filename,”w”) or die(“DedeTag Engine Create File False”);
修改成
$fp = @fopen($filename,”w”) or die(“DedeTag Engine Create File False:$filename”);

重新生成栏目或者文档时,即可提示当前文件信息。
第二步、检查是否有写入权限,windows服务器请给予写入权限,linux服务器请给予777权限。如果目录或者文件不存在,请手工建立。
常见的错误情况有:data目录没有写入权限,html静态文件目录没有写入权限,index.html首页静态文件没有写入权限。

此时在进行生成栏目或者页面HTML操作,即可顺利进行。

第二种情况:列表、频道、文章等命名规则未填写或填写错误

此种情况较为少见,因为初级用户一般不会去修改这些东西,情况可以大致分为:

命名规则未填写(即为空)

  • 解决方法:只需填好相应的规则即可,重新选择栏目类型,也可以快速自动填写。
  • 命名规则中含有非法字符
    解决方法:将非法字符替换或删除。
  • 命名规则设置错误
    例如:命名列表页为{typedir}/{tid}.html,这种命名方式对列表只有一页的栏目是正常的,如果列表是两页或两页以上时,由于进程冲突,生成栏目就会出现 DedeTag Engine Create File False 的提示。
    解决方法:此时只需要增加{page}变量到名称中即可解决问题。
  • 生成文件的层次不对
    例如设置列表文件要在列表{typedir}目录下,不能向下再有目录比如:{typedir}/list{tid}{page}.html是对的,可以生成但是如果设置为 {typedir}/list/{tid}{page}.html这样将会出错

第三种情况:发布文章后将栏目改为了“外部链接”类型

在某个栏目里发了几篇文章,后来把这个栏目改成外连接了,更新文档时,系统还会更新这个栏目下的那几篇文章,但地址是外连接,所以无法生成文件,由此产生DedeTag Engine Create File False提示

解决方法:把栏目改回的目录,把文章删除,再改回外部链接类型。

好了,也就差不多这些了。有什么问题可以给我留言!

wampserver虚拟主机配置httpd-vhosts.conf

NameVirtualHost *:80

<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.localhost
DocumentRoot “D:\wamp\www”
ServerName localhost
ServerAlias localhost
ErrorLog “logs/dummy-host.localhost-error.log”
CustomLog “logs/dummy-host.localhost-access.log” common
</VirtualHost>

#
# 如果目录在 D:\wamp\www 下因为 D:\wamp\www 已经设置过权限了 所以 可以不用设置 <Directory “D:\webroot” >
# 否者需要 像下边的例子 设置 目录权限 <Directory “D:\webroot” >
#
<VirtualHost *:80>
ServerName 127.0.0.5
ServerAlias 127.0.0.6
ServerAdmin webmaster@dummy-host.localhost
DocumentRoot “D:\webroot”

ErrorLog “logs/dummy-host.localhost-error.log”
CustomLog “logs/dummy-host.localhost-access.log” common

<Directory “D:\webroot” >
    Options Indexes FollowSymLinks
  AllowOverride all
    Order Deny,Allow
Allow from all
</Directory>

</VirtualHost>

PHP把数字ID转字母ID

    ID是网站中经常出现的,它一般是数字,但是我们发现现在的网站很多ID都是字母了,比如YouTube的视频播放页它的URL类似/watch?v=yzNjIBEdyww。 下面是一个生成字母ID的方法。
   使用示例:

    alphaID(12354);  //会将数字转换为字母。  
    alphaID('PpQXn7COf',true);//会将字母ID转换为对应的数字。  
    alphaID(12354,false,6);//指定生成字母ID的长度为6.  

源码:

    <?php  
    /**
     * Translates a number to a short alhanumeric version
     *
     * Translated any number up to 9007199254740992
     * to a shorter version in letters e.g.:
     * 9007199254740989 --> PpQXn7COf
     *
     * specifiying the second argument true, it will
     * translate back e.g.:
     * PpQXn7COf --> 9007199254740989
     *
     * this function is based on any2dec && dec2any by
     * fragmer[at]mail[dot]ru
     * see: http://nl3.php.net/manual/en/function.base-convert.php#52450
     *
     * If you want the alphaID to be at least 3 letter long, use the
     * $pad_up = 3 argument
     *
     * In most cases this is better than totally random ID generators
     * because this can easily avoid duplicate ID's.
     * For example if you correlate the alpha ID to an auto incrementing ID
     * in your database, you're done.
     *
     * The reverse is done because it makes it slightly more cryptic,
     * but it also makes it easier to spread lots of IDs in different
     * directories on your filesystem. Example:
     * $part1 = substr($alpha_id,0,1);
     * $part2 = substr($alpha_id,1,1);
     * $part3 = substr($alpha_id,2,strlen($alpha_id));
     * $destindir = "/".$part1."/".$part2."/".$part3;
     * // by reversing, directories are more evenly spread out. The
     * // first 26 directories already occupy 26 main levels
     *
     * more info on limitation:
     * - http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/165372
     *
     * if you really need this for bigger numbers you probably have to look
     * at things like: http://theserverpages.com/php/manual/en/ref.bc.php
     * or: http://theserverpages.com/php/manual/en/ref.gmp.php
     * but I haven't really dugg into this. If you have more info on those
     * matters feel free to leave a comment.
     *
     * @author  Kevin van Zonneveld <kevin@vanzonneveld.net>
     * @author  Simon Franz
     * @author  Deadfish
     * @copyright 2008 Kevin van Zonneveld (http://kevin.vanzonneveld.net)
     * @license   http://www.opensource.org/licenses/bsd-license.php New BSD Licence
     * @version   SVN: Release: $Id: alphaID.inc.php 344 2009-06-10 17:43:59Z kevin $
     * @link    http://kevin.vanzonneveld.net/
     *
     * @param mixed   $in    String or long input to translate
     * @param boolean $to_num  Reverses translation when true
     * @param mixed   $pad_up  Number or boolean padds the result up to a specified length
     * @param string  $passKey Supplying a password makes it harder to calculate the original ID
     *
     * @return mixed string or long
     */  
    function alphaID($in, $to_num = false, $pad_up = false, $passKey = null)  
    {  
      $index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
      if ($passKey !== null) {  
        // Although this function's purpose is to just make the  
        // ID short - and not so much secure,  
        // with this patch by Simon Franz (http://blog.snaky.org/)  
        // you can optionally supply a password to make it harder  
        // to calculate the corresponding numeric ID  
       
        for ($n = 0; $n<strlen($index); $n++) {  
          $i[] = substr( $index,$n ,1);  
        }  
       
        $passhash = hash('sha256',$passKey);  
        $passhash = (strlen($passhash) < strlen($index))  
          ? hash('sha512',$passKey)  
          : $passhash;  
       
        for ($n=0; $n < strlen($index); $n++) {  
          $p[] =  substr($passhash, $n ,1);  
        }  
       
        array_multisort($p,  SORT_DESC, $i);  
        $index = implode($i);  
      }  
       
      $base  = strlen($index);  
       
      if ($to_num) {  
        // Digital number  <<--  alphabet letter code  
        $in  = strrev($in);  
        $out = 0;  
        $len = strlen($in) - 1;  
        for ($t = 0; $t <= $len; $t++) {  
          $bcpow = bcpow($base, $len - $t);  
          $out   = $out + strpos($index, substr($in, $t, 1)) * $bcpow;  
        }  
       
        if (is_numeric($pad_up)) {  
          $pad_up--;  
          if ($pad_up > 0) {  
            $out -= pow($base, $pad_up);  
          }  
        }  
        $out = sprintf('%F', $out);  
        $out = substr($out, 0, strpos($out, '.'));  
      } else {  
        // Digital number  -->>  alphabet letter code  
        if (is_numeric($pad_up)) {  
          $pad_up--;  
          if ($pad_up > 0) {  
            $in += pow($base, $pad_up);  
          }  
        }  
       
        $out = "";  
        for ($t = floor(log($in, $base)); $t >= 0; $t--) {  
          $bcp = bcpow($base, $t);  
          $a   = floor($in / $bcp) % $base;  
          $out = $out . substr($index, $a, 1);  
          $in  = $in - ($a * $bcp);  
        }  
        $out = strrev($out); // reverse  
      }  
       
      return $out;  
    }  

PHP5.3+针对短标签支持配置

第一种方法:替换程序里的内容,以后就省心了。

针对所有的php脚本 在DW里面运行查找替换l  主要做替换操作 当然是短标签替换为整标签 注意顺序别弄乱了
1,所有的’<?=’ 替换为 ‘<?php echo ‘;            —注意空格
2,所有的’<?’替换为’<?php ‘            —注意空格
3,所有的’<?php php’ 替换为’<?php ‘            —注意空格
4,所有的’<?php xml’ 替换为’<?xml’            —注意空格(程序中如果有xml的话)

第二种方法:打开php.ini,找到“short_open_tag = Off”,将其修改为“short_open_tag = On”,然后重启IIS或Apache即可。

PHP + BAT 制作PHP自解析批处理

@REM<?php 
@REM ==' 
@SET PHPCLI=D:/APMServ5.2.6/PHP/php.exe
@REM PHPCLI表示你的CLI模式的php.exe的路径 
@%PHPCLI% %0 
@pause
@goto :EOF //关闭窗口
@REM';?> 
<?php 

$data = file_get_contents('http://www.lrxin.com');
echo iconv("UTF-8", "GB2312//IGNORE", $data)  ;
//exec("pause"); 
?>

  这就是,一个BAT文件,内部包含了DOS的BAT批处理代码和PHP的CLI的代码。因为后缀名为BAT,所以在WIndows系统上面,我点他,他就可以自动运行。
  因为我做了一些对PHP的特殊处理,因而它又能自己使用PHP的CLI来解析自己所包含的PHP指令。
  一点说明,巧妙的运用了BAT批处理的REM指令和PHP的”定义字符串的方式,使得二者混合一体,而又互补干扰。

WampServer环境下虚拟主机配置

开启虚拟主机

1.先打开apache的配置文件httpd.conf ,找到
#Include conf/extra/httpd-vhosts.conf
把#去掉就开启虚拟主机了。

2虚拟主机配置:

#配置自己的虚拟主机
<VirtualHost *:80>
    #网站目录,如果在www目录下的php目录,下面就填写F:/www/phpp
    DocumentRoot “F:/www” 
    #域名
    ServerName localhost
    #这里配置欢迎首页面
    DirectoryIndex index.html index.htm index.php
    <Directory />
    Options FollowSymLinks Indexes
    #不允许别人修改我们的页面
    AllowOverride None
    #设置访问权限
    order allow,deny
    Allow from all
    </Directory>   

</VirtualHost>

———————————————————-

#原来默认的目录
<VirtualHost *:80>
    ServerName 127.0.0.1
    DocumentRoot “D:/wamp/www”
</VirtualHost>

#配置自己的虚拟主机
<VirtualHost *:80>
    #访问域名
    ServerName 127.0.0.3
    #网站目录例如:F:/www/phpp
    DocumentRoot “D:/webroot” 
    #这里配置欢迎首页面
    DirectoryIndex index.html index.htm index.php
    <Directory />
        Options FollowSymLinks  Indexes
        #不允许别人修改我们的页面
        AllowOverride None
        #设置访问权限
        order allow,deny
        Allow from all
    </Directory>   
</VirtualHost>

#这个是新增的努力目录
<VirtualHost *:80>
    #域名
    ServerName 127.0.0.2
    #域名2
    ServerAlias 
    #网站目录 例如:DocumentRoot “D:/webroot” 
    DocumentRoot “D:/webroot/wx”
    #目录相关权限
    <Directory “D:/webroot/wx”>
        #浏览权限
        Options FollowSymLinks IncludesNOEXEC Indexes
        #默认文件名
        DirectoryIndex index.html index.htm default.htm index.php default.php index.cgi default.cgi index.shtml index.aspx default.aspx  
        #不允许别人修改我们的页面
        AllowOverride None
        #设置访问权限
        Order Deny,Allow
        Allow from all
        #允许访问其他目录
        #php_admin_value open_basedir “D:/webroot/wordpress/;D:/APMServ5.2.6/tmp/uploadtemp/;D:\APMServ5.2.6\tmp\sessiondata”
        php_admin_value safe_mode On
    </Directory>
</VirtualHost>

#-------------------------------------------------
<VirtualHost *:80>
	ServerName 127.0.0.1
	ServerAlias 
	ServerAdmin webmaster@dummy-host.localhost
	DocumentRoot "Z:/cjjs_201705"

	<Directory "Z:/cjjs_201705" >
	    Options Indexes FollowSymLinks
	    AllowOverride all
	    Order Deny,Allow
	    Require all granted
	</Directory>
	
</VirtualHost>

#-------------------------------------------------
#Z:\cs.jingsai.la
#-------------------------------------------------

<Directory "Z:/" >
	Options Indexes FollowSymLinks
	AllowOverride all
	Order Deny,Allow
	Require all granted
</Directory>

<VirtualHost *:80>
	ServerName 127.9.9.1
	ServerAlias 
	ServerAdmin webmaster@dummy-host.localhost
	DocumentRoot "Z:/cs.jingsai.la/127.9.9.1"
</VirtualHost>

wamp配置虚拟主机

现在先来配置虚拟主机:
1.先打开apache的配置文件httpd.conf,并去掉#Include conf/extra/httpd-vhosts.conf前面的#号!!
2.打开apache的apache/conf/extra下的次配置文件httpd-vhosts.conf
3.将此文件下的原有的扩展配置文件(如下):删除一个或两个
    <VirtualHost *:80>
            ServerAdmin webmaster@dummy-host2.localhost
            DocumentRoot /www/docs/dummy-host2.localhost
           ServerName dummy-host2.localhost
           ErrorLog logs/dummy-host2.localhost-error_log
           CustomLog logs/dummy-host2.localhost-access_log common
    </VirtualHost>
4.在httpd-vhosts.conf文件的末尾添加上:
    <VirtualHost *:80>
            DocumentRoot D:/wamp/www  ……设置虚拟主机的目录,即输
                        入虚拟主机名字是转到的目录
                        当你的虚拟目录与的你apache
                        的目录不一样时或者不在apache
                        的根目录下的时 ,需要在后面
                        加—-的内容:
           ServerName wamp        ……设置虚拟主机的名字
—————————————————————–      
       <Directory “D:/wamp/www”>    …..对所给的目录赋予权限
            Options Indexes FollowSymLinks
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>
—————————————————————–
    </VirtualHost>
————————–example———————–
<VirtualHost *:80>
    DocumentRoot D:/ds/www
   ServerName www.ds.com
<Directory “D:/ds/www”>
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
</VirtualHost>
———————————————————–
 
5.打开在C:\WINDOWS\system32\drivers\etc中的hosts文件中加上如下的内容
    127.0.0.1    wamp
6.这样我们就配置好了名为wamp的虚拟主机,重启一下我们在浏览器中输入wamp就可以
    查看到D:/wamp/www目录下的内容了!!
7.我们在来配置一个localhost的虚拟主机
8.前两步一样的,我们在httpd-vhosts.conf的最后添加如下代码:
    <VirtualHost *:80>
            DocumentRoot E:/wamp/www
          ServerName localhost
        <Directory “E:/wamp/www”>    …..对所给的目录赋予权限
            Options Indexes FollowSymLinks    …    不在同一个目录,需授权
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>
9.在C:\WINDOWS\system32\drivers\etc中的hosts文件中已有127.0.0.1    localhost不用手工加
10.这样我们就配置好了名为localhost的虚拟主机,重启一下在浏览器中输入localhost就可以查看
    E:/wamp/www的内容了。

我们在来配置虚拟目录:
1.先打开apache的配置文件httpd.conf,并去掉#LoadModule alias_module 
modules/mod_alias.so前面的#;
2.我们在配置虚拟主机的那些代码内添加如下代码:
    ServerName wamp        …..接着上面的代码
    Alias /bin  C:/    …..虚拟主机的目录自己选
    <Directory “C:/”>    …..给予权限
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
3.我们在c盘下建立一个a.php的文件,重启apache在浏览器中输入http://wamp/bin/a.php,我们就
    可以查看文件的内容了;
4.这样我们就配置好了一个虚拟目录;
————————–example———————–
ServerName www.ds.com
Alias /bin  d:/
<Directory “d:/”>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
———————————————————–
 

我们来配置伪静态:
1.先打开apache的配置文件httpd.conf,然后去掉#LoadModule rewrite_module modules/mod_rewrite.so
    前面的#号!
2.我们在配置虚拟主机的代码内添加如下代码:
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule /conf_([0-9a-z]*)\.html    /ceshi.php?arg=$1  …文件的跳转
    </IfModule>
我们的第二步可以改成在在根目录下建立.htaccess文件添加如下内容
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule /conf_([0-9a-z]*)\.html    /conf.php?arg=$1
    </IfModule>
3.我们将Apache的配置文件内的Allow from none改成Allow from all,AllowOverride None改成
    AllowOverride all
4.我们在这段代码放置的虚拟主机里面新建一个文件ceshi.php 输入以下内容:
    <?php  echo $_GET[‘arg’];?>
5.重新启动Apache,在浏览器你输入http://wamp/conf_123dddd.html,即可看到输出123dddd
 
 
 
 
 
 
 
 
 
 
附加
<VirtualHost *>
ServerAdmin webmaster@domain.com
DocumentRoot “D:/ComsenzEXP/wwwroot/ddt.95k.com”
ServerName ddt-test.95k.com
ErrorLog logs/hmail-error_log
TransferLog logs/hmail-access_log
</VirtualHost>

PHP中判断字符串是否含有中文(正则表达式)

1.测试一

$str = '中文测试'; 
if (preg_match_all("/^([\x81-\xfe][\x40-\xfe])+$/", $str, $match)) {
    echo '全部是汉字';    
} else {
    echo '不全是汉字';
}

2.测试二

$str = '中a文3测试'; 
if (preg_match("/([\x81-\xfe][\x40-\xfe])/", $str, $match)) {
    echo '含有汉字';    
} else {
    echo '不含有汉字';
}

3.测试三

if (preg_match("/[\x7f-\xff]/", $str)) {
    echo "有中文";
}else{
    echo "没有中文";
}

PHP无限极分类生成树方法,巧用引用

你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。
这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了。

function generateTree($items){
    $tree = array();
    foreach($items as $item){
        if(isset($items[$item['pid']])){
            $items[$item['pid']]['son'][] = &$items[$item['id']];
        }else{
            $tree[] = &$items[$item['id']];
        }
    }
    return $tree;
}
$items = array(
    1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
    2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
    3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
    4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),
    5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),
);
print_r(generateTree($items));

可以看到下面打印的结果:

Array
(
    [0] => Array
        (
            [id] => 1
            [pid] => 0
            [name] => 安徽省
            [son] => Array
                (
                    [0] => Array
                        (
                            [id] => 3
                            [pid] => 1
                            [name] => 合肥市
                            [son] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 4
                                            [pid] => 3
                                            [name] => 长丰县
                                        )
 
                                )
 
                        )
 
                    [1] => Array
                        (
                            [id] => 5
                            [pid] => 1
                            [name] => 安庆市
                        )
 
                )
 
        )
 
    [1] => Array
        (
            [id] => 2
            [pid] => 0
            [name] => 浙江省
        )
 
)

上面生成树方法还可以精简到5行:

function generateTree($items){
    foreach($items as $item)
        $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
    return isset($items[0]['son']) ? $items[0]['son'] : array();
}

上面这种无限极分类数据树形结构化的方法值得借鉴。但是我觉得这段代码实际用途并不明显啊,你想取出格式化的树形数据还是要递归啊:

/**
 * 如何取数据格式化的树形数据
 * @blog<http://www.lrxin.com>
 */
$tree = generateTree($items);
function getTreeData($tree){
    foreach($tree as $t){
        echo $t['name'].'<br>';
        if(isset($t['son'])){
            getTreeData($t['son']);
        }
    }
}
getTreeData($tree);

微擎(we7)0.5版本反应特别慢解决方法

最近一段时间使用微擎0.5版本的时候发现。不知为什么现在反应特别慢,微信关键词回复需要 多次才有反应。

同服务器其他程序速度很快!自己手写的微信回复程序反映也很快 就we7关键词或点击自定义菜单慢。

果然断定不是微信的问题。是微擎的问题。

后来找了很多方法。无意间在一片文章中找到了 微擎0.5版本反应特别慢解决方法。试了一下果然成功。

其实就是一个小函数的问题。

解决方法

用dw在微擎目录下查找

sort($signkey);

全部替换为

sort($signkey,SORT_STRING);

sort函数是为数组排序的。两个就是差了一个参数 “SORT_STRING” 速度上就有很大的差别。

后来查阅了一下 

定义和用法

sort() 函数按升序对给定数组的值排序。

注释:本函数为数组中的单元赋予新的键名。原有的键名将被删除。

如果成功则返回 TRUE,否则返回 FALSE。

语法

sort(array,sorttype);
参数 描述
array 必需。输入的数组。
sorttype

可选。规定如何排列数组的值。可能的值:

  • SORT_REGULAR – 默认。以它们原来的类型进行处理(不改变类型)。
  • SORT_NUMERIC – 把值作为数字来处理
  • SORT_STRING – 把值作为字符串来处理
  • SORT_LOCALE_STRING – 把值作为字符串来处理,基于本地设置*。

jquery+ajax+php创建无限滚动页面

jquery+ajax+php创建无限滚动页面

html文件:

<html>
	<head>
		<title>Endless Scroll</title>
		<style type="text/css">
			body{ font-family: "Trebuchet MS",verdana,arial;}
			#loading{ display:none; font-weight:bold;color:#FF0000;}
			p { padding:10px;}
		</style>
		
	</head>
	<body>
		<div id="container">
			<p>Test Paragraph 1</p>
			<p>Test Paragraph 2</p>
			<p>Test Paragraph 3</p>
		</div>
		<p id="loading">loading data... </p>
		<script type="text/javascript" src="../jquery.js"></script>
		<script type="text/javascript">
			$(document).ready(function()
			{
				$(window).scroll(loadData);
			});
			
			var counter = 0;
			function loadData()
			{
				if(counter < 5)
				{
					if  (isUserAtBottom())
					{
						getData();
					}
				}
			}
			function isUserAtBottom()
			{
				return ((($(document).height() - $(window).height()) - $(window).scrollTop()) <= 50) ? true : false;
			}
			function getData()
			{
				$(window).unbind('scroll');
				$('#loading').show();

				$.get(
				'data.php',
				{},
				function(response)
				{
					counter++;
					$('#loading').hide();
					$('#container').append(response);
					$(window).scroll(loadData);
				});
			}
		</script>
	</body>
</html>

data.php文件:

<?php sleep(2);
	echo '<p>This data has been <br/>loaded from server...</p>';
?>

微擎 数据库函数调试开开关define(‘PDO_DEBUG’, false);

微擎 数据库函数调试开开关

微擎根目录下:\source\function\pdo.func.php 文件。

define('PDO_DEBUG', false);// true false 开启错误提示否?

详细如下:

<?php
/**
 * Pdo操作
 *
 * [WeEngine System] Copyright (c) 2013 WE7.CC
 */
defined('IN_IA') or exit('Access Denied');
define('PDO_DEBUG', false);// true false 开启错误提示否?

php读取文件 更改文件名后提供下载

$filename = dirname(__FILE__).'/oldfilename.exe';
$out_filename = 'newfilename.exe';
if (!file_exists($filename)) {
    echo 'Not Found'.$filename;
    exit;
} else {
    // We'll be outputting a file
    @header('Accept-Ranges: bytes');@header('Accept-Length: '.filesize($filename));
    // It will be called
    @header('Content-Transfer-Encoding: binary');@header('Content-type: application/octet-stream');@header('Content-Disposition: attachment; filename='.$out_filename);@header('Content-Type: application/octet-stream; name='.$out_filename);
    // The source is in filename
    $file = @fopen($filename, "r");
    echo@fread($file, @filesize($filename));@fclose($file);
    exit;
}

php正则表达式函数及网站经常要用正则表达式

php 正则表达式

<?php
 
//preg_match("正则表达式","字符串")用于在字符串中查找匹配项
 
$email = "987044391@qq.com";
if (preg_match("/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([.a-zA-Z0-9_-])+([.a-zA-Z0-9_-]+)+([.a-zA-Z0-9_-])$/",$email)){
	echo '匹配成功<hr />';
}else {
	echo '匹配失败<hr />';
}
 
//preg_quote("字符串") 在每个有正则表达式语法前面加入一个转义字符即\
 
$str = "php点点通是一个学习php的网站,(⊙o⊙)…";
echo preg_quote($str);
echo "<hr />";
 
//preg_split("正则","字符串")分割字符串
$php = "+php++点点通++++是好网站";
$field = preg_split("/\+{1,}/",$php);
foreach($field as $f){
	echo $f." ";
}
echo "<hr />";
//preg_grep("正则","字符串") 与数组匹配后返回新数组
$phpddt = array("php点点通","php100","呵呵","hahaha","phpchina");
$item = preg_grep("/^php/",$phpddt);
print_r($item);
 
echo "<hr />";
//preg_replace("正则","替换内容","原字符串")    很重要,很常用
$a = "欢迎光临http://www.lrxin.com/";  //给http开头的加上超链接
echo preg_replace("/http:\/\/(.*)\//","<a href=\"\${0}\">\${0}</a>","$a");
 
?>

平时做网站经常要用正则表达式

平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用:

"^\d+$"  //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$"  //正整数
"^((-\d+)|(0+))$"  //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$"  //负整数
"^-?\d+$"    //整数
"^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0)
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数
"^(-?\d+)(\.\d+)?$"  //浮点数
"^[A-Za-z]+$"  //由26个英文字母组成的字符串
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串
"^[a-z]+$"  //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串
"^\w+$"  //由数字、26个英文字母或者下划线组成的字符串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/   //  年-月-日
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/   // 月/日/年
"^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"   //Emil
/^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/     //电话号码
"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$"   //IP地址


匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$
元字符及其在正则表达式上下文中的行为:
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。
{n} n 是一个非负整数,匹配确定的n 次。
{n,} n 是一个非负整数,至少匹配n 次。
{n,m} m 和 n 均为非负整数,其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 ’\n’ 在内的任何字符,请使用象 ’[.\n]’ 的模式。
(pattern) 匹配pattern 并获取这一匹配。
(?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
(?!pattern) 负向预查,与(?=pattern)作用相反
x|y 匹配 x 或 y。
[xyz] 字符集合。
[^xyz] 负值字符集合。
[a-z] 字符范围,匹配指定范围内的任意字符。
[^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。
\B 匹配非单词边界。
\cx 匹配由x指明的控制字符。
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。
\W 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。
\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。
\num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。
\n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un 匹配 n,其中 n 是一个用四个十六进制数字表示的Unicode字符。
匹配中文字符的正则表达式: [u4e00-u9fa5]
匹配双字节字符(包括汉字在内):[^x00-xff]
匹配空行的正则表达式:n[s| ]*r
匹配HTML标记的正则表达式:/&lt;(.*)&gt;.*&lt;/1&gt;|&lt;(.*) /&gt;/
匹配首尾空格的正则表达式:(^s*)|(s*$)
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&amp;=]*)?
利用正则表达式限制网页表单里的文本框输入内容:
用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^u4E00-u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))"
用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^uFF00-uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))"
用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))"
=========常用正则式
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&amp;=]*)?
sql语句:^(select|drop|delete|create|update|insert).*$
1、非负整数:^\d+$
2、正整数:^[0-9]*[1-9][0-9]*$
3、非正整数:^((-\d+)|(0+))$
4、负整数:^-[0-9]*[1-9][0-9]*$
5、整数:^-?\d+$
6、非负浮点数:^\d+(\.\d+)?$
7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$
9、负浮点数:^(-((正浮点数正则式)))$
10、英文字符串:^[A-Za-z]+$
11、英文大写串:^[A-Z]+$
12、英文小写串:^[a-z]+$
13、英文字符数字串:^[A-Za-z0-9]+$
14、英数字加下划线串:^\w+$
15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&amp;_~`@[\]\':+!]*([^&lt;&gt;\"\"])*$
17、邮政编码:^[1-9]\d{5}$
18、中文:^[\u0391-\uFFE5]+$
19、电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$
20、手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$
21、双字节字符(包括汉字在内):^\x00-\xff
22、匹配首尾空格:(^\s*)|(\s*$)(像vbscript那样的trim函数)
23、匹配HTML标记:&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;
24、匹配空行:\n[\s| ]*\r
25、提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|&gt;)?
26、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
27、提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|&gt;)?
28、提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)
29、提取信息中的中国手机号码:(86)*0*13\d{9}
30、提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
31、提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
32、提取信息中的中国邮政编码:[1-9]{1}(\d+){5}
33、提取信息中的浮点数(即小数):(-?\d*)\.?\d+
34、提取信息中的任何数字 :(-?\d*)(\.\d+)?
35、IP:(\d+)\.(\d+)\.(\d+)\.(\d+)
36、电话区号:/^0\d{2,3}$/
37、腾讯QQ号:^[1-9]*[1-9][0-9]*$
38、帐号(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
39、中文、英文、数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$


	intege:"^-?[1-9]\\d*$",					//整数
	intege1:"^[1-9]\\d*$",					//正整数
	intege2:"^-[1-9]\\d*$",					//负整数
	num:"^([+-]?)\\d*\\.?\\d+$",			//数字
	num1:"^[1-9]\\d*|0$",					//正数(正整数 + 0)
	num2:"^-[1-9]\\d*|0$",					//负数(负整数 + 0)
	decmal:"^([+-]?)\\d*\\.\\d+$",			//浮点数
	decmal1:"^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*$",  	//正浮点数
	decmal2:"^-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*)$",  //负浮点数
	decmal3:"^-?([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0)$",  //浮点数
	decmal4:"^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0$",   //非负浮点数(正浮点数 + 0)
	decmal5:"^(-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*))|0?.0+|0$",  //非正浮点数(负浮点数 + 0)

	email:"^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$", //邮件
	color:"^[a-fA-F0-9]{6}$",				//颜色
	url:"^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&amp;=]*)?$",	//url
	chinese:"^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$",					//仅中文
	ascii:"^[\\x00-\\xFF]+$",				//仅ACSII字符
	zipcode:"^\\d{6}$",						//邮编
	mobile:"^(13|15)[0-9]{9}$",				//手机
	ip4:"^(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)$",	//ip地址
	notempty:"^\\S+$",						//非空
	picture:"(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$",	//图片
	rar:"(.*)\\.(rar|zip|7zip|tgz)$",								//压缩文件
	date:"^\\d{4}(\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$",					//日期
	qq:"^[1-9]*[1-9][0-9]*$",				//QQ号码
	tel:"^(([0\\+]\\d{2,3}-)?(0\\d{2,3})-)?(\\d{7,8})(-(\\d{3,}))?$",	//电话号码的函数(包括验证国内区号,国际区号,分机号)
	username:"^\\w+$",						//用来用户注册。匹配由数字、26个英文字母或者下划线组成的字符串
	letter:"^[A-Za-z]+$",					//字母
	letter_u:"^[A-Z]+$",					//大写字母
	letter_l:"^[a-z]+$",					//小写字母
	idcard:"^[1-9]([0-9]{14}|[0-9]{17})$"	//身份证

error_reporting() 设置 PHP 的报错级别并返回当前级别

定义和用法
error_reporting() 设置 PHP 的报错级别并返回当前级别。

定义和用法
error_reporting() 设置 PHP 的报错级别并返回当前级别。

<?php
//禁用错误报告
error_reporting(0);

//报告运行时错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);

//报告所有错误
error_reporting(E_ALL);
?>