php中字符串匹配KMP算法实现例子
kmp算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是根据给定的模式串W1,m,定义一个next函数。next函数包含了模式串本身局部匹配的信息
例子
代码如下 | 复制代码 |
<?php 字符串匹配KMP算法的PHP语言实现 */ function KMP($str) { function KMPMatch($src, $par) { if ($j == $parLen) return $i-$j; echo $i." ".$j. " {$src[$i]}-{$par[$j]} <BR>"; $j++; $src = 'BBC ABCDAB ABCDABCDABDE'; echo "部分匹配值:", implode(" ", KMP($par)), "<BR>"; echo KMPMatch($src, $par), "<BR>"; 部分匹配值:0 0 0 0 1 2 0 0 0 B-A 1 0 B-A 2 0 C-A 3 0 -A 4 0 A-A 5 1 B-B 6 2 C-C 7 3 D-D 8 4 A-A 9 5 B-B 10 6 -D 10 2 -C 10 0 -A 11 0 A-A 12 1 B-B 13 2 C-C 14 3 D-D 15 4 A-A 16 5 B-B 17 6 C-D 17 2 C-C 18 3 D-D 19 4 A-A 20 5 B-B 21 6 D-D 15 */ |
使用label的for属性来取代js的event转移,解决IE下“SCRIPT5: 拒绝访问”的问题;
html代码
代码如下 | 复制代码 |
<!DOCTYPE HTML> |
php处理程序
代码如下 | 复制代码 |
<?php |
简单总结:这个其实很简单在表单中我们action设置为上传php的模板文件,然后我们再在表单target 打开方式设置为iframe的name即可。
PHP GD中有大量的图片处理函数,我们可以利用PHP GD来生成各种图片了,下面一聚教程小编来给大家介绍一个PHP GD生成图像的例子。使用GD库中提供的函数动态绘制完成图像以后,就需要输出到浏览器或者将图像保存起来。在PHP中,可以将动态绘制完成的画布,直接生成GIF、JPEG、PNG和WBMP四种图像格式。可以通过调用下面四个函数生成这些格式的图像:
bool imagegif(resource $image[,string $filename]) //以GIF格式将图像输出
bool imagejpeg(resource $image[,string $filename[,int $quality]]) //以JPEG格式将图像输出
bool imagepng(resource $image[,string $filename]) //以PNG格式将图像输出
bool imagewbmp(resource $image[,string $filename[,int $foreground]]) //以WBMP格式将图像输出
以上四个函数的使用类似,前两个参数的使用是相同的。第一个参数$image为必选项,是前面介绍的图像引用句柄。如果部位这些函数提供其他参数,访问时则直接将原图像流出,并在浏览器使用中显示动态输出的图像。但一定要在输出之前,使用header()函数发送标头信息,用来通知浏览器使用正确的MIME类型对接收的内容进行解析,让它知道我们发送的是图片而不似乎文本的HTML。以下代码段通过自动检测GD库支持的图像类型,来写出移植性更好的
PHP程序。如下所示:
代码如下 | 复制代码 |
<?php if(function_exists("imagegif")){ //判断生成GIF格式图像的函数是否存在 header("Content-type:image/gif"); //发送标头信息设置MIME类型为image/gif imagegif($im); //以GIF格式将图像输出到浏览器 }elseif(function_exists("imageipeg")){ header("Content-type:image/jpeg"); imagejpeg($im,"",0.5); }elseif(function_exists("imagepng")){ header("Content-type:image/png"); imagepng($im); }elseif(function_exists("imagewbmp")){ header("Content-type:image/wbmp"); imagewbmp($im); }else{ die("在PHP服务器中,不支持图像"); } ?> |
如果希望将PHP动态绘制的图像保存在本地服务器上,则必须在第二个可选参数中指定一个文件名字符串。这样不仅不会将图像直接输出到浏览器,也不需要使用header()函数发送标头信息。如果使用imageJPEG()函数生成JPEG格式的图像,还可以通过第三个可选参数$quality指定JPEG格式图像的品质,该参数可以提供的值是从0(最差品质,但文件最小)到100(最高品质,文件也最大)的整数,默认值为75.也可以为函数imageWBMP()提供第三个可选参数$forground,指定图像的前景颜色,默认颜色值为黑色。
注意:php中gd库默认是未开启的,我们需要在php.ini中打开才可以,具体步骤
Linux下开启PHP的GD库支持
代码如下 | 复制代码 |
#开启GD库支持有以下几种方法 ##检测GD库是否安装命令 php5 -m | grep -i gd 或者 php -i | grep -i --color gd ##如未安装GD库,则为服务器安装,方法如下 ### 如果是源码安装,则加入参数 --with-gd ### 如果是debian系的linux系统,用apt-get安装,如下 apt-get install php5-gd ### 如果是CentOS系的系统,用yum安装,如下 yum install php-gd ### 如果是suse系的linux系统,用yast安装,如下 yast -i php5_gd ### 如果嫌这个世界不够蛋疼呢,可以在原先编译PHP不支持GD的情况下附加 |
先下zlib源码,libpng源码,gd源码
解压后到源码目录
代码如下 | 复制代码 |
zlib目录 ./configure --prefix=/usr/local/zlib make ; make install make clean libpng目录 cp scripts/makefile.linux ./makefile ./configure --prefix=/usr/local/libpng make ; make install make clean gd目录 ./configure --prefix=/usr/local/libgd --with-png=/usr/local/libpng make ; make install make clean |
最后在php.ini中,搜到[gd]后,在下面加一行
代码如下 | 复制代码 |
extension=/usr/local/libgdgd.so |
然后重启php服务,如果不行,试试reboot
好了,不过最后提醒一下,要知道这个世界很多意外的,源码安装,只添加gd库这一个情况下,PHP版本和库的版本各异,所以:
- 不保证这么付出了这么多后有回报
- 不保证能够成功加载gd.so
- 不保证不怀孕
所以如果是源码安装,最好还是在编译PHP的时候加参数--with-gd
Windows下开启PHP的GD库支持
找到php.ini,打开内容,找到:
;extension=php_gd2.dll
把最前面的分号“;”去掉,再保存即可,如果本来就没有分号,那就是已经开启了。
php实现文件下载我们需要用到header函数来发送相关信息给客户端浏览器,同时再结合filesize函数来读取文件大小并进行下载操作,下面我们一起来看看相关例子。简单的文件下载只需要使用HTML的连接标记<a>,并将属性href的URL值指定为下载的文件即可。代码如下所示:
代码如下 | 复制代码 |
<a href=”http://www.111cn.net /download/book.rar”>下载文件</a> |
如果通过上面的代码实现文件下载,只能处理一些浏览器不能默认识别的MIME类型文件,例如当访问book.rar文件时,浏览器并没有直接打开,而是弹出一个下载提示框,提示用户“下载”还是“打开”等处理方式。但如果需要下载后缀名为.html的网页文件、图片文件及PHP程序脚本文件等,使用这种连接形式,则会将文件内容直接输出到浏览器中,并不会提示用户下载。
为了提高文件的安全性,不希望在<a>标签中给出文件的链接,则必须向浏览器发送必要的头信息,以通知浏览器将要进行下载文件的处理。PHP使用header()函数发送网页的头部信息给浏览器,该函数接收一个头信息的字符串作为参数。文件下载需要发送的头信息包括以下三部分,通过调用三次header()函数完成。以下载图片test.gif为例,需要发送的头信息的代码如下所示:
代码如下 | 复制代码 |
header(‘Content-Type:imge/gif’); //发送指定文件MIME类型的头信息 |
如果使用header()函数向浏览器发送了这三行头信息,图片test.gif就不会直接在浏览器中显示,而让浏览器将该文件形成下载的形式。在函数header()中,“Content-Type”指定了文件的MIME类型,“Content_Disposition”用于文件的描述,值“attachment; filename=”test.gif””说明这是一个附件,并且指定了下载后的文件名,“Content_Length”则给出了被下载文件的大小。
设置完头部信息以后,需要将文件的内容输出到浏览器,以便进行下载。可以使用PHP中的文件系统函数将文件内容读取出来后,直接输出给浏览器。最方便的是使用readfile()函数,将文件内容读取出来直接输出。下载文件test.gif的代码如下所示:
代码如下 | 复制代码 |
<?php $filename = "test.gif"; header('Content-Type:image/gif'); //指定下载文件类型 header('Content-Disposition: attachment; filename="'.$filename.'"'); //指定下载文件的描述 header('Content-Length:'.filesize($filename)); //指定下载文件的大小 //将文件内容读取出来并直接输出,以便下载 readfile($filename); ?> |
上面如果碰到中文名字就会无法正常下载了,对于中文名字下载文件我又找到一个文件下载实例代码
代码如下 | 复制代码 |
<?php |
header("Content-type:text/html;charset=utf-8")的作用:在服务器响应浏览器的请求时,告诉浏览器以编码格式为UTF-8的编码显示该内容
关于file_exists()函数不支持中文路径的问题:因为php函数比较早,不支持中文,所以如果被下载的文件名是中文的话,需要对其进行字符编码转换,否则file_exists()函数不能识别,可以使用iconv()函数进行编码转换
$file_sub_path() 我使用的是绝对路径,执行效率要比相对路径高
Header("Content-type: application/octet-stream")的作用:通过这句代码客户端浏览器就能知道服务端返回的文件形式
Header("Accept-Ranges: bytes")的作用:告诉客户端浏览器返回的文件大小是按照字节进行计算的
Header("Accept-Length:".$file_size)的作用:告诉浏览器返回的文件大小
Header("Content-Disposition: attachment; filename=".$file_name)的作用:告诉浏览器返回的文件的名称
以上四个Header()是必需的
fclose($fp)可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区
下面是四道比较常见的题目,主要考察的是对字符串函数以及文件操作相关函数的掌握程度。
1、PHP翻转中文字符串
代码如下 | 复制代码 |
|
2、PHP计算URL的文件后缀名
代码如下 | 复制代码 |
function getext($url){ |
3、PHP计算两个文件的相对路径
代码如下 | 复制代码 |
function getrpath($path, $conpath){ |
4、PHP遍历目录下的所有文件和文件夹
代码如下 | 复制代码 |
function finddir($dir){ $files = array(); if(is_dir($dir)){ if($handle = opendir($dir)){ while(($file = readdir($handle)) !== false){ if($file != '.' && $file != '..'){ if(is_dir(rtrim($dir, '/').'/'.$file)){ $files[$file] = finddir(rtrim($dir, '/').'/'.$file); }else{ $files[] = rtrim($dir, '/').'/'.$file; } } } closedir($handle); } } return $files; } print_r(finddir('F:/Golang/src')); //结果: Array ( [0] => F:/Golang/src/hello.go [1] => F:/Golang/src/src.exe [test] => Array ( [0] => F:/Golang/src/test/sss.txt ) ) |
除了这些字符串、文件操作的基本函数考察外,基础算法也是面试中考察比较多的,具体请看以前总结的关于PHP基础算法的文章
下面分享一些最常见的算法,用PHP如何实现。
1、冒泡排序
代码如下 | 复制代码 |
function bubble_sort($arr) { |
2、归并排序
代码如下 | 复制代码 |
function Merge(&$arr, $left, $mid, $right) { |
3、二分查找-递归
代码如下 | 复制代码 |
function bin_search($arr,$low,$high,$value) { |
4、二分查找-非递归
代码如下 | 复制代码 |
function bin_search($arr,$low,$high,$value) { while($low<=$high) { $mid=floor(($low+$high)/2); if($value==$arr[$mid]) return $mid; elseif($value<$arr[$mid]) $high=$mid-1; else $low=$mid+1; } return false; } |
5、快速排序
代码如下 | 复制代码 |
function quick_sort($arr) { |
6、选择排序
代码如下 | 复制代码 |
function select_sort($arr) { |
7、插入排序
代码如下 | 复制代码 |
function insertSort($arr) { |
当然还会有更多其它的像数据库操作或一些基本的函数使用例子,在此我们就不写了大家可在本地相关文章处找
相关文章
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
- 作者:Sabine 【导读】本文介绍了C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序 冒泡排序 using System; namespace BubbleSorter { public class Bubb...2020-06-25
- php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
- 这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
- 本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
- 本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
- 这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
- 这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
- 这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
- JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
jQuery+slidereveal实现的面板滑动侧边展出效果
我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15- 翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
- 这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
SQLMAP结合Meterpreter实现注入渗透返回shell
sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25- 文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
- 这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25