我有一个PHP脚本需要执行程序,该程序可以处理名称中有空格的文件。大多数用于执行外部命令的PHP函数(例如exec()
)需要1个字符串参数才能执行命令行。但是,您必须执行诸如escapeshellarg()
之类的操作才能确保您的输入安全。通过传递数组来执行外部命令,文件名中有空格
有什么方法可以在PHP中用数组执行外部命令。因此,而不是:
exec("ls -l ".escapeshellarg($filename));
我可以去:
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
我知道这很明显,但对于任何其他人来说:从不根据用户输入运行外部命令。如果该脚本不在任何Web服务器上,那么很好,但除此之外,请确保您检查,仔细检查并再次检查5次,以致任何人都无法使用此脚本执行任何不应该执行的命令。 – Matchu 2010-01-23 18:05:46