Я пытаюсь создать простую программу на 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 будет отличаться в каждом.
Есть ли способ сделать это без указания всего пути?






Вы можете использовать другую переменную env со значением по умолчанию mysqldump.
Однако вам не следует использовать переменные env непосредственно в коде, загружайте их в параметры конфигурации в файлах конфигурации. env () не будет работать после кеширования конфигурации.
Однако основная проблема заключается в том, что /usr/local/mysql/bin отсутствует в вашей переменной PATH для веб-пользователя. Отсутствуют элементы переменной PHP exec $ PATH
Почему это могло бы победить цель? Переменные среды - это то место, где вы должны указать параметры, которые изменяются или являются уникальными для среды, в которой выполняется приложение.
Я хотел бы сделать это таким образом, но я не могу попросить своего пользователя найти файл mysqldump на своем компьютере
Тогда я не уверен, что понимаю ваш код. Зачем это запускать на их компьютере? Вы уже используете переменные среды для определения базы данных, если их путь к mysqldump лежит за пределами PATH среды, кажется логичным использовать ее там.
когда вы говорите другую переменную env со значением по умолчанию mysqldump. Вы имеете в виду переменную env, которая будет направлена на mysqldump? что бы победить цель, верно? id должен указывать весь путь в env, я также пробовал с конфигурацией, происходит то же самое, но да, плохое изменение конфигурации в окончательном коде