我正在執行我的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
我的感覺是它的某種權限問題而不是文件路徑。儘管我已經嘗試過所有我能想到的事情,但我完全無法理解,任何幫助都將不勝感激。
我將它移動到由sys_get_temp_dir()返回的c:\ windows \ TEMP,相應地更新了路徑。我犯了同樣的錯誤。 – Guernica
正如我所說的,嘗試另一個分區或MyDocuments/Desktop文件夾。 – Revolution88
不幸的是,我沒有另一個分區,然而我嘗試了文檔文件夾,桌面文件夾和我的音樂文件夾,都返回相同的錯誤。 – Guernica