2014-05-08 87 views
0

當我登錄到Windows Server 2008和使用的cmd.exe(作爲管理員)運行這段代碼,它的工作原理:從CMD啓動代碼但不通過PHP執行腳本......這是爲什麼?

php -f e:\path\to\file\file-name.php go 4001 

然而,當我嘗試從一個PHP文件來啓動這一點,沒有:

$cmd = escapeshellarg("php -f e:\path\to\file\file-name.php go 4001"); 
exec($cmd); 
exit; 

我已經在它6個小時,並找不到解決方案。我甚至嘗試過使用pstools來訪問psexec,但仍然沒有運氣。我甚至無法從命令行獲取psexec,因爲我似乎無法通過(go和4001)傳遞變量。

更新

當我運行使用PHP文件中的代碼,什麼也沒有發生,我想創建的文件還沒有生成,我不知道如何通過這種方法拋出錯誤。

<?php 
if(function_exists('exec')) { 
    echo "exec is enabled"; 
} 
?> 

輸出,exec已啓用。

請幫忙!

+2

「不起作用」並不能很好地描述發生了什麼事情。任何錯誤消息?日誌?實際和預期產出是多少?你的php.ini中允許使用'exec'嗎? – ccKep

+1

你需要對Windows進行雙重轉義,因爲前php會考慮你的代碼中的'\ t'作爲標籤,所以我建議你加倍轉義\斜槓,因爲你的代碼被包含在雙引號之間''' – shatheesh

+0

用雙引號'''一些php文件的路徑需要轉義也請看http://www.php.net/manual/en/function.escapeshellarg.php –

回答

0

我沒有收到任何錯誤或警告。

好了,你有這樣的:

exec($cmd); 

而且function signature是這樣的:

string exec (string $command [, array &$output [, int &$return_var ]])

更改代碼,以利用其提供的可選參數錯誤信息。

在任何情況下,您都將完整的命令編碼爲單個參數。這是行不通的:我在你的命令行中記錄了5個不同的標記,而不是一個。您必須分別編碼所有5個項目,並且您需要使用命令參數的不同功能。

此外,escapeshellarg()基本上是一個純Unix版本的功能,因此它在Windows上沒有明顯的安全問題,但它在Windows上不能正常工作,它通常會去掉字符而不是轉義。我發現了一個很容易適應獨立使用的nicer replacement at the Symfony framework

+0

這使我走上了正確的道路,謝謝。 –

相關問題