Php 执行的应用程序不';我认不出文件。壳牌执行董事

Php 执行的应用程序不';我认不出文件。壳牌执行董事,php,windows,apache,batch-file,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

我正在使用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);
}
?>

我也试过了。 执行($cmd.2>&1“,$out,$ret)

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

更多

奇怪的是,在我自己运行Windows8的笔记本电脑上,它运行得很好。我没有问题,并且返回了预期的结果。我在几乎相同的设置上运行相同的脚本,唯一的主要区别是它运行的是Windows7而不是Windows8

两台apache服务器都在管理员帐户下运行。WHOAMI=nt权限\系统


我觉得这是某种权限问题,而不是文件路径问题。虽然我已经尝试了我能想到的一切,但我完全被难住了,任何帮助都将不胜感激。

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

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


根本原因可能是Apache最初安装在普通windows用户帐户下。该帐户随后被提升为管理员,但并非所有权限都与之相应。(我确实模模糊糊地记得更改了帐户。)

我将其移动到了sys\u get\u TEMP\u dir()返回的c:\windows\TEMP,并相应地更新了路径。我得到了相同的错误。正如我所说的,尝试另一个分区,或MyDocuments/Desktop folders。不幸的是,我没有其他分区,但是我尝试了docs文件夹、Desktop文件夹和my music文件夹,都返回了相同的错误。php将mp3的文件权限视为-rw rw rw,调用应用程序codegen.exe具有以下权限-rwxrwxffirst我以为问题是特殊字符和转义,但你说它可以在其他计算机上工作。但无论如何都要设法逃避它。