2012-05-18 22 views
0

我有一個簡單的兩個腳本:PHP的escapeshellarg不EXEC工作(字符串中引號未封裝的)

<? 
     $str = '"<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>"'; 
     exec('phantomjs '.escapeshellarg(dirname(__FILE__).'/render.js ').''.escapeshellarg($str)); 
?> 
從控制檯運行這個時候

,我得到:

Can't open '/Users/me/render.js <!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>'

所以這個字符串不會被封裝在引號中,因爲它應該是。我在這裏做錯了什麼? 系統是OSX 10.7,php 5.3.6。

+1

你所需要的「和」我想escapeshellarg把字符串周圍的單引號反正 – Pete

回答

1

當我在OS X 10.7上試用這個相同的PHP版本時,我得到了按照預期包裹在單引號中的字符串。然而,輸出可能不是你所期望的。我會首先回應你傳遞給exec的命令,並嘗試將該命令粘貼到終端中以查看它是否有效。你會更好地看到這個問題。下面是我根據你的代碼是什麼:

$str = '"<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>"'; 
$command = 'phantomjs '.escapeshellarg(dirname(__FILE__).'/render.js '). 
      ''.escapeshellarg($str); 
echo "$command\n"; 

我得到這個:

phantomjs '/Users/me/render.js ''"<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>"' 

如果這是正確的,還是不工作,你應該檢查你的路,並確保這些文件是在腳本認爲他們是。

+0

使用您的解決方案它的工作原理,即使唯一的區別是?作爲變量分配命令 –

+0

謝謝,解決方案很簡單,很高興我能夠幫助一些人。 – EmmanuelG

0

最後工作命令:

$str = '"<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>"'; 
$command = 'phantomjs '.dirname(__FILE__).'/render.js '.$str; 

exec($command);