您的位置:首页 > 运维架构 > Linux

php执行linux系统命令的相关函数exec|system|popen

2018-03-02 09:49 791 查看
php的内置函数exec、system都可以调用系统命令(shell命令), 当然还有更多的相关函数。在有些时候,还是逼不得已采用上这些函数,可以很方便的处理遇到的难题,比如:调用微信公众平台的新增素材接口,实现静默的上传图片,让用户感觉不到这个过程;或者执行linux命令不受脚本超时的影响;还有许多我们想不到的场景都可以用上。
但要想使用这些内置函数,需要在php.ini中关闭安全模式,否则为了安全性,php是不允许调用系统命令。
这里主要演示exec | system 两个内置函数,先展示一下示例
exec示例:$command = "curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=image";$retval = array();exec($command, $output, $status);if ($status == 0) {   return $output;}
该函数返回值:Array(  [0] => '{"type":"image","media_id":"NkTmNilcJeAwrZEWBvapjgTeaJZ1h9mAkltAtZvr384iOV5scXDt4a5F7rHiV_hV","created_at":1509671464}')
system示例:$command = "curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=image";$last_line = system($command, $retval);if ($retval == 0) {   return $last_line;}
该函数返回值:{"type":"image","media_id":"NkTmNilcJeAwrZEWBvapjgTeaJZ1h9mAkltAtZvr384iOV5scXDt4a5F7rHiV_hV","created_at":1509671464}
1、exec函数 — 执行一个外部程序说明:执行外部程序。语法:string exec ( string $command [, array &$output [, int &$return_var ]] )返回值: 无说明 :  exec( )执行给予的命令command,不过它并不会输出任何东西,它简单的从命令的结果中传回最后一行,如果你需要去执行一个命令,并且从命令去取得所有资料时,可以使用passthru( )这个函数。  如果存在第二个参数$output,则指定的数组将会被命令所输出的每一行填满,即结果全部返回到$output变量中。(注意 : 如果数组先前已经包含了一些元素的话,exec( )将会把它附加在数组的后面,如果你不想要此函数附加元素的话,你可以在传递此数组给exec( )之前呼叫unset( )。)  如果存在第二、第三个参数$output和$return_var,那么第三个参数将传回执行的命令状态码,0表示成功,1表示失败。注意事项:  注意 : 如果你允许来自使用者输入的资料,可以传递到此函数,那么你应该使用escapeshellcmd( )来确定此使用者无法哄骗(trick)系统来执行武断的(arbitrary)命令。  注意 : 如果你使用此函数来启动一个程式,而且希望在背景里(background)执行的时候离开它,你必须确定此程式的输出是转向(redirected)到一个文件或是一些输出的资料流,否则PHP将会悬挂(hang)直到程式执行结束。
2、system函数 — 执行外部程序,并且显示输出说明:执行外部程序并显示输出资料。语法:string system ( string $command [, int &$return_var ] )返回值: 字符串说明 :  system( )执行给予的命令command,并且输出结果。      如果存在第二个参数$return_var,该参数将传回执行的命令状态码,0表示成功,1表示失败。注意事项:  注意 : 如果你允许来自使用者输入的资料,可以传递到此函数,那么你应该使用escapeshellcmd( )来确定此使用者无法哄骗(trick)系统来执行武断的(arbitrary)命令。  注意 : 如果你使用此函数来启动一个程式,而且希望在背景里(background)执行的时候离开它,你必须确定此程式的输出是转向(redirected)到一个文件或是一些输出的资料流,否则PHP将会悬挂(hang)直到程式执行结束。  如果PHP是运作成伺服器模组,在输出每一行后,system( )会试着自动地清除web伺服器的输出缓冲。  成功则传回命令的最后一行,失败则传回false。  如果你需要去执行一个命令,并且从命令去取得所有资料时,可以使用passthru( )这个函数。
感谢支持,PHP更多的程序执行函数,请参阅官方文档:http://php.net/manual/zh/ref.exec.php
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: