Rumah >pembangunan bahagian belakang >tutorial php >PHP系统程序执行函数(system,passthru,exec)简单分析(附代码)

PHP系统程序执行函数(system,passthru,exec)简单分析(附代码)

不言
不言asal
2018-08-03 11:43:323315semak imbas

这篇文章给大家介绍的内容是关于PHP系统程序执行函数(system,passthru,exec)简单分析(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

exec — 执行一个外部程序

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

范例

<?php
        echo exec("ls",$output);
        echo "</br>";
        print_r($file);
?>

执行结果:

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

分析:
exec 不会主动返回执行结果,且只是返回结果的最后一行;
想要获得完整的结果,需要第二个参数,让其输出到指定的数组,此数组一个记录代表输出的一行,而且反复执行不同的系统外部命令时,在输出每一条系统外部命令结果时清理unset()这数组,以防混乱;
第三个参数用来取得命令执行的状态码,通常执行成功都是返回0。

passthru — 执行外部程序并且显示原始输出

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

范例

<?php
        passthru("ls");
?>

执行结果:

index.phptest.php

分析:
同 exec() 函数类似,也是用来执行外部命令,但直接将结果输出到浏览器(未经任何处理的 原始输出),没有返回值;
当需要输出二进制数据,并且需要直接传送到浏览器的时候,来使用这函数,如:直接输出图像流的命令;

system — 执行外部程序,并且显示输出

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

<?php
        system(&#39;ls&#39;, $retval);
?>

分析:
直接将结果输出到浏览器;
第二个参数是外部命令执行后的返回状态;
成功则返回命令输出的最后一行,失败则返回 FALSE;
如果 PHP 运行在服务器模块中,system() 函数还会尝试在每行输出完毕之后, 自动刷新 web 服务器的输出缓存。

shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。

说明
string shell_exec ( string $cmd )
反引号运算符“`”的效果与函数 shell_exec() 相同。
shell_exec 的返回值
当进程执行过程中发生错误,或者进程不产生输出的情况下,都会返回 NULL, 所以,使用本函数无法通过返回值检测进程是否成功执行。 如果需要检查进程执行的退出码,请使用 exec() 函数。

范例

<?php
$output = `ls -al`;
echo "<pre class="brush:php;toolbar:false">$output
"; ?>

注意:
反引号运算符在激活了安全模式或者关闭了 shell_exec() 时是无效的。
与其它某些语言不同,反引号不能在双引号字符串中使用。

Example #1 shell_exec() 例程
当 PHP 运行在 安全模式 时,不能使用此函数。

<?php
$output = shell_exec(&#39;ls -lart&#39;);
echo "<pre class="brush:php;toolbar:false">$output
"; ?>

escapeshellarg
说明
string escapeshellarg ( string $arg )
escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。shell 函数包含 exec(), system() 执行运算符 。

参数
arg
需要被转码的参数。

返回值
转换之后字符串。

范例

<?php
system(&#39;ls &#39;.escapeshellarg($dir));
?>

escapeshellcmd
说明
string escapeshellcmd ( string $command )
escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。

反斜线(\)会在以下字符之前插入: &#;`|*?~a8093152e673feb7aba1828c43532094^()[]{}$\, \x0A 和 \xFF。 ' 和 " 仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 % 和 ! 字符都会被空格代替。
参数
command
要转义的命令。

返回值
转义后的字符串。

范例

<?php
// 我们故意允许任意数量的参数
$command = &#39;./configure &#39;.$_POST[&#39;configure_options&#39;];
$escaped_command = escapeshellcmd($command);
 
system($escaped_command);
?>

Warning
escapeshellcmd() 应被用在完整的命令字符串上。 即使如此,攻击者还是可以传入任意数量的参数。 请使用 escapeshellarg() 函数 对单个参数进行转义。

相关文章推荐:

php中_get方法和_set方法访问方法的实例代码

php实现操作文件的各种方式总结(附代码)

Atas ialah kandungan terperinci PHP系统程序执行函数(system,passthru,exec)简单分析(附代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn