首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过传递文件名中包含空格的数组来执行外部命令

问通过传递文件名中包含空格的数组来执行外部命令
EN

Stack Overflow用户
提问于 2010-01-24 01:59:34
回答 3查看 1.9K关注 0票数 2

我有一个PHP脚本,需要执行程序,将在名称中有空格的文件上工作。大多数用于执行外部命令(例如exec())的PHP函数在命令行执行时都有一个1字符串参数。然而,你必须做像escapeshellarg()这样的事情来保证你的输入安全。

有没有办法在PHP中使用数组来执行外部命令。所以,而不是:

代码语言:javascript
复制
exec("ls -l ".escapeshellarg($filename));

我可以去:

代码语言:javascript
复制
exec(array("ls", "-l", $filename));

这意味着我不必担心如何避开这些参数。我想避免使用escapeshellarg(),因为我正在使用的版本有一个错误,可以去掉非ASCII码字符。

Java具有此功能http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#exec%28java.lang.String[]%29

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-01 23:06:03

听起来这在PHP的内置函数中是不可能实现的。

票数 2
EN

Stack Overflow用户

发布于 2010-01-24 02:04:04

代码语言:javascript
复制
function myExec ( command, arguments )
{
    exec( command + ' ' + implode( ' ', array_map( escapeshellarg, arguments ) ) );
}
票数 1
EN

Stack Overflow用户

发布于 2010-01-24 02:26:53

Poke的答案很好--然而,他们需要运行多少个命令呢?我会考虑实现一个命令和参数的白名单-这样,你就可以非常确定它们不会注入恶意输入。类似于:

代码语言:javascript
复制
$whitelistCommandArray = array('ls' => 'ls', ...);
if (isset($whitelistCommandArray[$userSuppliedCommand]])
{
    //ok its a valid command, lets parse the args next
    ...
}
else echo "Unsupported command";

更新/编辑:

是参数的白名单可行吗?如果OP需要编辑大量文件怎么办?- Matchu

嘿,我不知道--可能是--完全取决于你的需求。

代码语言:javascript
复制
$whitelistArray = array('ls' => array('a', 'l', 'h'), ...);

类似这样的工作-使用命令,然后使用它的参数数组。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2124091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档