在php中,我如何通过“^ |”作为可执行文件的参数
问题描述:
在PHP environemnt中我试图执行筛选(a grep-like program)返回文件名,如果两个字符串中的任何一个匹配。在php中,我如何通过“^ |”作为可执行文件的参数
// To return filenames having either string1 OR string2.
<?php
$cmd='sift.exe -l --blocksize=5000000 -Q string1^|string2 dir';
exec ($cmd);
?>
我猜我无法通过OR(^ |)运算正确。
一个匹配一个字符串它工作正常:
// To return filenames having either string1 OR string2.
<?php
$cmd='sift.exe -l --blocksize=5000000 -Q string1 dir';
exec ($cmd);
?>
有什么建议吗?
答
管道符号被执行命令的shell解释。您要么需要转义管道符号,要么引用模式参数。
这里有两个解决方案的工作:
$cmd='sift.exe -l --blocksize=5000000 -Q string1^\|string2 dir';
$cmd="sift.exe -l --blocksize=5000000 -Q 'string1^|string2' dir";
+0
非常感谢。有用。 –
答
正如比尔Karwin指出,你有逃跑的某些字符在你的命令。
PHP有escapeshellcmd功能照顾这一点,所以你的代码应该是这样的:
$cmd = 'sift.exe -l --blocksize=5000000 -Q string1^|string2 dir';
$escapedCommand = escapeshellcmd($cmd);
exec ($escapedCommand);
可选择使用escapeshellarg功能。
看看这个question看看需要转义的字符。
+0
感谢您的解释。该解决方案有效。 –
请记住习惯上调帮助您的答案,并检查最直接解决问题的答案的“接受答案”复选标记。 –