本文实例讲述了PHP使用preg_split()分割特殊字符(元字符等)的方法。分享给大家供大家参考,具体如下:
这里所说的特殊字符就是正则中使用的特殊字符,如: | . + 等
其它的先不说,来个实例:
代码如下 | 复制代码 |
$pattern="/[,-\\|\\.]/"; $subject="aaa,bbb,ccc-ddd-eee-fff|ggg|hhh.iii.jjj.kkk"; $spr=preg_split($pattern,$subject); print_r($spr); |
结果:
Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9] => [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => [18] => [19] => [20] => [21] => [22] => [23] => [24] => [25] => [26] => [27] => [28] => [29] => [30] => [31] => [32] => [33] => [34] => [35] => [36] => [37] => [38] => [39] => [40] => [41] => [42] => [43] => )
很显然,这不是我们想要的结果,郁闷了好一会,才找到是什么原因:
把正则表达式内的特殊字符放到前面就没事了, 也就是
$pattern="/[\\|\\.,-]/";
结果:
Array ( [0] => aaa [1] => bbb [2] => ccc [3] => ddd [4] => eee [5] => fff [6] => ggg [7] => hhh [8] => iii [9] => jjj [10] => kkk )
好了,这就是我们要的结果了
总结:当使用正则表达式中的元字符,普通字符进行 [ ]内的多个字符分割的时候,要把待转义的元字符放在前面.
本文详细介绍了用PHP的socket实现客户端到服务端的通信实例详解,非常实用,有兴趣的同学快来看看吧一、server.php服务端:
代码如下 | 复制代码 |
<?php error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); //本地IP $address='localhost'; //设置用111端口进行通信 $port= 111; //创建SOCKET if(($sock= socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) { echo"socket创建失败原因 ". socket_strerror($sock) ."\n"; }
if(($ret= socket_bind($sock,$address,$port)) < 0) { echo"创建套接字失败原因 ". socket_strerror($ret) ."\n"; } //监听 if(($ret= socket_listen($sock, 5)) < 0) { echo"监听失败原因 ". socket_strerror($ret) ."\n"; } do{ //接收命令 if(($msgsock= @socket_accept($sock)) < 0) { echo"命令接收失败原因: ". socket_strerror($msgsock) ."\n"; break; } $msg="\nPHP Test Server. \n"."用quit,shutdown,sun...等命令测试.\n";
@socket_write($msgsock,$msg,strlen($msg));
do{ if(false === ($buf= @socket_read($msgsock, 2048, PHP_NORMAL_READ))) { echo"socket_read() failed: reason: ". socket_strerror($ret) ."\n"; break2; } if(!$buf= trim($buf)) { continue; } if($buf=='quit') { break; } if($buf=='shutdown') { socket_close($msgsock); break2; } if($buf=='sun') { echo'what are you doing?'; } $talkback="Backinformation : '$buf'.\n"; socket_write($msgsock,$talkback,strlen($talkback)); echo"$buf\n"; }while(true);
socket_close($msgsock);
}while(true);
socket_close($sock); ?> |
二、client.php客户端:
代码如下 | 复制代码 |
<?php error_reporting(E_ALL); //端口111 $service_port= 111; //本地 $address='localhost'; //创建 TCP/IP socket $socket= socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if($socket< 0) { echo"socket创建失败原因: ". socket_strerror($socket) ."\n"; }else{ echo"OK,HE HE.\n"; } $result= socket_connect($socket,$address,$service_port); if($result< 0) { echo"SOCKET连接失败原因: ($result) ". socket_strerror($result) ."\n"; }else{ echo"OK.\n"; } //发送命令 $in="HEAD / HTTP/1.1\r\n"; $in.="Connection: Close\r\n\r\n"; $out=''; echo"Send Command.........."; $in="sun\n"; socket_write($socket,$in,strlen($in)); echo"OK.\n"; echo"Reading Backinformatin:\n\n"; while($out= socket_read($socket, 2048)) { echo$out; } echo"Close socket........"; socket_close($socket); echo"OK,He He.\n\n"; ?> |
这两段代码是简单介绍用PHP实现客户端和服务端的通信
具体操作,在DOS下用PHP命令打开SERVER,处于监听状态..
再打开一个DOS窗口,用PHP命令打开CLIENT,会得到服务端的回应....
本文介绍了详谈PHP中的密码安全性Password Hashing,非常实用,不会的同学可以参考一下如果你还在用md5加密,建议看看下方密码加密和验证方式。
先看一个简单的Password Hashing例子:
代码如下 | 复制代码 |
<?php
//require 'password.php'; /** * 正确的密码是secret-password * $passwordHash 是hash 后存储的密码 * password_verify()用于将用户输入的密码和数据库存储的密码比对。成功返回true,否则false */ $passwordHash= password_hash('secret-password', PASSWORD_DEFAULT); echo$passwordHash; if(password_verify('bad-password',$passwordHash)) { // Correct Password echo'Correct Password'; }else{ echo'Wrong password'; // Wrong password } |
下方代码提供了一个完整的模拟的 User 类,在这个类中,通过使用Password Hashing,既能安全地处理用户的密码,又能支持未来不断变化的安全需求。
代码如下 | 复制代码 |
<?php classUser { // Store password options so that rehash & hash can share them: constHASH = PASSWORD_DEFAULT; constCOST = 14;//可以确定该算法应多复杂,进而确定生成哈希值将花费多长时间。(将此值视为更改算法本身重新运行的次数,以减缓计算。)
// Internal data storage about the user: public$data;
// Mock constructor: publicfunction__construct() { // Read data from the database, storing it into $data such as: // $data->passwordHash and $data->username $this->data =newstdClass(); $this->data->passwordHash ='dbd014125a4bad51db85f27279f1040a'; }
// Mock save functionality publicfunctionsave() { // Store the data from $data back into the database }
// Allow for changing a new password: publicfunctionsetPassword($password) { $this->data->passwordHash = password_hash($password, self::HASH, ['cost'=> self::COST]); }
// Logic for logging a user in: publicfunctionlogin($password) { // First see if they gave the right password: echo"Login: ",$this->data->passwordHash,"\n"; if(password_verify($password,$this->data->passwordHash)) { // Success - Now see if their password needs rehashed if(password_needs_rehash($this->data->passwordHash, self::HASH, ['cost'=> self::COST])) { // We need to rehash the password, and save it. Just call setPassword $this->setPassword($password); $this->save(); } returntrue;// Or do what you need to mark the user as logged in. } returnfalse; } } |
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
代码如下 | 复制代码 |
//其中 video 是表名; //createtime 是字段; // //数据库time字段为时间戳 // //查询当天:
$start=date('Y-m-d 00:00:00'); $end=date('Y-m-d H:i:s'); SELECT * FROM `table_name` WHERE `time` >= unix_timestamp('$start') AND `time` <= unix_timestamp('$end')
//查询本周:
SELECT yearweek('2011-04-17 15:38:22',1 )//结果是201115 SELECT yearweek('2011-04-17 15:38:22')//结果是201116 //yearweek的第2个参数设置为1的原因是,中国人习惯把周1作为本周的第一天 //另外补充下: //2011-04-17 是周日。 SELECT dayofweek('2011-04-17 15:38:22')// 查询出的是1,把礼拜天作为一周的第一天。 SELECT dayofweek('2011-04-18 15:38:22')//查询出的是2 SELECT weekday('2011-04-17 15:38:22')// 查询出的是6, SELECT weekday('2011-04-18 15:38:22')// 查询出的是0, //所以建议使用weekday,查询出来的结果+1就可以了,就比较符合国人的习惯了。
SELECT * FROM `table_name` WHERE YEARWEEK( FROM_UNIXTIME( `time`,'%Y-%m-%d %H:%i:%s') ,1) = YEARWEEK( now( ),1 )
//查询本月:
$start=date('Y-m-01 00:00:00'); $end=date('Y-m-d H:i:s'); SELECT * FROM `table_name` WHERE `time` >= unix_timestamp('”.$start.”') AND `time` <= unix_timestamp('$end')
//查询本年:
$start=date('Y-01-01 00:00:00'); $end=date('Y-m-d H:i:s'); SELECT * FROM `table_name` WHERE `time` >= unix_timestamp('$start') AND `time` <= unix_timestamp('$end') |
php 获取今日、昨日、上周、本月的起始时间戳和结束时间
代码如下 | 复制代码 |
<?php //<!--php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法,主要使用到了 php 的时间函数 mktime()。-->
//1、php获取今日开始时间戳和结束时间戳
$beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
echo$beginToday.'---'.$endToday; echo'<br/>'; //2、php获取昨日起始时间戳和结束时间戳
$beginYesterday=mktime(0,0,0,date('m'),date('d')-1,date('Y')); $endYesterday=mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
echo$beginYesterday.'---'.$endYesterday; echo'<br/>'; //3、php获取上周起始时间戳和结束时间戳
$beginLastweek=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y')); $endLastweek=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));
echo$beginLastweek.'---'.$endLastweek; echo'<br/>';
//4、php获取本月起始时间戳和结束时间戳
$beginThismonth=mktime(0,0,0,date('m'),1,date('Y')); $endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y'));
echo$beginThismonth.'---'.$endThismonth; echo'<br/>';
//PHP mktime() 函数用于返回一个日期的 Unix 时间戳。 //语法:mktime(hour,minute,second,month,day,year,is_dst) // //参数 描述 //hour 可选。规定小时。 //minute 可选。规定分钟。 //second 可选。规定秒。 //month 可选。规定用数字表示的月。 //day 可选。规定天。 //year 可选。规定年。在某些系统上,合法值介于 1901 - 2038 之间。不过在 PHP 5 中已经不存在这个限制了。 //is_dst可选。如果时间在日光节约时间(DST)期间,则设置为1,否则设置为0,若未知,则设置为-1。 //自 5.1.0 起,is_dst 参数被废弃。因此应该使用新的时区处理特性。参数总是表示 GMT 日期,因此 is_dst 对结果没有影响。 // //参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。
echo(date("M-d-Y",mktime(0,0,0,12,36,2001)));
//将输出结果如: // //Jan-05-2002 |