2012-07-03 83 views
1

我想使用exec()運行一個命令行util,但它不返回任何東西。我已閱讀php.net上的cmd.exe權限需要設置爲允許iis用戶運行它。我無法用我能想到的任何方法做到這一點。 cacls icacls和標準安全屏幕不工作。我將輸出記錄到mysql數據庫。PHP exec()函數windows 7 IIS 7.5

我的代碼看起來是這樣的:

$Ret = array(); 
$err = ""; 
exec("dir", $Ret, $err); 

在db我得到數組$懲戒

無論事情是錯誤的命令,我懷疑這一點,或者我需要以某種方式設置權限。

請幫忙。

+0

你是什麼意思的'在數據庫我得到數組$'Ret'?你把它轉換成一個字符串?您是否試過了,例如'print_r($ Ret)'來屏幕看看它是否仍然是空的? – mellamokb

+0

什麼版本的PHP? 5.2,5.3或5.4? – Kev

+0

PHP版本5.3.10 –

回答

0

更改行:

exec("dir", $Ret, $err); 

到:

$r = exec("dir", $Ret, $err); 
echo $r; 

您需要捕獲的exec返回值到一個變量,然後渲染。

或者嘗試運行以下命令:

<?php 
$a = array(); 
$e = ""; 

echo "exec'ing<br/>"; 
$r = exec("dir", $a, $e); 

echo "var_dumping<br/>"; 

var_dump($a); 

echo "=====================\n"; 

var_dump($e); 

echo "=====================\n"; 

var_dump($r); 

?> 

如果你在與Xdebug的瀏覽器中運行這個關閉,那麼你可能需要查看源看到的結果。

+0

如果我不想回顯我只想保存到數據庫的輸出,該怎麼辦?我無法得到那個工作。不是數據庫部分,而是獲取要保存的命令的輸出。我嘗試爲每個變量創建一個字段,例如$ cmd = exec(「dir」,$ Ret,$ err);我將$ cmd $ Ret和$ err存儲在不同的列中。我爲$ cmd和$ Ret中的數組獲得一個空白字段,並且空白$ err。我的猜測是$ cmd實際上並沒有執行,這就是爲什麼,但我怎樣才能讓它運行? –

+0

@JohnS您是否運行了我上面提供的腳本?如果是這樣,你可以粘貼輸出(如果在瀏覽器中運行,你可能需要查看源代碼)到你的問題中。 – Kev