我正在尝试在 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()将不起作用。
但是,根本问题是 /usr/local/mysql/bin
不在 Web 用户的 PATH 变量中。 PHP exec $PATH variable missing elements
关于php - 在 PHP 中使用 mysqldump 而不使用整个路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52227670/