Here is a slightly modified version of the php script by Zankar above that dumps the config commands to the console instead of in an HTML page.
I create a file called: config-php-to-config-cli.php
<?php
$skip = [
'customer/address_templates/html',
// add any config paths you might want to avoid importing
];
$config = include './mag_configs/dev.config.php'; // this is the dumped config backup
$i = 0;
echo 'cd $mroot';
echo "\n";
echo "set -v\n"; //so that you can see the commands being executed
foreach ($config['system'] as $l0 => $l0items) {
if ($l0 == 'default') {
foreach ($l0items as $l1 => $l1items) {
foreach ($l1items as $l2 => $l2items) {
if (!is_array($l2items)) { continue; }
foreach ($l2items as $key => $value) {
if (in_array("$l1/$l2/$key", $skip)) {
continue;
}
$buffer = "bin/magento config:set $l1/$l2/$key";
if (is_string($value)) {
$buffer .= ' "' . str_replace('"', '\"', $value) . '";';
//echo '\n\n echo "#'.$i++.' - Setting : ' . $l1.'/'.$l2.'/'.$key.'";\n\n';
echo "$buffer\n";
} else {
continue;
}
}
}
}
} else {
foreach ($l0items as $scope => $items) {
if (in_array($scope, ['admin', 'default'])) {
continue;
}
foreach ($items as $l1 => $l1items) {
foreach ($l1items as $l2 => $l2items) {
if (!is_array($l2items)) { continue; }
foreach ($l2items as $key => $value) {
if (in_array("$l1/$l2/$key", $skip)) {
continue;
}
$buffer = "bin/magento config:set $l1/$l2/$key --scope website --scope-code $scope";
if (is_string($value)) {
$buffer .= ' "' . str_replace('"', '\"', $value) . '";';
//echo '\n\necho "#'.$i++.' - Setting : ' . $l1.'/'.$l2.'/'.$key.' for website ' . $scope .'";\n\n';
echo "$buffer\n";
} else {
continue;
}
}
}
}
}
}
}
echo "bin/magento setup:upgrade\n";
echo "bin/magento setup:di:compile\n";
echo "bin/magento setup:static-content:deploy -f\n";
echo "bin/magento cache:flush config\n";
echo "set +v\n"; //so that you can see the commands being executed
?>
and then I create a bash script with these contents:
php config-php-to-config-cli.php > cli-config-dev.sh
echo Generated ./cli-config-dev.sh
Oh and here is the config.php file you can use to go back to an unlocked config:
<?php
return [
'modules' => [
'Magento_Store' => 1,
'Magento_Directory' => 1,
'Magento_Theme' => 1,
'Magento_Backend' => 1,
'Magento_Variable' => 1,
'Magento_Eav' => 1,
'Magento_AdminNotification' => 1,
'MSP_ReCaptcha' => 1,
'Magento_Config' => 1,
'Magento_Indexer' => 1,
'Magento_AdvancedPricingImportExport' => 1,
'Magento_Search' => 1,
'Magento_Amqp' => 1,
'Magento_Security' => 1,
'Magento_User' => 1,
'Magento_Authorization' => 1,
'Magento_Customer' => 1,
'Magento_Rule' => 1,
'Magento_Backup' => 1,
'Magento_Cms' => 1,
'Magento_Catalog' => 1,
'Magento_GraphQl' => 1,
'Magento_BundleImportExport' => 1,
'Magento_CatalogRule' => 1,
'Magento_CacheInvalidate' => 1,
'Magento_Quote' => 1,
'Magento_SalesSequence' => 1,
'Magento_Integration' => 1,
'Magento_EavGraphQl' => 1,
'Magento_CatalogImportExport' => 1,
'Magento_Payment' => 1,
'Magento_CatalogInventory' => 1,
'Magento_Cron' => 1,
'Magento_Msrp' => 1,
'Magento_CatalogSearch' => 1,
'Magento_Sales' => 1,
'Magento_Checkout' => 1,
'Magento_CatalogUrlRewrite' => 1,
'Magento_CatalogUrlRewriteGraphQl' => 1,
'Magento_Widget' => 1,
'Magento_Vault' => 1,
'Magento_CheckoutAgreements' => 1,
'Magento_Paypal' => 1,
'Magento_CmsGraphQl' => 1,
'Magento_Downloadable' => 1,
'Magento_CmsUrlRewrite' => 1,
'Magento_CmsUrlRewriteGraphQl' => 1,
'MSP_TwoFactorAuth' => 1,
'Magento_ConfigurableImportExport' => 1,
'Magento_UrlRewrite' => 1,
'Magento_StoreGraphQl' => 1,
'Magento_ConfigurableProduct' => 1,
'Magento_GroupedProduct' => 1,
'Magento_Contact' => 1,
'Magento_Cookie' => 1,
'Magento_Email' => 1,
'Magento_CurrencySymbol' => 1,
'Klarna_Core' => 1,
'Magento_Analytics' => 1,
'Magento_CustomerGraphQl' => 1,
'Magento_CustomerImportExport' => 1,
'Magento_SampleData' => 1,
'Magento_Deploy' => 1,
'Magento_Developer' => 1,
'Magento_Dhl' => 1,
'Amazon_Core' => 1,
'Magento_Tax' => 1,
'Magento_CatalogGraphQl' => 1,
'Magento_ImportExport' => 1,
'Magento_Weee' => 1,
'Magento_Authorizenet' => 1,
'Magento_BundleGraphQl' => 1,
'Magento_AdvancedSearch' => 1,
'Magento_Newsletter' => 1,
'Magento_EncryptionKey' => 1,
'Magento_Fedex' => 1,
'Magento_GiftMessage' => 1,
'Magento_GoogleAdwords' => 1,
'Magento_GoogleAnalytics' => 1,
'Magento_Ui' => 1,
'Magento_ConfigurableProductGraphQl' => 1,
'Magento_GroupedImportExport' => 1,
'Magento_CatalogRuleConfigurable' => 1,
'Magento_GroupedProductGraphQl' => 1,
'Magento_CatalogSampleData' => 1,
'Magento_DownloadableImportExport' => 1,
'Magento_Braintree' => 1,
'Magento_InstantPurchase' => 1,
'Magento_CatalogAnalytics' => 1,
'Magento_Inventory' => 1,
'Magento_InventoryAdminUi' => 1,
'Magento_InventoryApi' => 1,
'Magento_InventoryBundleProduct' => 1,
'Magento_InventoryBundleProductAdminUi' => 1,
'Magento_InventoryCatalog' => 1,
'Magento_InventorySales' => 1,
'Magento_InventoryCatalogAdminUi' => 1,
'Magento_InventoryCatalogApi' => 1,
'Magento_InventoryCatalogSearch' => 1,
'Magento_InventoryConfigurableProduct' => 1,
'Magento_InventoryConfigurableProductAdminUi' => 1,
'Magento_InventoryConfigurableProductIndexer' => 1,
'Magento_InventoryConfiguration' => 1,
'Magento_InventoryConfigurationApi' => 1,
'Magento_InventoryDistanceBasedSourceSelection' => 1,
'Magento_InventoryDistanceBasedSourceSelectionAdminUi' => 1,
'Magento_InventoryDistanceBasedSourceSelectionApi' => 1,
'Magento_InventoryElasticsearch' => 1,
'Magento_InventoryGroupedProduct' => 1,
'Magento_InventoryGroupedProductAdminUi' => 1,
'Magento_InventoryGroupedProductIndexer' => 1,
'Magento_InventoryImportExport' => 1,
'Magento_InventoryIndexer' => 1,
'Magento_InventoryLowQuantityNotification' => 1,
'Magento_InventoryLowQuantityNotificationAdminUi' => 1,
'Magento_InventoryLowQuantityNotificationApi' => 1,
'Magento_InventoryMultiDimensionalIndexerApi' => 1,
'Magento_InventoryProductAlert' => 1,
'Magento_InventoryReservations' => 1,
'Magento_InventoryReservationsApi' => 1,
'Magento_InventoryCache' => 1,
'Magento_InventorySalesAdminUi' => 1,
'Magento_InventorySalesApi' => 1,
'Magento_InventorySalesFrontendUi' => 1,
'Magento_InventorySetupFixtureGenerator' => 0,
'Magento_InventoryShipping' => 1,
'Magento_Shipping' => 1,
'Magento_InventorySourceDeductionApi' => 1,
'Magento_InventorySourceSelection' => 1,
'Magento_InventorySourceSelectionApi' => 1,
'Magento_LayeredNavigation' => 1,
'Magento_Marketplace' => 1,
'Magento_MediaStorage' => 1,
'Magento_MessageQueue' => 1,
'Magento_GroupedProductSampleData' => 1,
'Magento_MsrpSampleData' => 1,
'Magento_Multishipping' => 1,
'Magento_MysqlMq' => 1,
'Magento_NewRelicReporting' => 1,
'Magento_ProductAlert' => 1,
'Magento_OfflinePayments' => 1,
'Magento_SalesRule' => 1,
'Magento_OfflineShipping' => 1,
'Magento_PageCache' => 1,
'Magento_Captcha' => 1,
'Klarna_Ordermanagement' => 1,
'Magento_Persistent' => 1,
'Magento_Reports' => 1,
'Magento_Bundle' => 1,
'Magento_ProductVideo' => 1,
'Amazon_Login' => 1,
'Magento_QuoteAnalytics' => 1,
'Magento_QuoteGraphQl' => 1,
'Magento_ReleaseNotification' => 1,
'Magento_Review' => 1,
'Magento_RequireJs' => 1,
'Magento_SendFriend' => 1,
'Magento_ReviewAnalytics' => 1,
'Magento_BundleSampleData' => 1,
'Magento_Robots' => 1,
'Magento_Rss' => 1,
'Magento_ThemeSampleData' => 1,
'Amazon_Payment' => 1,
'Magento_SalesAnalytics' => 1,
'Magento_SalesInventory' => 1,
'Magento_OfflineShippingSampleData' => 1,
'Magento_DownloadableSampleData' => 1,
'Magento_TaxSampleData' => 1,
'Magento_ConfigurableSampleData' => 1,
'Magento_ProductLinksSampleData' => 1,
'Magento_Elasticsearch' => 1,
'Magento_CustomerAnalytics' => 1,
'Magento_Wishlist' => 1,
'Magento_InventoryShippingAdminUi' => 1,
'Magento_Signifyd' => 1,
'Magento_Sitemap' => 1,
'Magento_CatalogInventoryGraphQl' => 1,
'Magento_DownloadableGraphQl' => 1,
'Magento_Webapi' => 1,
'Magento_SwaggerWebapi' => 1,
'Magento_SwaggerWebapiAsync' => 1,
'Magento_Swatches' => 1,
'Magento_SwatchesGraphQl' => 1,
'Magento_SwatchesLayeredNavigation' => 1,
'Magento_SwatchesSampleData' => 1,
'Magento_ReviewSampleData' => 1,
'Magento_TaxGraphQl' => 1,
'Magento_TaxImportExport' => 1,
'Magento_CustomerSampleData' => 1,
'Magento_TestModuleAsyncAmqp' => 1,
'Magento_TestModuleDirectoryZipCodes' => 1,
'Magento_TestModuleExtensionAttributes' => 1,
'Magento_TestModuleFakePaymentMethod' => 1,
'Magento_TestModuleMessageQueueConfigOverride' => 1,
'Magento_TestModuleMessageQueueConfiguration' => 1,
'Magento_TestModuleSample' => 1,
'Magento_TestModuleSynchronousAmqp' => 1,
'Magento_TestModuleWysiwygConfig' => 1,
'Magento_ConfigurableProductSales' => 1,
'Magento_CmsSampleData' => 1,
'Magento_Tinymce3' => 1,
'Magento_Translation' => 1,
'Magento_GoogleOptimizer' => 1,
'Magento_Ups' => 1,
'Magento_SalesSampleData' => 1,
'Magento_UrlRewriteGraphQl' => 1,
'Magento_AsynchronousOperations' => 1,
'Magento_Usps' => 1,
'Magento_CatalogRuleSampleData' => 1,
'Klarna_Kp' => 1,
'Magento_Version' => 1,
'Magento_Swagger' => 1,
'Magento_WebapiAsync' => 1,
'Magento_WebapiSecurity' => 1,
'Magento_SalesRuleSampleData' => 1,
'Magento_WeeeGraphQl' => 1,
'Magento_CatalogWidget' => 1,
'Magento_WidgetSampleData' => 1,
'Dotdigitalgroup_Email' => 1,
'Magento_WishlistAnalytics' => 1,
'Magento_WishlistSampleData' => 1,
'Temando_Shipping' => 1,
'Vertex_Tax' => 1
]
];