最近想使用PHP与Sheel进行交互。PHP控制显示和高层的逻辑结构。Sheel调用linux的底层命令来实现快速及其时效性。
在网翻了一些帖子,发现一份强帖..

由于PHP基本是用于WEB程序开发的,所以安全性成了人们考虑的一个重要方面。于是PHP的设计者们给PHP加了一个门:安全模式。如果运行在安全模式下,那么PHP脚本中将受到如下四个方面的限制:

1.执行外部命令  2.在打开文件时有些限制  3.连接MySQL数据库  4.基于HTTP的认证

在安全模式下,只有在特定目录中的外部程序才可以被执行,对其它程序的调用将被拒绝。这个目录可以在php.ini文件中用 safe_mode_exec_dir指令,或在编译PHP是加上--with-exec-dir选项来指定,默认是/usr/local/php /bin。

如果你调用一个应该可以输出结果的外部命令(意思是PHP脚本没有错误),得到的却是一片空白,那么很可能你的网管已经把PHP运行在安全模式下了。

如何做?

在PHP中调用外部命令,可以用如下三种方法来实现:

1) 用PHP提供的专门函数

PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。

system()

原型:string system (string command [, int return_var])

system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。

例子:

system("/usr/local/bin/webalizer/webalizer");
?>

exec()

原型:string exec (string command [, string array [, int return_var]])

exec() 函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二个参数时,才可以用第三个参数,用来取得命令执行的状态码。

例子:

exec("/bin/ls -l");
exec("/bin/ls -l", $res);
#$res是一个数据,每个元素代表结果的一行
exec("/bin/ls -l", $res, $rc);
#$rc的值是命令/bin/ls -l的状态码。成功的情况下通常是0
?>

passthru()

原型:void passthru (string command [, int return_var])

passthru() 只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus(Unix 下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。

例子:

header("Content-type: image/gif");
passthru("./ppmtogif hunte.ppm");
?>

【转载 http://blog.chinaunix.net/u3/101502/showart_2020751.html】

Shell(Bash) - PHP与Sheel交互相关推荐

  1. linux超级基础系列——什么是shell? bash和shell有什么关系

    什么是Shell?        shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序.你在提示符下输入的每个命令都由shell先解释然后传给Linux内核.    ...

  2. 国内Linux shell,Bash shell 的诞生 | Linux 中国

    原标题:Bash shell 的诞生 | Linux 中国 本周的<代码英雄>播客深入研究了最广泛使用的.已经成为事实标准的脚本语言,它来自于自由软件基金会及其作者的早期灵感. -- Ma ...

  3. shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)

    shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)Shell脚本与MySQL数据库交互(增删改查)# 环境准备:安装mariadb 数据库 [root ...

  4. awk,gawk调用shell,bash中的变量 笔记221106

    awk,gawk调用shell,bash中的变量 笔记221106 "'${变量名}'" 双 包 单 包 ${} 包 变量名 "'"${变量名}"'& ...

  5. shell(bash)替换字符串大全

    shell(bash)替换字符串大全 1. 替换(只替换一个) 用varrB=${varA/str1/str2} $ var="AAAszip_BBB.zip";var2=${va ...

  6. shell bash脚本_如何在Windows 10上创建和运行Bash Shell脚本

    shell bash脚本 With the arrival of Windows 10's Bash shell, you can now create and run Bash shell scri ...

  7. 通过shell/bash脚本使用ffmpeg批量去除视频固定片头和片尾(Cygwin环境)

    通过shell/bash脚本使用ffmpeg批量去除视频固定片头和片尾(Cygwin环境) 任务需求: 基本情况: 技能需求: 操作流程概括: 运行通过的shell脚本: 小结 任务需求: 对一批视频 ...

  8. shell/bash脚本命令教程

      shell/bash其实就是我们日常在unix系统终端中执行的语句,只是通常我们在命令行中都是单行语句执行的,而有时,我们希望将一些操作命令写到一个文本中,让电脑自动按顺序或是并行地执行这些命令, ...

  9. 反弹shell bash -i命令

    目录   0x01 什么是反弹shell?   0x02 命令拆分详解   0x03 文件描述符   0x04 shell 输入/输出重定向   0x05 输入输出结合获得shell 什么是反弹she ...

最新文章

  1. 关于asp.net mvc中的cookie的对象传递以及加密解密
  2. LeetCode Keyboard Row
  3. qt的输出中文,数字到表格
  4. 项目管理概述学习记录(二)
  5. cumsum在matlab中,matlab中cumsum函数和sum函数详解
  6. 苹果将放弃PowerPC支持 全面Intel化
  7. [NTU-Machine-learning-note]1 Introduction(2)
  8. SharePoint Portal Server 2003 SP2对文档库事件处理程序所带来的影响
  9. 好文章,被架构师秒杀之后
  10. 进程控制(二)与linux下的自有服务
  11. button按钮onclick触发不了_用一篇深度好文,详解按钮的设计
  12. 计算机控制系统报告,计算机控制系统实验报告一
  13. 商业虚拟专用网络技术二通用路由封装
  14. asin、acos、atan 和 atan2 函数用法简介
  15. Fiddler功能讲解
  16. 2018校招携程测评,赞RP
  17. spark算子详细介绍(v、k-v、vv类型)
  18. linux网卡断流测试,RouterOS断流解决办法探讨
  19. 数据中心机柜散热解决方案,知道这两点就够了!
  20. SpringBoot学习-part68 安全-登录认证授权

热门文章

  1. 谈谈我的云笔记使用之路
  2. proxmox换源_Proxmox VE 5.4升级到Proxmox VE 6(中国源加速)
  3. ORA-01732: 此视图的数据操纵操作非法
  4. 视觉检测技术帮助制造业提升生产效率
  5. 承德网站服务器,承德联通dns服务器地址
  6. 大型机半个世纪发展史
  7. 机器学习中的特征工程详解
  8. c++ MFC模拟笔记本键盘测试
  9. mathcad使用说明
  10. Java实现多图片和文字编辑成一张图片