php exec:坏的php反斜杠逃避或什么?

时间:2012-01-30 16:31:59

标签: php escaping exec

我有这个命令:

exec(sprintf('%s %s dump_data output', escapeshellarg($apps . 'pdftk' . DIRECTORY_SEPARATOR . 'pdftk.exe'), escapeshellarg(self::winEscapeShellArgFix($file, array()))), $output);

sprintf的结果是:

"\\127.0.0.1\binary\win32\pdftk\pdftk.exe" "//127.0.0.1/uploads\1-16knje01g1drjagii61j3515a94.pdf" dump_data output

从exec运行此命令将不会产生任何结果,但如果我从Windows cmd运行它将正常工作。在我尝试了数百万个命令后,我理解问题是php正在使用sprintf输出中的反斜杠作为转义反斜杠:

**\\**127......

任何人都知道为什么会这样吗?我把所有魔法都关掉了。

修改 如果我将执行:

exec("\\127.0.0.1\binary\win32\pdftk\pdftk.exe //127.0.0.1/uploads\1-16knje01g1drjagii61j3515a94.pdf dump_data output",$outarr);

exec('\\127.0.0.1\binary\win32\pdftk\pdftk.exe //127.0.0.1/uploads\1-16knje01g1drjagii61j3515a94.pdf dump_data output',$outarr);

它不起作用

EDIT2: 我调试,这不是一个逃避问题,命令实际上是好的,IT似乎是一个exec问题,而不是返回输出。它适用于iis Web服务器,但在另一个iis网络服务器中不起作用。

1 个答案:

答案 0 :(得分:2)

albanx,它不是sprintf给你做的,它是添加反斜杠的escapeshellarghttp://php.net/manual/en/function.escapeshellarg.php