2017-10-28 276 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

感謝您的解釋。該解決方案有效。 –

相關問題