前言

收集了几个在文件上传利用中常见的函数。
对这些函数的深入理解应该有助于文件上传利用的顺利进行。

索引

1. deldot
2. in_array
3. intval
4. strrchr
5. strtolower
6. strrpos
7. str_ireplace
8. strstr
9. substr
10. trim

常见函数

1. deldot

deldot函数为upload-lab中一个常见的函数,它实际为一个自定义函数,定义于common.php中,函数定义如下:

function deldot($s){for($i = strlen($s)-1;$i>0;$i--){$c = substr($s,$i,1);if($i == strlen($s)-1 and $c != '.'){return $s;}if($c != '.'){return substr($s,0,$i+1);}}
}

即从字符串的尾部开始,从后向前删除点.,直到该字符串的末尾字符不是.为止。
因此对于如下输入,

echo deldot("hello world")."\n";
echo deldot("hello world.")."\n";
echo deldot("hello world....")."\n";
echo deldot("hello.world.")."\n";

输出为

hello world
hello world
hello world
hello.world

2. in_array

in_array(mixed $needle, array $haystack, bool $strict = false): bool

其中第一个参数$needle为待搜索的值,$haystack为被搜索的数组,第三个参数决定是否进行类型比较。

第三个类型默认为false,即不考虑类型是否相同。
对于如下输入:

if(in_array("AAA",$arr,false)) echo 1;
if(in_array("aaa",$arr,false)) echo 2;
if(in_array("AAA",$arr,true)) echo 3;
if(in_array("aaa",$arr,true)) echo 4;

输出

13

3. intval

intval(mixed $value, int $base = 10): int

intval 函数用于获取变量的整数值。

第一个参数$value为要获取整数值的变量,可以为字符串、数值和数组。
第二个参数$base指定了转换所使用的进制,当且仅当要转换的变量为字符串时有效。

当第二个参数为0时,会检测变量的格式来决定使用的转换进制。

intval函数返回的数值为一个int类型的数值。当转换不成功时,返回0。

特别要注意,使用该函数返回的值有上限。当转换的数值大于php的整数范围时,返回的结果为整型数值的取值上限。

echo intval("111");
echo "\n";
echo intval("111a");
echo "\n";
echo intval("0x333");
echo "\n";
echo intval("888",8);
echo "\n";
echo intval("122",3);
echo "\n";
echo intval("11111111111111111111111111111111111");
echo "\n";
echo intval("2222222222222222222222222222222");

输出为

111
111
0
0
17
9223372036854775807
9223372036854775807

4. strrchr

strrchr(string $haystack, mixed $needle): string

strrchr函数在字符串$haystack中查找$needle,并将最后一次查找到的$needle及其后面的字符串返回。如果没有在该字符串中查找到$needle,则返回false

注:

$S = "hhhahahaha2333";
echo strrchr($S,'h')."\n";
echo strrchr($S,'hwweraer')."\n";
echo strrchr($S,104)."\n";
if(strrchr($S,'k') == false) echo "false";

ha2333
ha2333
ha2333
false

5. strtolower

strtolower(string $string): string

将字符串$string中的各个英文字符转换为小写并返回。

$S = "HaHaHaHa,Hello!!";
echo strtolower($S);

hahahaha,hello!!

6. strrpos

strrpos(string $haystack, string $needle, int $offset = 0): int

返回字符$needle最后一次出现的位置。
在php4中,$needle只能为单个字符。如果$needle中存在多个字符,仅使用第一个字符做匹配。
strrchr相似,如果$needle是一个数值,则使用该数值对应的ASCII码字符进行匹配。
从php5开始,$needle可以为多个字符。
从php5开始,strrpos新增一个参数$offset,可以指定从$haystack的哪儿位置开始进行匹配。

返回匹配的下标位置,没有匹配到时返回false

注意:

$s = "Phpphphpphpp";
echo strrpos($s,"php");
echo strrpos($s,"h");
echo strrpos($s,"P");
if(strrpos($s,"PHP") === false) echo "No exist";

输出:

890No exist

注:测试使用的PHP版本为5.3.3。
在PHP4中结果可能不一样。

7. str_ireplace

str_ireplace(mixed $search,mixed $replace,mixed $subject,int &$count = ?
): mixed

str_ireplace函数用于对数组中的元素或字符串中的子串进行替换。

第一个参数$search为需要替换的内容(子串或数组),第二个参数$replace为替换成的内容(字符串或数组),第三个参数$subject为被替换的字符串。

$count可以用于限定替换次数。

注:

<?php
echo str_ireplace("php","","hello.php")."\n";
echo str_ireplace("pHP","","hello.Php")."\n";
echo str_ireplace("php","","hello.phPHpp")."\n";
echo str_ireplace("php","p","hello.phphp")."\n";
echo str_ireplace("php",""."phpphpphpphpphp.php",3)."\n";
echo str_ireplace(array("php","html"),"","hello.php.html")."\n";
echo str_ireplace(array("php","html"),array("1","2"),"hello.php.html")."\n";
echo str_ireplace(array("php","html","css"),array("1","2"),"hello.php.css.html")."\n";
echo str_ireplace(array("php","html","css"),"1","hello.php.css.html")."\n";
foreach (str_ireplace(array("php","html","css"),array("1","2","3"),array("hello.html","hello.css","hello.html")) as $it){echo "$it ";
}
?>

hello.
hello.
hello.Hpp
hello.php
3
hello…
hello.1.2
hello.1…2
hello.1.1.1
hello.2 hello.3 hello.2

8. strstr

strstr(string $haystack, mixed $needle, bool $before_needle = false): string

查找字符串$needle$haystack中首次出现的位置,并将$needle及其之后的字符串返回。

PHP5起新增第三个参数$before_needle,如果$before_needle取值为true,则返回$needle前面的部分。

$s = "123phpphp.php";
echo strstr($s,"php")."\n";
echo strstr($s,"php",true)."\n";

phpphp.php
123

9. substr

substr(string $string, int $offset, ?int $length = null): string

返回字符串$string中的子串。

$offset指定子串首个字符在$string中的下标位置,$length指定截取的子串长度。

$length的取值:

$s = "123456789";
echo substr($s,1,3)."\n";
echo substr($s,1,-1)."\n";
echo substr($s,1)."\n";
echo substr($s,1,0)."\n";

234
2345678
23456789

10. trim

trim(string $str, string $character_mask = " \t\n\r\0\x0B"): string

去除字符串$str的首尾的空白字符。
当第二个参数保持默认时,去除的字符为:

$s = "\n   1   23456789\t\n123456789\r";
echo trim($s);

1 23456789
123456789


参考资料

PHP官方

注意:本文只做技术分享,请勿用于非法用途,否则后果作者概不负责。

原创不易,感谢支持。

[PHP]文件上传利用的常见函数相关推荐

  1. Asp.net(C#)利用File Field多文件上传

    Asp.net(C#)利用File Field多文件上传 利用js添加隐藏File Field控件的方法实现多文件上传,除了一定要为form添加encType="multipart/form ...

  2. 文件上传与下载的场景梳理

    文件上传 单文件与多文件上传 利用 input 元素的 accept 属性限制上传文件的类型.比如使用 image/* 限制只能选择图片文件: 同时,为了防止修改文件后缀绕过限制,需要利用 JS 读取 ...

  3. java+ajax实现文件上传

    1 文件上传 利用Java+ajax实现文件上传,这里介绍两种提交方法,第一种是file提交,第二种是base64提交 1.1 file方式 1.1.1 FileNameUtils public cl ...

  4. 大神论坛 UEditor 富文本web编辑器最新漏洞版XML文件上传导致存储型XSS

    一.Ueditor最新版XML文件上传导致存储型XSS 测试版本:php版 v1.4.3.3 下载地址:https://github.com/fex-team/ueditor 复现步骤: 1. 上传一 ...

  5. 利用MultipartFile实现文件上传

    利用MultipartFile实现文件上传 在java中上传文件似乎总有点麻烦,没.net那么简单,记得最开始的时候用smartUpload实现文件上传,最近在工作中使用spring的Multipar ...

  6. html5 txt文件上传,JavaScript html5利用FileReader实现上传功能

    本文实例为大家分享了H5利用FileReader上传文件的具体代码,供大家参考,具体内容如下 1. Html部分 文件上传演练 Browse... 2. JS部分 var result = docum ...

  7. 利用layui前端框架实现对不同文件夹的多文件上传

    利用layui前端框架实现对不同文件夹的多文件上传 问题场景: 普通的input标签实现多文件上传时,只能对同一个文件夹下的多个文件进行上传,如果要同时上传两个或多个文件夹下的文件,是无法实现的.这篇 ...

  8. php利用ajax文件上传,如何在PHP中利用AjaxForm实现一个文件上传功能

    如何在PHP中利用AjaxForm实现一个文件上传功能 发布时间:2020-12-18 14:52:38 来源:亿速云 阅读:94 作者:Leah 如何在PHP中利用AjaxForm实现一个文件上传功 ...

  9. 文件上传之二利用frame实现无页面刷新的文件上传

    在上一篇文章中是将文件随表单中其他数据一起提交的,这样在提交一个表单时需要较长的时间,用户体验不是很好.一般网站选择将文件与表单的其他数据分开而单独上传.本文介绍如何利用iframe标签将上传文件模块 ...

最新文章

  1. SD--关于销售环节的折扣、折让、回扣、佣金的介绍
  2. 项目总结(3.DIBR技术项目总结(1.TOF相机及标定相关))
  3. java实现c#的datetime.ticks_java的Date.getTime()转换成C#的Datetime.ticks | 学步园
  4. C语言怎么合并两个有序链表
  5. MySQL存储引擎及InnoDB并发控制介绍
  6. 【Angular 4】组件生命周期钩子
  7. python代码运行顺序_python 代码运行顺序问题?
  8. OpenStack-Icehouse(nova-network)多节点基础环境部署
  9. oracle sqlplus执行脚本_oracle主、从自动切换方案?我是这样实现的
  10. CentOS 7.X配置连接网络
  11. 计算机英语videos啥意思,video是什么意思_video翻译_读音_用法_翻译
  12. id nfc模拟_NFC手机伪造门禁卡和模拟门禁卡教程
  13. python arp_Python中的Scapy初探之三-ARP中毒
  14. Wi-Fi 7全新升级,小米蓄势待发!
  15. 8.mysql备份恢复
  16. 华为云服务器使用之搭建极简服务器
  17. raw socket (DELPHI开发平台)
  18. rabbitmq direct reply-to 在springAMQP和python之间的使用
  19. 优秀是一种习惯:说一说你身边在世界名校读书的人
  20. 微图中的高程DEM数据说明

热门文章

  1. 解决视频播放器在线视频显示绿屏
  2. Mathtype试用期延长方法分享
  3. QQ农场等级快速升级秘诀
  4. shell脚本中的一些特殊符号
  5. windows任务管理器窗口无菜单栏
  6. 【Unity3d】C#使用XmlDocument读写xml冒号节点问题
  7. introduce to local variable总是有declare final
  8. 诗情画意谈设计(原创教程)
  9. 如何做好企业战略管理?战略管理好书推荐
  10. java开发微信上传永久视频素材接口开发