php中的几个执行函数以及assert()函数,正则匹配的反向引用

eval()
该函数是把字符串当作php代码执行,从它的功能来看可以感觉到这个函数会存在安全问题,任何一个字符串只要用了该函数,就可以被执行,所以不要随便用一个未经验证的数据通过该函数传入。
eval(string $code)
参数:
字符串中不可以包含’<?php 啥啥; ?>’(php tags),但对于正常的php代码的离开,进入,如’啥啥啥;?>n HTML mode!<?php啥啥啥;‘
传入的语句必须是符合php规范的语句,必须以分号结束,并且代码执行的作用域是调用 eval() 处的作用域,eval() 里任何的变量定义、修改,都会在函数结束后被保留。
返回值:
eval() 返回 NULL,除非在执行的代码中 return 了一个值(此时字符串的执行会立即停止),函数返回传递给 return 的值。 PHP 7 开始,执行的代码里如果有一个 parse error,eval() 会抛出 ParseError 异常。在 PHP 7 之前, 如果在执行的代码中有 parse error,eval() 返回 FALSE,之后的代码将正常执行。

system()
执行外部程序,并且输出执行的结果
如果 PHP 运行在服务器模块中, system() 函数还会尝试在每行输出完毕之后, 自动刷新 web 服务器的输出缓存。system ( string $command)
在命令参数command中如果提供 return_var 参数, 则外部命令执行后的返回状态将会被设置到此变量中。
成功则返回命令输出的最后一行, 失败则返回 FALSE

exec() 执行一个外部程序
在这里插入图片描述
参数:
执行参数command下的命令,若有output,则函数的每一个输出会作为该数组的一个元素,若数组中存在相同的元素,这个输出就会补充在数组最后,可以在传入exec函数之前用unset()重置数组。
command中的两个变量同时存在时, 命令执行后的返回状态会被写入return_var变量。

返回值为执行命令的最后一行内容。

passthru() 执行外部程序并且显示原始输出
在这里插入图片描述
如果提供 return_var 参数, Unix 命令的返回状态会被记录到此参数。

我觉得与前一个函数不同就在于该函数可以输出所有内容,不仅是最后一行,也就不需要为了显示输出的内容而增加如output参数。当所执行的 Unix 命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数来替代 exec() 或 system() 函数。
常用来执行诸如 pbmplus 之类的可以直接输出图像流的命令。 通过设置 Content-type 为 image/gif, 然后调用 pbmplus 程序输出 gif 文件, 就可以从 PHP 脚本中直接输出图像到浏览器。 (需要实际操作才能理解吧)

shell_exec()
通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
shell_exec(‘ls -lart’)等同于直接用执行运算符
在这里插入图片描述
该函数有错误或无输出时都会返回null,所以不能依靠返回值来判断程序是否成功执行。
如果需要检查进程执行的退出码,需要使用 exec() 函数。

assert()
用于检查一个断言是否为false,多用于代码的调试,可以通过看返回的结果是否一直为true来检查程序错误或某些功能是否实现,如果为false,那么会通过其他函数来采取适当的行动。
比如用assert_options()ASSERT_CALLBACK 配置指令允许设置回调函数来处理失败的断言。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述assert() 的行为可以通过 assert_options() 来配置,或者手册页面上描述的 .ini 设置。通过设置不同的 zend.assertions,assert.exception,会有不同的输出结果;

如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行,如果你传入了 boolean 的条件作为 assertion,这个条件将不会显示为断言函数的参数;在调用你定义的 assert_options() 处理函数时,条件会转换为字符串,而布尔值 FALSE 会被转换成空字符串。

对于这些函数的学习都需要实际操作才能掌握,单纯的去看手册或者官网上的介绍只能说是了解,不能说是会用,emmmm…

反向引用
正则表达式中 “\number” 表示反向引用,表示引用一个捕获组,其实每一个反向引用都相当于一个捕获组,因为捕获组也是根据‘(’的出现来定义,所以存在反向引用的话必须有小括号 “()” ,例如\1表示引用从左到右第一个括号里面的值

preg_replace()/e 下的模式匹配问题
正则表达式中的/e模式的作用是将替换后的字符串中的内容当作代码来执行

该模式在 PHP7版本中会出现warning,说明此时/e模式已经不再支持,
需要用preg_replace_callback代替。
简单补充一下preg_replacce_callback的用法
该函数执行一个正则表达式搜索并且使用一个回调函数进行替换,就是不只是替换,还会在替换的位置进行相关功能的执行。相当于在preg_replace的功能上再添加一个callback
在这里插入图片描述
输出为
在这里插入图片描述刚开始没有注意到在第一个参数中 | 符号的应用,导致运行时一直在报错。。。如果没有 | ,这个函数不会去匹配参数显示的捕获,| 相当于匹配两个 | 之间的值。。。相比于/e模式,preg_replacce_callback使代码看起来更有层次感,结构比较清晰,理解更容易一些。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值