0

我是wp-config.php使用 wp-cli 创建 WordPress 文件。
我正在使用该选项--extra-php来附加一些 php 代码。

if ! [ -f $ROOT_DIR/wp-config.php ]; then
runuser $WEB_USER -s /bin/sh -c "\
wp config create \
  --dbhost=\"${WORDPRESS_DB_HOST:-mysql}\" \
  --dbname=\"${WORDPRESS_DB_NAME:-wordpress}\" \
  --dbuser=\"${WORDPRESS_DB_USER:-root}\" \
  --dbpass=\"$WORDPRESS_DB_PASSWORD\" \
  --skip-check \
  --extra-php <<PHP
  if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
  $_SERVER['HTTPS']='on';
  PHP"
fi

这是我需要附加到 wp-config.php 文件的代码:

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
  $_SERVER['HTTPS']='on';

$_SERVER被解释,并留空。

if (strpos(['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
['HTTPS']='on';

我试图像这样逃避它:\$_SERVER,但我得到了:

if (strpos($_SERVER[HTTP_X_FORWARDED_PROTO], https) !== false)
$_SERVER[HTTPS]='on';

所以我失去了所有的单引号。

还有其他方法可以做到这一点吗?

4

1 回答 1

2

相当混乱的报价。您不能将 here-doc 嵌入到带引号的字符串中。您可能想要使用多个 here-docs,并在要禁止变量扩展的地方使用带引号的 here-doc :

if ! [ -f "$ROOT_DIR"/wp-config.php ]; then
    # a 'quoted' here-doc
    extraphp=$(cat <<'PHP'
        if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
        $_SERVER['HTTPS']='on';
PHP
    )
    # an unquoted here-doc
    wp_command=$(cat <<WP_CONFIG
        wp config create \
            --dbhost="${WORDPRESS_DB_HOST:-mysql}" \
            --dbname="${WORDPRESS_DB_NAME:-wordpress}" \
            --dbuser="${WORDPRESS_DB_USER:-root}" \
            --dbpass="$WORDPRESS_DB_PASSWORD" \
            --skip-check \
            --extra-php "$extraphp"
WP_CONFIG
    )
    runuser "$WEB_USER" -s /bin/sh -c "$wp_config"
fi

注意引用变量的重要性

于 2018-06-20T20:03:28.917 回答