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 & ’Adams’;
输出:
<>
源码:
<>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 |
可选。规定如何排列数组的值。可能的值:
|
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标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正则表达式:(^\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 <= 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标记的正则表达式:/<(.*)>.*</1>|<(.*) />/ 匹配首尾空格的正则表达式:(^s*)|(s*$) 匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* 匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)? 利用正则表达式限制网页表单里的文本框输入内容: 用正则表达式限制只能输入中文: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标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g // 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? 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]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$ 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标记:<(.*)>.*<\/\1>|<(.*) \/> 24、匹配空行:\n[\s| ]*\r 25、提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)? 26、提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 27、提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)? 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-./?%&=]*)?$", //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); ?>