在PHP中使用mysqldump而不使用整个路径

在PHP中使用mysqldump而不使用整个路径,php,mysql,laravel,Php,Mysql,Laravel,我试图在Laravel中制作一个简单的程序,允许用户点击一个按钮,并在本地生成数据库的备份SQL $command = "/usr/local/mysql/bin/mysqldump --user=" . env('DB_USERNAME') ." --password=" . env('DB_PASSWORD') . " --host=" . env('DB_HOST') . " " . env('DB_DATABASE') . " > " . storage_path() . "/"

我试图在Laravel中制作一个简单的程序,允许用户点击一个按钮,并在本地生成数据库的备份SQL

$command = "/usr/local/mysql/bin/mysqldump --user=" . env('DB_USERNAME') ." --password=" . env('DB_PASSWORD') . " --host=" . env('DB_HOST') . " " . env('DB_DATABASE') . "  > " . storage_path() . "/" . $filename;

$returnVar = NULL;
$output = NULL;
exec($command, $output, $returnVar);
这是我当前的代码,正如您所看到的,我已经指定了mysqldump的整个路径,如果我没有指定,它只返回一个空的
.sql
。当我在终端中运行同一个命令时(没有完整的路径),它可以完美地运行,现在这段代码将在本地不同的环境(Windows、Linux、Mac)上运行,而mysqldump的路径在每个环境中都是不同的


有没有一种方法可以在不指定整个路径的情况下实现这一点?

您可以使用另一个默认为“mysqldump”的env变量

但是,您不应该在代码中直接使用env变量,而是将它们加载到配置文件中的配置参数中。一旦缓存配置,env()将无法工作


然而,潜在的问题是
/usr/local/mysql/bin
不在web用户的PATH变量中

当您说另一个默认为“mysqldump”的env变量时。你是说一个指向mysqldump的env变量吗?那会破坏目的,对吗?我将在env中指定整个路径,我也尝试过config,同样的情况也会发生,但是我会在最终代码中更改为config为什么会失败呢?在环境变量中,您可以指定更改的设置或应用程序运行环境特有的设置。我希望可以这样做,但我无法要求用户在他们的计算机上找到mysqldump文件。我不确定我是否理解您的代码。为什么这会在他们的电脑上运行?您已经在使用环境变量来定义数据库,如果它们到mysqldump的路径位于它们的环境路径之外,那么在那里使用一个似乎是合乎逻辑的。