• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

php调用系统命令的函数的比较

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

了解命令的区别并进行直观的选择
这是一篇翻译文章,原作者通过表格的形式更加直观的展现出差异并进行选择

PHP有众多调用系统命令的函数,大致如下:

  • system()
  • exec()
  • passthru()
  • shell_exec()
  • ``

于是就想着总结一下它们的差异。本想着对照手册把它们的函数功能,参数,返回等都列出来,但是其实不利于直观看出差异来。谷歌上发现大多数人跟我想的一样,更侧重于函数功能的介绍。于是通过stack overflow,终于发现了满意的答案,虽然答案简短但是直观,于是准备翻译一下,原文地址:http://stackoverflow.com/questions/732832/php-exec-vs-system-vs-passthru#answer-39681338

原文翻译

先前的回答看起来有点疑惑、不完整(译注:其他回答通篇文字说明),因此以下表总结了区别:

Command Displays Output Can Get Output Gets Exit Code
system() Yes(text) Last line only Yes
passthru Yes(raw) No Yes
exec No Yes (array) Yes
shell_exec No Yes (string) No
backticks(``) No Yes (string) No
  • 'Displays Output'意味着它将输出流输出到浏览器(或者如果在命令行运行,就在命令行输出)
  • 'Can Get Output'意味着你可以获取到命令的输出并分配给PHP变量
  • 'The "exit code'是一个命令返回的特殊值(也叫做'返回状态'),'0'意味着成功,其他值通常是错误码

其他易混淆的注意事项:

  • shell_exec()和执行操作符(``)功能是一样的
  • 可以使用proc_open()和popen()交互式读/写数据流
  • 如你想要捕获、展示错误信息,命令增加'2>&1'
  • 使用escapeshellcmd()过滤可能包含问题字符的命令的参数
  • 如果exec传入$output变量存储输出,如果$output变量不为空,输出内容将会插入到$output变量中(译注:$output参数是引用传值的)。所以你可能首先要删除($output)。

翻译完。

附加内容:安全性

任何脚本都需要在安全的环境下执行,PHP提供了两个函数来保证执行系统命令的安全。

1.escapeshellcmd()-shell 元字符转义

说明:对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。反斜线(\)会在以下字符之前插入: #&;`|*?~<>^()[]{}$, \x0A 和 \xFF。 ' 和 " 仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 % 都会被空格代替。

2.escapeshellarg()-把字符串转码为可以在 shell 命令里使用的参数

说明:将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
php工具箱升级自带mysql到mysql5.7发布时间:2022-07-10
下一篇:
php设计模式之适配器模式发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap