2017-10-28 271 views
2

在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); 
?> 

有什么建议吗?

+0

请记住习惯上调帮助您的答案,并检查最直接解决问题的答案的“接受答案”复选标记。 –

回答

1

管道符号被执行命令的shell解释。您要么需要转义管道符号,要么引用模式参数。

这里有两个解决方案的工作:

$cmd='sift.exe -l --blocksize=5000000 -Q string1^\|string2 dir'; 

$cmd="sift.exe -l --blocksize=5000000 -Q 'string1^|string2' dir"; 
+0

非常感谢。有用。 –

1

正如比尔Karwin指出,你有逃跑的某些字符在你的命令。

PHP有escapeshellcmd功能照顾这一点,所以你的代码应该是这样的:

$cmd = 'sift.exe -l --blocksize=5000000 -Q string1^|string2 dir'; 
$escapedCommand = escapeshellcmd($cmd); 
exec ($escapedCommand); 

可选择使用escapeshellarg功能。

看看这个question看看需要转义的字符。

+0

感谢您的解释。该解决方案有效。 –

相关问题