【问题标题】:Executed application doesn't recognise file. Shell_exec执行的应用程序无法识别文件。 Shell_exec
【发布时间】:2014-02-25 12:29:49
【问题描述】:

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

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

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

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

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

在 php over 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权威\系统

我的感觉是它的某种权限问题,而不是文件路径。尽管我已经尝试了所有我能想到的方法并且我完全被难住了,但我们将不胜感激。

【问题讨论】:

    标签: php windows apache batch-file


    【解决方案1】:

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

    【讨论】:

    • 我把它移到了 sys_get_temp_dir() 返回的 c:\windows\TEMP,相应地更新了路径。我得到同样的错误。
    • 如我所说,尝试另一个分区,或 MyDocuments/Desktop 文件夹。
    • 不幸的是我没有另一个分区,但是我尝试了 docs 文件夹、桌面文件夹和我的音乐文件夹,都返回相同的错误。
    • php 看到文件权限为 -rw-rw-rw- 对于 mp3,调用应用程序 codegen.exe 具有以下权限。 -rwxrwxrwx
    • 首先我认为问题是特殊字符和转义,但你说它可以在其他计算机上运行。但无论如何都要设法逃避它。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-02
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      相关资源
      最近更新 更多