2014-02-25 62 views
0

我正在執行我的Apache服務器上的文件與PHP,我已經嘗試了各種方法,Windows批處理文件本身執行並返回結果。執行的應用程序無法識別文件。 Shell_exec

我已經簡化我的批處理文件如下

c:\code\codegen.exe "c:\47.mp3" 0 30 

Codegen.exe是Echonest編譯指紋識別工具。

在Windows GUI中運行批處理文件返回預期結果。

當在php中通過apache執行時,我得到錯誤。

c:\code\codegen.exe "c:\47.mp3" 0 30 [ {"error":"could not decode", "tag":0, "metadata":{"filename":"c:\\47.mp3"}} ] 

返回的錯誤與codegen.exe無法找到該文件一致,換句話說,File Not Found。在該錯誤消息的後半部分,codegen.exe使用斜槓轉義斜槓是正常的。

以下PHP腳本我用於執行

<?php 

$command = 'c:\\root\\test.bat'; 

$input = '1'; 

$descriptors = array(
    0 => array("pipe", "r"), // stdin 
    1 => array("pipe", "w"), // stdout 
); 

$ps = proc_open($command, $descriptors, $pipes); 

if(is_resource($ps)){ 
    fwrite($pipes[0], $input); 
    fclose($pipes[0]); 

    while(!feof($pipes[1])){ 
     echo fread($pipes[1], 4096); 
    } 
    fclose($pipes[1]); 

    $output = proc_close($ps); 
    echo $output; 
    if($output!=0){ 
     trigger_error("Command returned $output", E_USER_ERROR); 
    } 

}else{ 
    trigger_error('Could not execute command', E_USER_ERROR); 
} 
?> 

我也嘗試。 exec($ cmd。「2> & 1」,$ out,$ ret);

再次批處理文件執行,但codegen.exe無法識別路徑,我也嘗試shell_exec具有相同的結果。

更多..

什麼奇怪的是,在我自己的筆記本電腦上運行Windows 8的正常工作。我沒有問題,並返回預期的結果。我有幾乎相同的設置運行相同的腳本,唯一的主要區別是它運行的是Windows 7而不是Windows 8.

兩個Apache服務器都以管理員帳戶運行。 WHOAMI = nt authority \ system

我的感覺是它的某種權限問題而不是文件路徑。儘管我已經嘗試過所有我能想到的事情,但我完全無法理解,任何幫助都將不勝感激。

回答

0

這確實是一個權限問題,我不確定問題本身,但通過向計算機添加新的管理員帳戶並在該帳戶的上下文中執行Windows服務,找到了解決方案。

根本原因可能是Apache最初安裝在正常的Windows用戶帳戶下。該帳戶已被提升爲管理員,並不是所有的權限都與它一起使用。 (我隱約記得改變帳戶。)

0

嘗試將該文件複製到D:\somewhere\47.mp3以檢查是否有權限問題。

+0

我將它移動到由sys_get_temp_dir()返回的c:\ windows \ TEMP,相應地更新了路徑。我犯了同樣的錯誤。 – Guernica

+0

正如我所說的,嘗試另一個分區或MyDocuments/Desktop文件夾。 – Revolution88

+0

不幸的是,我沒有另一個分區,然而我嘗試了文檔文件夾,桌面文件夾和我的音樂文件夾,都返回相同的錯誤。 – Guernica

相關問題