PHP 使用 exec 时缺少系统变量

PHP misses system variables when using exec

所以我有一个项目,我将 spotify 曲目 URL 发送到服务器并存储它。我使用安装了 PHP 7.4 和 windows 11 的 laragon。我使用 that 下载器。它通过 cmd 命令行工作。当我尝试手动使用它时它工作正常,但是当我通过 exec() 发送它时它不起作用。我也无法收到任何 return 消息。我尝试过使用 exec()、system() 和 shell_exec() 函数。问题可能与系统变量有关,因为这些对于 PHP 可能不可见。我也试过打开 on/off 服务器,但没有用。我还尝试将 putenv('PATH=' . $_SERVER['PATH']) 放在文件的开头。我试图检查 laragon 路径变量本身 - 我看不到我添加的这些。任何其他默认 windows 命令都可以正常工作。关于如何修复它有什么想法吗?

这是我的 PHP 代码:

function createFile($url, $token){

    function execCommand($dir, $url){
        $command1 = "cd $dir";
        $command2 = "spotdl $url";
        if(!shell_exec($command1. "&& ". $command2)) return false;
        return true;
    }

    $path = "C:\Laragon/laragon/www/temp/";  
    $dir = $path.$token.'/';
    if(!mkdir($dir, 0777)) throwError("Server error");
    if(!execCommand($dir, $url)) return false;
    return true;
}

我知道我没有 return 从控制台输出任何内容,但那是 post 更新。第二个命令肯定被调用了,我已经在其他一些命令上测试过它(比如 mkdir)

在许多 os 中,命令的错误输出 (stderr) 与正常输出 (stdout) 不同,您需要将错误重定向到 stdout。所以命令必须是:

$ command $arg1 $arg2 ... 2>&1

这导致错误消息将被发送到标准输出,当您使用系统调用时,请记住这一点。

现在在你的代码中我更喜欢使用 php

中的 exec 函数
<?php
$result = 0;
$output = [];
$command = "your command with the 2>&1";
exec($command, $output, $result);
if ($result != 0) {
    // here an error ocurred and you can see the error on the ouput array
    exit();
}
// here you know that the command was executed successfully

在 re-installing laragon 之后它起作用了。我在卸载路径变量之前已经检查过,但我还没有看到我的应该在里面。

我也修改不了,只好重装了。