二、PHP函数

一、PHP函数

1.基本函数

  1. 创建数组:array(1,2,3)
  2. 数字或数字字符串检测:is_numeric检测变量是否为数字或数字字符串
php 复制代码
$input = array('2',2,3);
echo is_numeric($input[0]);

// 注意16进制的内容 如何0x12,is_numeric返回false,即不认为其是数字或数字字符
// 结果:1
  1. 生成随机数:echo rand(1,5);表示生成1-5范围内一个随机的数字

  2. 脚本睡眠:sleep(2)表示当前脚本睡眠2秒

  3. 检查变量是否已设置并且不为NULL:echo isset($input);

  4. 输出一条结束消息同时退出脚本:die('end...000');

  5. md5加解密:$name = md5('QNKCDZO');

    php 复制代码
    // 特殊情况:md5相等,但两值不相等的情况
    //解释:md5相等不是真的相等而是,例如下面240610708被md5加密,开头字符0e代表科学计算法,如果用==去比较,==将会进行自动类型转换,将其转换为0*10的462097431906509019562988736854次方=0
    QNKCDZO
    240610708 = 0e462097431906509019562988736854
    s878926199a
    s155964671a
    s214587387a
  6. 函数特点:当传输参数不符那个函数的返回值就会为NULL

2.正则函数

  1. 正则匹配函数:preg_match(pattern,content,result)pattern表示匹配规则,content表示需要进行正则匹配的内容,result是匹配结果(数组)

    php 复制代码
    // 注意点:"/world/i"这个i表示大写WORLD或小写world都会匹配,如果没有i就是精确匹配(比如黑名单里面有select(即服务端会去匹配用户输入是否包含select)我就可以通过SELECT绕过)
    if (preg_match("/world/i", "Hello World!", $matches)) {
        echo "找到匹配项!";
        print_r($matches);
    } else {
        echo "未找到匹配项!";
    }
  2. 过滤和替换:$out=preg_filter(pattern,content,str)pattern表示匹配规则,content表示将匹配到的内容的位置替换为何内容,str表示对哪个字符串变量进行正则替换操作,过滤后的内容会赋值给$out

    php 复制代码
    //下面的例子演示了preg_filter的语法,也展现了,写两遍()避免被过滤达到执行代码的效果
    $str='echo getcwd(());';
    $pattern = '/\(\)/';
    $replacement = '';
    echo $str;//echo getcwd(());
    echo '*';
    $out = preg_filter($pattern, $replacement,$str);
    echo $out;//echo getcwd();
    echo '**';
    echo eval($out);//C:\phpstorm\test

3.字符串

  1. 截取:mb_substr(字符串,开始位置,长度)

    php 复制代码
    $str = "Hello, World!";
    $substr = mb_substr($str, 0, 5);
    echo $substr; // 输出:Hello
  2. 字符串位置:mb_strpos(字符串,需要寻找的字符,开始的位置)

    php 复制代码
    $str = "Hello, Hello, World!";
    $position = mb_strpos($str, "Hwello", 7);
    echo $position; // 输出:13 找不到返回false
    1. strpos():查找字符串在另一字符串中第一次出现的位置(区分大小写,汉字占两个位置)

      php 复制代码
      //安全问题
      //解释:下面的内容heo在hello第一次出现的位置是0,就会导致0==false
      <?php
      $str1 = "hello";
      $str2 = "heo";
      if(strpos($str1,$str2)==false)
      {
      	echo "flag";
      }
      ?>
  3. 替换:str_replace(需要替换的内容,替换为的内容,字符串)(区分大小写)

    php 复制代码
    //安全问题:可以通过双写或者大小写进行绕过如下例子
    $str = "Hello, worworldld!";
    //$str = "hello, WORLD"; 因为区分大小写,这个WORLD并不会被替换
    $newStr = str_replace("world", "", $str);
    echo $newStr; // 输出:Hello, world!

4.过滤函数

  1. html过滤

    解释:htmlspecialchars($url)本质上是为了安全,其能将以下字符进行转码(单引号不会被转码),避免xss的发生,但是htmlspecialchars不是绝对安全,还要取决与上下代码环境,如下面例子

    1. & (和号)成为 &amp;
    2. " (双引号)成为 &quot;
    3. < (小于)成为 &lt;
    4. > (大于)成为 &gt;
    php 复制代码
    // 下面点击Link将弹出XSS
    $url = 'javascript:alert("XSS")';
    echo '<a href="' . htmlspecialchars($url) . '">Link</a>';
  2. HTML、XML 以及 PHP 的标签过滤

    解释:strip_tags(字符串,要保留的内容)剥去字符串中的 HTML、XML 以及 PHP 的标签,第二个参数是过滤时,不删除某标签,如下例所示

    php 复制代码
    $str = "<p>This is a <a href='https://example.com'>link</a> to a website.</p>";
    $clean_str = strip_tags($str,'<p>');
    echo $clean_str;//结果:<p>This is a link to a website.</p>
  3. 在预定义的字符前添加反斜杠

    解释:其会在\ " '前面加入反斜杠,避免通过引号闭合,造成问题

    php 复制代码
    $str = "It's a beautiful day!";
    $escapedStr = addslashes($str);
    echo $escapedStr;//It\'s a beautiful day!
    //在上述示例中,原始字符串是 "It's a beautiful day!"。调用 addslashes 函数后,单引号被转义为 \',从而避免将其解释为字符串的结束标记

5.文件有关函数

  1. include:使用 include,你可以将包含其他 PHP 文件的代码插入到主文件中,从而在执行期间将这些文件和主文件合并为一个整体(多次引用会多次执行)

    a文件

    php 复制代码
    <?php
        $flag=123;
    ?>

    b文件

    php 复制代码
    <?php
    include 'a.php';
    echo $flag;//123
    ?>
  2. require:require 函数与 include 关键字类似,也用于将外部文件包含到当前文件中。但与 include 不同的是,当被包含的文件不存在或路径不正确时,require 会生成一个致命错误,并终止脚本的执行(多次引用也只会引用一次)

  3. highlight_file:让代码高亮显示,highlight_file(要显示的文件,返回值)

    php 复制代码
    <?php
        $filename = "myfile.php";
        $highlightedCode = highlight_file($filename, true);
        echo $highlightedCode;
    ?>
  4. file_get_contents:把整个文件读入一个字符串

    php 复制代码
    $filename = "a.txt";
    $content = file_get_contents($filename);
    echo $content;// a.txt的内容
  5. file:把整个文件读入一个数组,数组中的每个单元都是文件中相应的一行

    php 复制代码
    $filename = "a.txt";
    $content = file($filename);
    echo $content;
    print_r($content);
相关推荐
非著名架构师1 分钟前
js混淆的方式方法
开发语言·javascript·ecmascript
Themberfue2 分钟前
基础算法之双指针--Java实现(下)--LeetCode题解:有效三角形的个数-查找总价格为目标值的两个商品-三数之和-四数之和
java·开发语言·学习·算法·leetcode·双指针
深山夕照深秋雨mo11 分钟前
在Java中操作Redis
java·开发语言·redis
barbyQAQ29 分钟前
Qt源码阅读——事件循环
开发语言·数据库·qt
记得开心一点嘛30 分钟前
在Java项目中如何使用Scala实现尾递归优化来解决爆栈问题
开发语言·后端·scala
敏编程1 小时前
网页前端开发之Javascript入门篇(5/9):函数
开发语言·javascript
柏箱1 小时前
PHP基本语法总结
开发语言·前端·html·php
进阶的架构师1 小时前
互联网Java工程师面试题及答案整理(2024年最新版)
java·开发语言
易辰君1 小时前
python爬虫 - 深入requests模块
开发语言·爬虫·python
木子02041 小时前
java高并发场景RabbitMQ的使用
java·开发语言