PHP文件上传利用的常见函数总结大全

 更新时间:2022年3月2日 15:19  点击:456 作者:wingaso

前言

收集了几个在文件上传利用中常见的函数。

对这些函数的深入理解应该有助于文件上传利用的顺利进行。

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时,会检测变量的格式来决定使用的转换进制。

  • 当存在前置的0x或0X时,使用16进制。
  • 当存在前置的0时,使用8进制。
  • 否则使用10进制。

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。

注:

  • 如果第二个参数不是不是单个字符,则只使用该字符串的第一个字符进行查找匹配。
  • 如果第二个参数是一个数值,则将该数值转换为对应的ASCII码进行匹配。

$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。

注意:

  • 因为返回值可能为零,所以在判断返回值是否为false的时候必须使用全等于符号===。
  • 该函数区分大小写。与该函数相似的函数有:
    • stripos:查找首个出现的位置,不区分大小写。
    • strpos:查找首个出现的位置,区分大小写。
    • strripos:查找最后一个出现的位置,不区分大小写。
    • 即出现“i”则为不区分大小写,出现"rr"则为查找最后一个。

$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为被替换的字符串。

  • 如果$search和$replace都为字符串,那么将会把$subject中匹配的子串$search替换为$replace。
  • 如果$search和$replace都为数组时,将会进行映射替换。如果$replace的值的个数少于 search 的个数,多余的替换将使用空字符串来进行。
  • 如果$search为数组而$replace为字符串,则对于$subject中出现的每一个search的元素,都会使用$replace做替换。

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

注:

  • 替换从左到右进行。
  • 该函数替换不区分字母大小写。(另外一个函数str_replace区分大小写)

<?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的取值:

  • $length为默认取值时,函数会将$offset至$length的字符串截取并返回。
  • $length取正数时,会从$offset开始将最多$length个字符截取返回出来。
  • $length取0时,返回一个空字符串。
  • $length取负数时,会将$offset至字符串$string倒数第$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的首尾的空白字符。

当第二个参数保持默认时,去除的字符为:

  • " " 空格
  • “\t” 制表符
  • “\n” 换行符
  • “\r” 回车符
  • “\0” 空字节符
  • “\x0B” 垂直制表符

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

1 23456789
123456789

附PHP 文件上传处理

  • $_FILES["file"]["name"] 客户端提交文件的原名称
  • $_FILES["file"]["type"] 浏览器提供的文件的 MIME 类型,如 gif 图片为 image/gif 。不过此类型在 PHP 端并不检查,因此不要想当然认为有这个值
  • $_FILES["file"]["size"] 已上传文件的大小,单位为字节
  • $_FILES["file"]["tmp_name"] 文件被上传后在服务端储存的临时文件名
  • $_FILES["file"]["error"] 和该文件上传相关的错误代码,为0则表示上传成功

参考资料

PHP官方

总结

到此这篇关于PHP文件上传利用的常见函数的文章就介绍到这了,更多相关PHP文件上传常见函数内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

原文出处:https://blog.csdn.net/qq_35630119/article/details/122642068

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • Php文件上传类class.upload.php用法示例

    本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • jQuery实现简单的文件上传进度条效果

    本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29