【发布时间】:2019-10-01 15:06:32
【问题描述】:
我在 Elastic Beanstalk 上托管一个 Laravel 应用程序。我有一个运行 mysqldump 的工匠命令:
$command = 'mysqldump -h%s -u%s -p%s %s > ' . storage_path($filename);
$c = sprintf(
$command,
config('database.connections.host'),
config('database.connections.username'),
config('database.connections.password'),
$destinationDatabase
);
$this->process = new Process($c);
当密码(我存储在环境变量中)没有美元符号时,此方法有效。但是当密码中确实有美元符号时,它会被切断,然后命令就会失败。例如。如果密码是“test$me”,我得到这个错误:
“mysqldump -hhostname.eu-central-1.rds.amazonaws.com -urandomname -ptest db_name > db.sql”命令失败
即它不是插入“test$me”作为密码,而是插入“test”。
我尝试在环境变量中的密码周围添加单引号,同样的事情发生了:
“mysqldump -hhostname.eu-central-1.rds.amazonaws.com -urandomname -p'test' db_name > db.sql”命令失败
【问题讨论】:
-
在 $ 之前添加转义反斜杠会有所不同吗?喜欢这个'test\$me'吗?
-
你能显示你的配置文件吗?
-
创建一个只有 php 文件可以加载的 my.cnf 文件并改用它可能会更好。
-
但是根据superuser.com/questions/123928/…,你应该可以在命令行中使用单引号,只要配置文件中也有单引号中的密码
标签: php laravel amazon-web-services amazon-elastic-beanstalk