我正在使用Symfony 的控制台组件编写一些命令行工具,其中一个使用 WP-CLI 来设置 WordPress 站点。特别是使用wp option update
我遇到了 JSON 和引号的问题。
例如,运行类似:
shell_exec("wp option update blogdescription ''");
结果在数据库中的文字''
。事实上,每当我使用该命令时,如果它成功,我尝试在数据库中设置的任何内容都包含在单引号中。
然后是这样的:
$github_updater_args = [
'github_access_token'=>'',
'bitbucket_username'=>'username',
'bitbucket_password'=>'password',
'all-in-one-seo-populate-keywords'=>'1'
];
$github_updater_args = json_encode($github_updater_args);
var_dump($github_updater_args);
shell_exec("wp option update github_updater '$github_updater_args' --format=json");
转储结果:
string(200) "{"github_access_token":"","bitbucket_username":"devs@webspecdesign.com","bitbucket_password":"xxxxxxxxx","webspec-design-wordpress-core":"1","all-in-one-seo-populate-keywords":"1","webspec-smtp":"1"}"
这是有效的 JSON,但该wp
命令导致以下结果:
Error: Invalid JSON: '{github_access_token:,bitbucket_username:username,bitbucket_password:password,all-in-one-seo-populate-keywords:1}'
您会注意到引号已被删除,我认为这就是它所抱怨的?或者这就是它转储错误的方式?
无论哪种方式,然后我决定对 JSON 进行硬编码,所以只需:
shell_exec('wp option update github_updater \'{"github_access_token": "", "bitbucket_username": "username", "bitbucket_password": "password"}\' --format=json');
这给了我以下错误:
错误:位置参数太多:,bitbucket_username:用户名,bitbucket_password:密码}'
我打赌这两个问题是相关的。我想这可能是一个 WP-CLI 问题,所以我在那里打开了一个问题,但没有得到答案就关闭了。然而,我越是盯着它看,我就越觉得它可能是 Symfony 的东西。也许我肯定需要使用流程组件而不是shell_exec
?这就是它的设计目的吗?
更新:尝试了 Symfony 进程组件:
$process = new Process("wp option update blogdescription ''");
$process->run();
仍然得到我的两个报价。所以那里什么也没做。