PHP作为一种服务器端的脚本语言,像编写简单、或者是复杂的动态网页这样的任务,它完全能够胜任。但事情不总是如此,有时为了实现某个功能,必须借助于操作系统的外部程序(或者称之为命令),这样可以做到事半功倍。 
那么,是否可以在PHP脚本中调用外部命令呢?如果能,如何去做呢?有些什么方面的顾虑呢?是否可以?
答案是肯定的。PHP和其它的程序设计语言一样,完全可以在程序内调用外部命令,并且是很简单的:只要用一个或几个函数即可。

//system('dir');
// exec ('dir');
// passthru ('dir');
// echo `dir`;

区别: 
system() 输出并返回最后一行shell结果。 
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。 
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。 
相同点:都可以获得命令执行的状态码

在PHP中调用外部命令,可以用如下三种方法来实现: 
1) 用PHP提供的专门函数 
PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。 
system() 
原型:string system (string command [, int return_var]) 
system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。

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

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

<?php
exec("/bin/ls -l");
exec("/bin/ls -l", $res);
exec("/bin/ls -l", $res, $rc);
?>

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

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

PHP 执行系统外部命令的方法 system() exec()的更多相关文章

  1. PHP 执行系统外部命令的函数- system() exec() passthru()

    PHP 执行系统外部命令的函数: system() exec() passthru()区别:system() 输出并返回最后一行shell结果.exec() 不输出结果,返回最后一行shell结果,所 ...

  2. PHP执行系统外部命令函数:exec()、passthru()、system()、shell_exec()

    php提供4种方法执行系统外部命令:exec().passthru().system(). shell_exec().在开始介绍前,先检查下php配置文件php.ini中是有禁止这是个函数.找到 di ...

  3. PHP中调用外部命令的方法

    在PHP中调用外部命令,可以用如下三种方法来实现: 方法一:用PHP提供的专门函数(四个): PHP提供4个专门的执行外部命令的函数:exec(), system(), passthru(), she ...

  4. PHP 执行系统外部命令 system() exec() passthru()

    区别: system() 输出并返回最后一行shell结果. exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面. passthru() 只调用命令,把命令的运 ...

  5. nodejs 提示‘xxx’ 不是内部或外部命令解决方法

    本文介绍了node.js包管理工具npm安装模块后,无法通过命令行执行命令,提示‘xxx’ 不是内部或外部命令的解决方法,给需要的小伙伴参考下.   一般出现这样的问题原因是npm安装出现了问题,全局 ...

  6. pip不是内部或外部命令解决方法

    问题 已经配置好Python环境,但是安装依赖时,出现pip不是内部或外部命令. 解决方法 找到pip.exe文件所在的目录,将所在路径配置到环境变量path中. 再次输入pip

  7. ​'JAVAC' 不是内部或外部命令解决方法,记得要重启cmd

    我们在配置完环境变量后,在命令提示框中输入javac命令时,往往会提示javac不是内部或者外部命令时怎么办呢?我们一起来解决它吧! 我们配置完java环境变量之后,在命令行输入javac按下回车键, ...

  8. Node.js在任意目录下使用express命令‘不是内部或外部命令’解决方法

    1.一开始我只能在nodejs全局目录下使用express命令建一个新的项目,建在其他任意一个目录命令行都会提示"不是内部或外部命令",导致目录会乱,目录如下. 2.尝试了一会,发 ...

  9. 命令行下 mysql 不是内部或外部命令排查方法

    首先确定你没有更改过MySQL的安装目录.如果你进行过改名或者更改了你的路径,那么要在相应的配置文件中更改你的你路径.找到C:\Windows\my.ini文件,更改你配置的文件路径,改成你修改后的路 ...

随机推荐

  1. Mysql 使用触发器,把插入的数据在插入到宁一张表里

    CREATE TRIGGER tgr_tablea_insert AFTER //触发器名字 动作在插入数据之后 ON alertinfo //监听哪个表之后触发 FOR INSERT //监听的表的 ...

  2. c++ 观察者模式(observer)

    观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.它还有两个别名,依赖 (Dependents),发布-订阅(Publish-Subs ...

  3. spring4-2-bean配置-11-基于注解

  4. C++ std::vector

    std::vector template < class T, class Alloc = allocator<T> > class vector; // generic te ...

  5. List 组件简单示例及其onItemsDisclosure点击事件

    来自<sencha touch权威指南>第9章,276页开始 ------------------------------------------------- app.js代码如下: E ...

  6. strtotime()

    date('Y-m-d H:i:s',time()) //24小时 date('Y-m-d h:i:s',time()) //12小时

  7. oracle sql 数结构表id降序

    UPDATE BAS_ORGANIZATION_TYPE T1SET T1.PARENTID=(select rn from (SELECT id,rownum rn FROM BAS_ORGANIZ ...

  8. 解决URL参数中文乱码

    string key = HttpUtility.UrlDecode(Request["key"], Encoding.UTF8);

  9. JSTL标签总结备用

    前言 ========================================================================= JSTL标签库,是日常开发经常使用的,也是众多 ...

  10. ES6语法的新特性

    ES6 就是ECMAScript 6是新版本JavaScript语言的标准.虽然目前已经更新到ES7,但是很多浏览器还不知处ES7语法,该标准仍在更新中,但目前部门网站都指出ES6的语法.目前ES6也 ...