执行的应用程序无法识别文件。了shell_exec

时间:2014-02-25 12:29:49

标签: php windows apache batch-file

我正在使用php在我的Apache服务器上执行一个文件,我尝试了各种方法,Windows批处理文件本身确实执行并返回结果。

我已将我的批处理文件简化如下

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

Codegen.exe是Echonest编译的指纹识别工具。

从Windows GUI中运行批处理文件将返回预期的结果。

当在apache中执行php时,我得到了错误。

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

返回的错误与codegen.exe无法找到文件一致,换句话说,找不到文件。在该错误消息的后半部分,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&gt;&amp; 1”,$ out,$ ret);

批处理文件再次执行但是codegen.exe无法识别路径,我也尝试了具有相同结果的shell_exec。

更多..

奇怪的是,在我自己的笔记本电脑上运行Windows 8它运行正常。我没有问题,并返回预期的结果。我在相同的设置上运行相同的脚本,唯一的区别是它运行的是Windows 7而不是Windows 8.

两个apache服务器都在管理员帐户下运行。 WHOAMI = nt authority \ system

我的感觉是它的某种权限问题而不是文件路径。虽然我已经尝试了所有我能想到的东西而且我完全难过,但是我们将非常感激任何帮助。

2 个答案:

答案 0 :(得分:0)

尝试将该文件复制到D:\somewhere\47.mp3以检查是否存在权限问题。

答案 1 :(得分:0)

这确实是一个权限问题,我不确定问题本身,但通过向计算机添加新的管理员帐户并在该帐户的上下文下执行Windows服务找到了解决方案。

根本原因可能是Apache最初安装在普通的Windows用户帐户下。该帐户随后被提升为管理员,并非所有权限都随之而来。 (我隐约记得改变帐户。)