精华内容
下载资源
问答
  • php调用系统命令
    2021-04-29 03:13:42

    我们在执行linux系统的shell命令时,会用到虽然这三个命令都能执行linux系统的shell命令,但是其实他们是有区别的:

    system() 输出并返回最后一行shell结果。

    exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。

    passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。

    相同点:都可以获得命令执行的状态码

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

    用PHP提供的专门函数

    PHP提供共了3个专门的执行外部命令的PHP调用系统命令函数: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()这个PHP调用系统命令函数类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array 可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二个参数时,才可以用第三个参数,用来取得命令执行的状态码。

    例子:

    exec("/bin/ls -l");

    exec("/bin/ls -l", $res);

    exec("/bin/ls -l", $res, $rc);

    passthru()

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

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

    例子:

    header("Content-type: image/gif");

    passthru("./ppmtogif hunte.ppm");

    以上就是三个PHP调用系统命令函数的工能对比,希望对大家有所帮助。

    http://www.bkjia.com/PHPjc/446317.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/446317.htmlTechArticle我们在执行linux系统的shell命令时,会用到 虽然这三个命令都能执行linux系统的shell命令,但是其实他们是有区别的: system() 输出并返回最后...

    更多相关内容
  • 原标题:如何使用PHP调用外部命令?在PHP中调用外部命令,可以用如下三种方法来实现:方法一:用PHP提供的专门函数(四个):PHP提供4个专门的执行外部命令的函数:exec(), system(), passthru(), shell_exec()1)exec...

    原标题:如何使用PHP调用外部命令?

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

    方法一:用PHP提供的专门函数(四个):

    PHP提供4个专门的执行外部命令的函数:exec(), system(), passthru(), shell_exec()

    1)exec()

    原型:

    string exec ( string $command [, array &$output [, int &$return_var ]] )

    说明: exec执行系统外部命令时不会输出结果,而是返回结果的最后一行。如果想得到结果,可以使用第二个参数,让其输出到指定的数组。此数组一个记录代表输出的一行。即如果输出结果有20行,则这个数组就有20条记录,所以如果需要反复输出调用不同系统外部命令的结果,最好在输出每一条系统外部命令结果时清空这个数组unset($output),以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0。

    exec("dir",$output);

    print_r($output);

    ?>

    2)system()

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

    说明: system和exec的区别在于,system在执行系统外部命令时,直接将结果输出到游览器,如果执行命令成功则返回true,否则返回false。第二个参数与exec第三个参数含义一样。

    system("pwd");

    ?>

    3)passthru()

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

    说明: passthru与system的区别,passthru直接将结果输出到游览器,不返回任何值,且其可以输出二进制,比如图像数据。第二个参数可选,是状态码。

    header("Content-type:image/gif");

    passthru("/usr/bin/ppm2tiff /usr/share/tk8.4/demos/images/teapot.ppm");

    ?>

    4)shell_exec()

    原型:

    string shell_exec ( string $cmd )

    说明: 直接执行命令$cmd

    $output = shell_exec('ls -lart');

    echo "

    $output
    ";

    ?>

    方法二:反撇号

    原型: 反撇号`(和~在同一个键)执行系统外部命令

    说明: 在使用这种方法执行系统外部命令时,要确保shell_exec函数可用,否则是无法使用这种反撇号执行系统外部命令的。

    echo `dir`;

    ?>

    方法三:用popen()函数打开进程

    原型:resource popen ( string $command , string $mode )

    说明: 能够和命令进行交互。之前介绍的方法只能简单地执行命令,却不能与命令交互。有时须向命令输入一些东西,如在增加系统用户时,要调用su来把当前用户换到root用户,而su命令必须要在命令行上输入root的密码。这种情况下,用之前提到的方法显然是不行的。

    popen( )函数打开一个进程管道来执行给定的命令,返回一个文件句柄,可以对它读和写。返回值和fopen()函数一样,返回一个文件指针。除非使用的是单一的模式打开(读or写),否则必须使用pclose()函数关闭。该指针可以被fgets(),fgetss(),fwrite()调用。出错时,返回FALSE。

    error_reporting(E_ALL);

    /* Add redirection so we can get stderr. */

    $handle = popen('/path/to/executable 2>&1', 'r');

    echo "'$handle'; " . gettype($handle) . "\n";

    $read = fread($handle, 2096);

    echo $read;

    pclose($handle);

    ?>

    要考虑两个问题:安全性和超时

    1)安全性

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

    执行外部命令

    在打开文件时有些限制

    连接MySQL数据库

    基于HTTP的认证

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

    当使用这些函数来执行系统命令时,可以使用escapeshellcmd()和escapeshellarg()函数阻止用户恶意在系统上执行命令,escapeshellcmd()针对的是执行的系统命令,而escapeshellarg()针对的是执行系统命令的参数。这两个参数有点类似addslashes()的功能。

    2)超时

    当执行命令的返回结果非常庞大时,可以需要考虑将返回结果输出至其他文件,再另行读取文件,这样可以显著提高程序执行的效率。

    如果要执行的命令要花费很长的时间,那么应该把这个命令放到系统的后台去运行。但在默认情况下,象system()等函数要等到这个命令运行完才返回(实际上是在等命令的输出结果),这肯定会引起PHP脚本的超时。解决的办法是把命令的输出重定向到另外一个文件或流中,如:

    system("/usr/local/bin/order_proc > /tmp/abc ");

    责任编辑:

    展开全文
  • PHP调用外部命令

    2019-10-07 13:59:49
    ------------------------------------------------------------------ 一、PHP调用外部命令总结 二、安全问题 三、超时问题 ----------------------------------------...

    ------------------------------------------------------------------

    一、PHP调用外部命令总结                                                       

    二、安全问题

    三、超时问题

    ------------------------------------------------------------------

    一、PHP调用外部命令总结
    在PHP中调用外部命令,可以用,

    1>调用专门函数

    2>反引号

    3>popen()函数打开进程,三种方法来实现。

     

    1>专门函数

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

    disable_functions =
    

    如果“disable_functions=”后面有接上面四个函数,将其删除。
    默认php.ini配置文件中是不禁止你调用执行外部命令的函数的。

     exec()

    function exec(string $command,array[optional] $output,int[optional] $return_value)
    

    php代码:

    1
    2
    3
    4
    5
    
    <?php
            echo exec("ls",$file); echo "</br>"; print_r($file); ?>

    执行结果:

    test.php
    Array( [0] => index.php [1] => test.php)
    

    知识点:
    exec 执行系统外部命令时不会输出结果,而是返回结果的最后一行,如果你想得到结果你可以使用第二个参数,让其输出到指定的数组,此数组一个记录代表输出的一行,即如果输出结果有20行,则这个数组就有20条记录,所以如果你需要反复输出调用不同系统外部命令的结果,你最好在输出每一条系统外部命令结果时清空这个数组,以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0。

     passthru()

    function passthru(string $command,int[optional] $return_value)
    

    代码:

    1
    2
    3
    
    <?php
            passthru("ls"); ?>

    执行结果:

    index.phptest.php
    

    知识点:
    passthru与system的区别,passthru直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,不返回任何值,且其可以输出二进制,比如图像数据。

     system()

    function system(string $command,int[optional] $return_value)
    

    代码:

    1
    2
    3
    
    <?php
            system("ls /"); ?>

    执行结果:

    binbootcgroupdevetchomeliblost+foundmediamntoptprocrootsbinselinuxsrvsystmpusrvar
    

    知识点:
    system和exec的区别在于system在执行系统外部命令时,直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,如果执行命令成功则返回true,否则返回false。第二个参数与exec第三个参数含义一样。

     反撇号`和shell_exec()
    shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体
    代码:

    1
    2
    3
    
    <?php
            echo `pwd`;
    ?>

    执行结果:

    /var/www/html
    

     

    2>反引号
    原型: 反撇号`(和~在同一个键)执行系统外部命令
    说明: 在使用这种方法执行系统外部命令时,要确保shell_exec函数可用,否则是无法使用这种反撇号执行系统外部命令的。
    <?php
        echo `dir`;
    ?>


    3>popen()函数打开进程
    原型: resource popen ( string $command , string $mode )
    说明: 能够和命令进行交互。之前介绍的方法只能简单地执行命令,却不能与命令交互。有时须向命令输入一些东西,如在增加系统用户时,要调用su来把当前用户换到root用户,而su命令必须要在命令行上输入root的密码。这种情况下,用之前提到的方法显然是不行的。
    popen( )函数打开一个进程管道来执行给定的命令,返回一个文件句柄,可以对它读和写。返回值和fopen()函数一样,返回一个文件指针。除非使用的是单一的模式打开(读or写),否则必须使用pclose()函数关闭。该指针可以被fgets(),fgetss(),fwrite()调用。出错时,返回FALSE。
    <?php
    error_reporting(E_ALL);
     
    /* Add redirection so we can get stderr. */
    $handle = popen('/path/to/executable 2>&1', 'r');
    echo "'$handle'; " . gettype($handle) . "\n";
    $read = fread($handle, 2096);
    echo $read;
    pclose($handle);
    ?>

    二、安全问题

    由于PHP基本是用于WEB程序开发的,所以安全性成了人们考虑的一个重要方面。
    于是PHP的设计者们给PHP加了一个门:安全模式。
    在php.ini中的设置safe_mode = On
    如果运行在安全模式下,那么PHP脚本中将受到如下四个方面的限制:
        执行外部命令
        在打开文件时有些限制
        连接MySQL数据库
        基于HTTP的认证

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

     当你使用这些函数来执行系统命令时,可以使用escapeshellcmd()和escapeshellarg()函数阻止用户恶意在系统上执行命令,escapeshellcmd()针对的是执行的系统命令,而escapeshellarg()针对的是执行系统命令的参数。这两个参数有点类似addslashes()的功能。

    三、超时问题

     当执行命令的返回结果非常庞大时,可以需要考虑将返回结果输出至其他文件,再另行读取文件,这样可以显著提高程序执行的效率。
    如果要执行的命令要花费很长的时间,那么应该把这个命令放到系统的后台去运行。但在默认情况下,象system()等函数要等到这个命令运行完才返回(实际上是在等命令的输出结果),这肯定会引起PHP脚本的超时。解决的办法是把命令的输出重定向到另外一个文件或流中,如:
    <?php
    system("/usr/local/bin/order_proc > /tmp/abc ");
    ?>

    但我调用的DOS命令需要几分钟的时间,而且为了批处理不能简单的把结果写入文件了事,要顺序执行以下的程序
    PHP设置了调用系统命令的时间限制,如果调用命令超时,虽然这个命令还是会被执行完,但PHP没有得到返回值,被终止了(最可恨的是,不显示任何错误)
    修改php.ini并重启Apache以允许系统命令运行更长的时间
    max_execution_time = 600

    转载于:https://www.cnblogs.com/peteremperor/p/6638937.html

    展开全文
  • php调用系统命令

    2016-04-21 10:41:45
    调用系统命令函数 : system(); exec(); passthru(); shell_exec();  这只是部分 具体需要什么看 你们了。 调试方法 :   ​1.查询 服务器项目目录权限  2. 查看 php安全模式 是否 现在处于开启...

    调用系统命令函数 :

    system(); exec(); passthru(); shell_exec(); 

    这只是部分  具体需要什么看 你们了。

    调试方法 : 

         ​1.查询 服务器项目目录权限

          2. 查看 php安全模式 是否 现在处于开启状态 如果开启 safe_mode = off 关闭安全模式。 

          3. 如果 当前php 版本高于 5.3 是不支持关闭 安全模式的 。 可在php.ini 设置 取消某些 安全模式 禁用的 函数 查找 disable_functions 可以找到哪些函数是默认不让使用的。

          4. 安全模式 只能修改 php.ini 配置 文件 获取 通过apache  配件 php.

    展开全文
  • 问题背景 ... 问题原因 ...通过locale命令即可查看。 解决办法 在执行exec命令前追加:参考资料 putenv('LANG=en_US.UTF-8');...让PHP调用通过python解释器直接执行py,命令行追加 2>&1输出标准错误。 &
  • 系统:CentOS 6.3 apache是php的执行用户 用exec函数去执行linux系统上的程序/usr/local/yourcmd/sbin/yourcmd php代码如下: 复制代码 代码如下: <?php $conf_file = “/var/www/html/webroot/test.tmp”; $...
  • php的内置函数exec,system都可以调用系统命令(shell命令),当然还有passthru,escapeshellcmd等函数。 在很多时候利用php的exec,system等函数调用系统命令可以帮助我们更好更快的完成工作。比如前二天笔者在批量处理....
  • 那么,是否可以在PHP脚本中调用外部命令呢?如果能,如何去做呢?有些什么方面的顾虑呢?相信你看了本文后,肯定能够回答这些问题了。 是否可以? 答案是肯定的。PHP和其它的程序设计语言一样,完全可以在程序内...
  • PHP 调用外部系统命令

    2021-03-23 19:32:13
    PHP 调用外部系统命令PHP作为一种...那么,是否可以在PHP脚本中调用外部命令呢?如果能,如何去做呢?有些什么方面的顾虑呢?相信你看了本文后,肯定能够回答这些问题了。是否可以?答案是肯定的。PHP和其它的程序设...
  • php调用外部命令总结

    2013-12-16 19:47:27
    php提供了system(),exec(),passthru()这几个函数来调用外部的命令. 他们的区别: system() 输出并返回最后一行shell结果。 exec() 不输出结果,返回最后一... 相同点:都可以获得命令执行的状态码 在PHP中调用外部命令
  • php中,调用外部命令的函数有不少,常见的有: system()passthru()escapeshellcmd()pcntl_exec()exec()有时,会遇到在php脚本中添加了命令,例:exec("rm -rf /a/b/c/*.html");却始终不能执行。问题一:问题在于c...
  • 在写脚本的时候, 经常会有需要调用其他命令. 而在调用一些耗时命令的时候, 我们是需要能够实时掌握脚本进度的. 一般来说, 脚本的进度通常是通过脚本的输出来获得. 如果是一个bash脚本, 那么直接调用命令 A就可以将...
  • PHP调用shell命令

    千次阅读 2019-05-09 17:16:12
    PHP调用shell命令 前言 因为想用php调用python脚本,于是想到可以利用php调用shell命令的方法实现。 php版本:php7.0 三种方法 1.system system — 执行外部程序,并且显示输出 函数使用方法 system ( string $...
  • php调用外部命令

    2010-01-04 23:10:00
    PHP作为一种服务器端的脚本...那么,是否可以在PHP脚本中调用外部命令呢?如果能,如何去做呢?有些什么方面的顾虑呢?相信你看了本文后,肯定能够回答这些问题了。是否可以?答案是肯定的。PHP和其它的程序设计语言一
  • PHP调用linux命令详细说明在php教程中调用linux命令的函数是stringexec(stringcommand,string[array],int[return_var]);如:exec( "vpopmail ");echo exec('whoami');再看一实例①function exec_enabled() {$...
  • PHP中调用外部命令,可以用,1>调用专门函数、2>反引号、3>popen()函数打开进程,三种方法来实现: 方法一:用PHP提供的专门函数(四个): PHP提供4个专门的执行外部命令的函数:exec(), system(&#...
  • PHP中调用外部命令,可以用如下三种方法来实现:   方法一:用PHP提供的专门函数(四个): PHP提供4个专门的执行外部命令的函数:exec(), system(), passthru(), shell_exec() 1)exec() ...
  • php调用外部shell的方法总结 1执行外部命令 2在打开文件时有些限制 3连接MySQL数据库 4基于的认证 在安全模式下只有在特定目录中的外部程序才可以被执行对其它程序的调用将被拒绝 该目录可以在php.ini文件中用safe_...
  • PHP 调用并执行 Linux 命令
  • golang调用外部命令,并且通过stdin传数据的例子使用场景:当我们需要调用一个外部命令,然后给外部命令传参数,常用方便的做法是通过命令行传参数,但是有些时候数据太长,或者基于安全考虑,比如传密码,等不方便...
  • PHP提供了三个专用函数 system()、exec()、passthru() 来调用外部的命令,它们之间的区别是:system(): 执行外部命令,输出并返回最后一行shell结果。exec(): 执行外部命令,不输出结果,返回最后一行shell结果,...
  •  上传好视频后,PHP后台自动选取视频流中的某一帧作为视频封面。 2、工具:FFmpeg  FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,功能很强大。 笔者并没有深入了解和研究...
  • 使用系统命令是一项危险的操作,尤其在你试图使用远程数据来构造要执行的命令时更是如此。如果使用了被污染数据,命令注入漏洞就产生了。exec()是用于执行shell命令的函数。它返回执行并返回命令输出的最后...
  • php 如何调用shell执行docker相关命令? 我想执行在网页中使用php docker ps 并且返回内容
  • php调用linux命令

    2021-05-17 22:37:11
    php有以下接口可提供执行外部函数:system()exec()popen()但要使用上面几个函数,首先,要配置php.ini配置文件。修改配置文件如下:safe_mode = off;改成safe_mode = on;函数使用讲解:string system ( string $...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 110,687
精华内容 44,274
关键字:

php调用系统命令

友情链接: ACBF_THEME.ZIP