PHP字符串处理函数、正则、文件的上传下载

本周学习知识点:

一.PHP字符串处理函数

 

二.正则表达式

 

三、PHP中文件系统处理

 

四、文件的上传下载

 

一.PHP字符串处理函数

  1. 字符串函数

A、常用的字符串输出函数

  echo() 输出一个或多个字符串

 print()   效率比echo低,用的少

  print_r()  打印关于变量的易于理解的信息。

 die()     exit;直接退出,exit的别称die()输出一些文字再退出

     Print_r() ------输出:输出到浏览器端的

     Var_dump()----打印:获得一个变量的详细信息

B、格式化输出:返回格式化的字符串

 printf()   打印格式化后的文字

 sprintf()  返回格式化的文字,但不打印

C、字符串格式化函数

  trim()   去除字符串首尾处的空白字符

  ltrim()  删除字符串开始的空白字符

  rtrim()  删除字符串结束的空白字符  -----别名:chop()

D、字符串填充函数

  stringstr_padstring $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] )

参数1,填补之后的数量,

参数2,用什么填补;

参数3,填补的位置

E、大小写转换的函数

  strtoupper()  将字符串全部转化为大写

  strtolower()  将字符串全部转化为小写

  ucfirst()   字符串首字母大写

  ucwords()   每个单词的首字母大写

F、HTML标签相关的字符串

      1.nl2br()   在字符串所有新行之前插入HTML换行标记

          stringnl2br( string $string [, bool $is_xhtml = true ] )

      2.strip_tags — 从字符串中去除 HTML 和 PHP 标记不允许用户输入html标签

         stringstrip_tags( string $str [, string $allowable_tags ] )

       HTML标签相关的函数,为了防止黑客攻击,尽量将表单提交过来的数据使用 strip_tags()

      htmlspecialchars()  过滤一下,特殊字符转换为HTML实体

   G、其他字符串格式化函数

  货币:number_format() 数字以千计格式分组数

   Strrev() 字符串翻转函数

            stringstrrev( string $string )

       Md5() 加密函数

           stringmd5( string $str [, bool $raw_output = false ] )

H、字符串比较函数

    strcmp — 二进制安全字符串比较 

            intstrcmp( string $str1 , string $str2 )

            如果第一个数大于第二个返回正数,如果小于返回负数,如果相等返回0  注意该比较区分大小写。

        strcasecmp()  忽略大小写之后再做比较

        strnatcmp() 按照自然排序

     I、字符串分割函数

        explode(arg1,arg2)   参数1,分隔符;参数2,待分割的字符串

        implode()           将数组元素连接成字符串

        chunk_split()        将字符串分割成小串

        split()     用正则表达式将字符串分割到数组中

        preg_split()     用正则表达式分割字符串

        str_split()     将字符串转换成数组

     Eval  计算一个字符串作为PHP代码

        mixed evalstring $code_str )

二、PHP正则表达式

     A、正则表达式函数:

       Perl 兼容正则表达式函数POSIX  扩展正则表达式函数  

       Perl兼容其他语言,而且在POSIX的基础上做了扩展,功能更强大

       如果能用字符串函数处理的就不用正则表达式,因为函数要比正则表达式效率高正则表达式只处理复杂的字符串

     B、正则表达式语法

        1) 定界符   / /

    2) 原子:   \s       是正则表达式匹配的最基本单位

    3) 元字符: * + ?    特殊意义的字符

    4) 模式修正符  i  u 

     C、表示范围的原子

        \d    匹配任意一个十进制数字       

        \D    除了十进制数字之外的任意字符

        \s    匹配任意一个空白字符  空格、回车、换行 

        \S    匹配任意非空白字符   

        \w    匹配任意一个字   a-z  A-Z  _  0-9  

        \W    字母数字下划线之外的任意一个字符

        \b    表示一个边界

        \B    表示一个非边界

     D、自定义范围

         []  自定义一个原子表,匹配方括号中的任意一个原子

         - 表示一个范围

         ^ 表示取反,除了原子表中的都可以(必须在[]内,第一个字符处出现)

E、元字符

    匹配原子出现的数量 * + ?

      * 0 、1、多次  + 1、多次  ? 0、一次

    {} 自己定义前面的原子出现的次数

F、特殊的元字符

   . 匹配除了换行符外的任意字符

   ^ 在正则表达式的第一个字符出现,表示以 xx 开始

   $ 在正则表达式的最后一个字符出现,表示以 xxx结束

   | 表示或的关系,由于优先级最低所以最后才考虑他

G、 ()括号

    1.改变优先级

    2. 作为子模式匹配,将全部匹配作为一个大模式,放到数组的第一个元素中,每个()作为一个子模式,依次放到数组中

    3.反向引用

 可以在模式中将子模式直接取出,再作为正则表达式模式的一部分使用

 \1  取第一个子模式      \2  取第二个子模式

H、模式修正符

    I  忽略大小写   m  将字符串以多行状态下匹配

    S  将\n当做换行看待  U 非贪婪模式

PHP正则表达式默认是贪婪模式,有几个匹配几个  U非贪婪模式,匹配第一个后即停止

I、正则匹配案例

     图片: "/<img.*?src=[\'|\"].*[\.jpg|\.png|\.gif][\'|\"].*?\/?>/i";

 邮箱:"/^\w[\w-\.]*@\w+\.?\w*(\.com|\.org|\.net)$/";

 电话:"/(13[0-9]|14[0-9]|15[0-9]|18[0-9])\d{8}/"

 Url:"/^http(s?):\/\/(www\.)?\S*$/"

三、PHP中文件系统处理 

   A、文件类型

       is_dir()  判断是否是一个目录

       is_executable() 判断文件是否可执行

       is_file()  判断给定的是否是一个文件

       is_link()  判断给定的是否是一个符号连接

       is_readable()  判断给定的是否是可读的

       is_writable()   判断文件是否可写

    B、文件属性

       file_exists()  文件是否存在

       filesize()   文件大小

       filectime()  文件创建时间

       filemtime()  文件修改时间

       fileactime()  文件访问时间

C、缓存文件

 <?php

$cache = 5;

$cache_file = "cache.txt";

if(file_exists($cache_file) &&(time()-filemtime($cache_file))<$cache){

echo file_get_contents($cache_file).'<br/>';

}else{

file_put_contents($cache_file,date("Y-m-d H:i:s",time()));

}

      缓存的使用:

  由于多个人、多次访问一个页面的时候,需要反复的查询数据库,速度非常慢,所以,我们可以第一个人第一次访问这个页面的时候,连接数据库一次,将数据缓存起来,其他人在访问的时候,直接读取缓存文件的数据,提高速度

     Date() 可以将时间戳转换成格式良好的 时间格式

        第一个参数,时间格式

        第二个参数,时间戳

D、目录分割符

    目录分隔符:

  在Linux操作系统下,目录分割符是 /

  在Windows操作系统下,目录分割符石 \

  D:\mywamp\www\php_review\File

但是,不管在什么操作系统下,PHP都支持 / 作为目录分隔符

E、路径相关的函数

    Basename()   获得文件名

    Dirname()    获得目录名

    Pathinfo()获得文件详细信息(返回数组)

F、文件操作相关函数

    创建文件touch();

  删除文件  unlink()

  移动文件rename(‘当前路径名’,’目标文件名’);

  复制文件copy(‘当前文件’,’目标文件名’);

  重命名文件rename()

G、文件的读写操作

    File_get_contents()  获取内容

    File_put_contents()  写入内容

    File()会将获得的文件所有的数据将每一行放到一个数组元素中         

    fopen()  返回值为资源

    feof()  判断文件指针是否到了文件末尾

    fread(“指针”,长度)  读取文件内容

    fwrite()  写入文件

    fclose() 关闭文件资源

    fgetc()  一次读取一个字符

    fgets()  一次读取一行字符

   I、文件的处理:

保存数据:

当PHP脚本文件执行完毕,里面所有的变量都会被释放,有些重要的数据可以保存到数据库中,也可以保存到文件中(电脑的硬盘中)

缓存文件:

访问一个网站的速度:从数据库获得数据,在前台页面显示速度最低---->缓存文件

从数据库获取 < 缓存文件 < 内存缓存 < CPU(电脑的硬件中)

   K、文件内部移动指针

     ftell()  返回当前文件指针的位置

     fseek()  在文件指针中定位 

     fseek($file,15,SEEK_CUR); 设定位置为当前位置加上 offset

     rewind($fil;e)  回到文件头部

四、目录相关函数

 mkdir — 新建目录

bool mkdir ( string $pathname [, int $mode [, bool $recursive [, resource $context ]]] )

rmdir — 删除目录

bool rmdir ( string $dirname )

 

scandir — 列出指定路径中的文件和目录

array scandir ( string $directory [, int $sorting_order [, resource $context ]] )

默认的排序顺序是按字母升序排列。如果使用了可选参数 sorting_order(设为 1),则排序顺序是按字母降序排列。 

 

getcwd — 取得当前工作目录

string getcwd ( void )

学习总结:

 一、正则表达式匹配天气预报

   //抓取内容

   $arr=file_get_contents("http://www.weather.com.cn/html/weather/101090201.shtml");

   //正则表达

   $arr = preg_replace('/[\r|\n]/','', $arr);

   $pattern="/<div\sclass=\"weatherYubaoBox\">.*<\/div>/imU";//

   //进行正则表达式匹配

   preg_match($pattern,$arr,$match);

   echo "<pre>";

   print_r($match);

   echo "</pre>";

二、单引号、双引号区别:

1. 双引号解析变量

2. 单引号里面 不能直接输出转义字符

$str = "hello\nworld";

3. 单引号里面只能转义单引号;双引号里面只能转义双引号

\n ----代表换行;在Linux/Unix 操作系统下,换行的意思;在windows操作系统下,只是一个空白

三、PHP正则表达式中() 的使用

1. 改变优先级

<?php

$str = "catdog";

//()会将里面的作为一个整体

//由于| 优先级比较低,匹配的是cat  dog而不是 t|d

$pattern = "/ca(t|d)og/";

preg_match($pattern,$str,$match);

var_dump($match);

2. 作为子模式存在

<?php

//()作为子模式使用

$str = "helloaaaaahhsdfssasssss";

//将连续出现5次的字母提取出来

$pattern = "/\w{5}/"; //字母数字下划线 \w(a-zA-Z)0-9_ \d \s \b \f

$pattern = "/(\w)\\1{4}/";//反向引用  在正则表达式中使用前面的匹配的子模式,使用第一个子模式 \1  使用第二个子模式 \2 以此类推

preg_match($pattern,$str,$match);

var_dump($match);

四、正则表达式相关的函数:

Preg_match()--------正则表达式匹配

Preg_match_all()----全局匹配(将所有符合规则的都匹配到)

<?php

$date = "today is 10:39 2013-10-14,tomorrow is 10:39 2013-10-15, houtian is 10:39 

    2013-10-16";

$pattern = "/\d{2}\W\d{2}\s\d{4}\W\d{2}\W\d{2}/";

preg_match($pattern,$date,$match);

echo '<pre>';

print_r($match);

echo '</pre>';

echo '<br/>';

preg_match_all($pattern,$date,$match);

echo '<pre>';

print_r($match);

echo '</pre>';

Preg_grep() 返回符合规则的数组元素(单元)过滤数组元素

<?php

$arr = array('New York','London','Beijing','Tokyo');

$pattern = "/^\w\S*\w$/";

//会依次将数组的元素和正则表达式匹配,匹配到的结果会保存到一个新的变量中

$new_arr = preg_grep($pattern,$arr);

echo '<pre>';

var_dump($new_arr);

echo '</pre>';

Preg_quote()  转义正则表达式字符

<?php

//转义正则表达式字符/符号

$str = "^he\$llo $ \nworld$";

$new_str = preg_quote($str);

print_r($new_str);

Preg_split()  通过正则表达式拆分字符串

<?php

//拆分字符串

$str = "stay hungry,stay foolish!stay here";

$pattern = "/[\s,!:?]/";//[] 表示里面范围的任何一个

$new_arr = preg_split($pattern,$str); //会根据正则来将字符串拆分成一个数组

print_r(array_count_values($new_arr));

echo '<br/>';

echo count($new_arr);

echo '<br/>';

print_r($new_arr);

Preg_replace()   通过正则表达式 替换字符串

<?php

//正则表达式替换

$str = "October 14,2013";

$pattern = "/(\w+\s\d{2})\W(\d{4})/";  //反向引用 \1 第一个子模式 \2第二个子模式 ....

$replacement = "$1(hello),$2(year)";  //在其他地方怎么引用子集  $1引用第一个子集 $2 第二个子集...

$new_str = preg_replace($pattern,$replacement,$str);

//参数1,正则,参数2,替换目标,参数3,在那个字符串中进行替换

print_r($new_str);

五、抓取某网站所有的图片

?: 取消子模式

<?php

$content = file_get_contents('http://www.csdn.net/');

$pattern="/<[img|IMG].*?src=[\'|\"].*(?:[\.gif|\.jpg|\.png])[\'|\"].*?\/?>/";

preg_match_all($pattern,$content,$matches);

echo '<pre>';

print_r($matches);

echo '</pre>';

六、综合练习,文件类型、文件属性:

  <?php

date_default_timezone_set("PRC");

function checkFileType($filename){

if(file_exists($filename)){

if(is_dir($filename)){

echo "这是一个目录".'<br/>';

}

if(is_file($filename)){

echo "这是一个文件".'<br/>';

echo "文件的大小是:".getFileSize(filesize($filename)).'<br/>';

}

if(is_readable($filename)){

echo "这个文件可读".'<br/>';

}

if(is_writable($filename)){

echo "这个文件可写".'<br/>';

}

if(is_executable($filename)){

echo "这个文件可执行".'<br/>';

}

echo "这个文件创建时间:".date('Y-m-d H:i:s',filectime($filename)).'<br/>';

echo "这个文件修改时间:".date('Y-m-d H:i:s',filemtime($filename)).'<br/>';

echo "这个文件最后被访问的时间:".date('Y-m-d H:i:s',fileatime($filename)).'<br/>';

}

}

function getFileSize($filesize){

if($filesize>=pow(2,40)){

$danwei = "TB";

$size = round($filesize/pow(2,40),2);

}else if($filesize>=pow(2,30)){

$danwei = "GB";

$size = round($filesize/pow(2,30),2);

}else if($filesize>=pow(2,20)){

$danwei = "MB";

$size = round($filesize/pow(2,20),2);

}else if($filesize>=pow(2,10)){

$danwei = "KB";

$size = round($filesize/pow(2,10),2);

}else{

$danwei = "Byte";

$size = $filesize;

}

return $size.$danwei;

}

checkFileType("test.txt");

七、递归删除一个目录将一个目录中所有的子目录以及文件都删除

   $dirname = "test";

   deleteDir($dirname);

   function deleteDir($dir){

  //如果文件/目录存在

     if(file_exists($dir)){

         if(is_file($dir)){

echo "这是一个文件,我不删除";

exit;

         }else{

//这是一个目录

//先打开这个目录

$resorce = opendir($dir);

while($file = readdir($resorce)){

if($file!='.' && $file!= '..'){

$filename = $dir.'/'.$file;

if(is_dir($filename)){

//再去递归的打开、删除

deleteDir($filename);

}else{

//文件可以直接删除

unlink($filename);

  echo "删除文件{$file}成功<br/>";

}

}

           }

        }

      closedir($resorce);  //先关闭资源、再删除文件

      rmdir($dir);

      echo "删除目录成功<br/>";

    }

}

八、经典递归案例

    <?php

//阶乘(递归)

/*

5=5*4

4=4*3

3=3*2!

2=2*1

1=1

*/

function jc($num){

if($num==1){

return 1;

}else{

return $num*jc($num-1);

}

 }

 jc(3);

/*

*序列:1 1 2 3 5 8 13 21。。。。。

*位置:1 2 3 4 5 6 7 8 9。。。。。

*/

function shu($num){

if($num==1||$num==2){

return 1;

}else{

return (shu($num-1)+shu($num-2));

}

}

echo shu(5);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值