注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

PHP执行外部命令小集  

2014-12-05 17:20:19|  分类: html5-webapp |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

前言:PHP提供了3种方法调用外部命令:
(1)调用执行外部命令函数(system(),exec(),passthru(),shell_exec());
(2)使用反撇号``执行命令;
(3)popen()函数打开进程;
      如果需要在b/s环境下使用以上方法,还需要在服务器给web访问用户进行授权,一般都在sudoer文件中给于配置,那当然最好使用visodu来直接调试修改sudoer的内容。
    Visudo只要在特权模式下使用,即使用root权限。下图为参考编辑界面。
PHP执行外部命令小集 - itoedr - itoedr的it学苑
      visudo默认使用了nano编辑器。

一、调用执行外部命令函数
1.exec()函数
      函数调用格式:
      string exec ( string $command [, array &$output [, int &$return_var] )
      格式说明:这个函数不会直接输出结果,而是把结果输出到第二个参数(数组)中,第三个参数用来取得命令执行的状态码,通常执行成功都是返回0。

        <?php   //打印出当前文件目录及其文件信息
           exec("dir",$out);
         print_r($out);?>

2.system()函数
     函数调用格式:
     string system ( string $command [, int &$return_var ] )
     格式说明:
      system在执行系统外部命令时,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。
     <?php  system("dir");?>
3.passthru()函数
      函数调用格式:
      void passthru ( string $command [, int &$return_var ] )
      格式说明:passthru直接将结果输出到游览器,不返回任何值,且其可以输出二进制,比如图像数据。第二个参数可选,是状态码。
      <?php passthru ('echo $PATH'); ?>
4.shell_exec()函数
      函数使用格式:
     string shell_exec ( string $cmd )
 
      <?php  /** by www.phpddt.com */
         $output = shell_exec('ls -l');
         var_dump($output);
        ?>

二、使用反撇号`执行命令
    最简单的方法:
      <?php   echo `dir`;?>
     此中``中的语句就是直接的bash命令.
     说明: 在使用这种方法执行系统外部命令时,要确保shell_exec函数可用,否则是无法使用这种反撇号执行系统外部命令的。

三、使用popen()打开进程,执行命令

    说明:这种方法是较为高级方便的使用方法,对于smp环境,可以提高应用效率。也是php多线程编程中有用的机制。
    resource popen ( string $command , string $mode )
    说明:可以进行命令交互,popen( )函数打开一个进程管道来执行给定的命令,返回一个文件句柄,可以对它读和写。返回值和fopen()函数一样,返回一个文件指针。除非使用的是单一的模 式打开(读or写),否则必须使用pclose()函数关闭。该指针可以被fgets(),fgetss(),fwrite()调用。出错时,返回 FALSE。
    参考php手册的例子:
    <?php
    error_reporting(E_ALL);$handle = popen('/path/to/executable 2>&1', 'r');
    echo "'$handle'; " . gettype($handle) . "\n";
      $read = fread($handle, 2096);echo $read;pclose($handle);
    ?>

     在PHP中你这样做,可能会带来安全隐患, 使用这些函数来执行系统命令时,可以使用escapeshellcmd()和escapeshellarg()函数阻止用户恶意在系统上执行命令。
      其中escapeshellcmd()针对的是执行的系统命令,而escapeshellarg()针对的是执行系统命令的参数。这两个参数有点类似于addslashes()的功能。

参考文献:    
1)php中文手册>>>
      http://www.w3school.com.cn/php/php_ref.asp

2)WEB服务器执行后台面特权用户命令的方法>>>

http://itoedr.blog.163.com/blog/static/1202842972014810104615447/

3)PHP的程序执行函数>>>

http://php.net/manual/zh/function.escapeshellcmd.php
  评论这张
 
阅读(91)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017