首页 > 解决方案 > 在 Apache 上下文中从 bash 脚本调用时,防止 wp-cli 将 gzip'ed 流写入标准输出?

问题描述

这是一个共享主机提供商上的 Wordpress 站点。有一个 3rd 方插件将管理一个临时站点。大部分繁重的工作都是通过 bash 脚本完成的,该脚本对 wp (wp-cli) 进行了大量调用。当我从命令行或在 bash 脚本中运行 wp 时,一切都很好。当脚本在 Web 服务器的上下文中运行时(来自网页的 POST),所有 wp 输出文本都会被 gzip 压缩。

例如,执行以下操作:

INFO=$(wp --info | gunzip)
echo $INFO

将产生正确的结果...但是通过gunzip管道传输所有内容只是愚蠢且不可靠,因为它可能并不总是被gzip压缩...我假设Accept-Encoding: gzip, deflate, br来自POST的所有内容都会被它运行的所有内容继承。

这是 bash 脚本继承的环境

SERVER_SIGNATURE=Apache Server at example.com Port 443
HTTP_X_HTTPS=1
HTTP_X_REQUESTED_WITH=XMLHttpRequest
SSL_TLS_SNI=example.com
UNIQUE_ID=*****
H2_STREAM_TAG=000
HTTP_USER_AGENT=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
HTTP_X_FORWARDED_FOR=174.44.*.*
HTTP_HOST=example.com
HTTP_ORIGIN=https://example.com
SERVER_PORT=443 HTTP_X_REAL_IP=174.44.*.*
PHP_INI_SCAN_DIR=/opt/cpanel/ea-php73/root/etc:/opt/cpanel/ea-php73/root/etc/php.d:.
DOCUMENT_ROOT=/home1/example.com/public_html
HTTPS=on
SCRIPT_FILENAME=/home1/example.com/public_html/wp-admin/admin-ajax.php
REQUEST_URI=/wp-admin/admin-ajax.php
SCRIPT_NAME=/wp-admin/admin-ajax.php
SCRIPT_URI=https://example.com/wp-admin/admin-ajax.php
HTTP_CONNECTION=
REMOTE_PORT=29**
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/bin
HTTP_TE=trailers
SCRIPT_URL=/wp-admin/admin-ajax.php
CONTEXT_PREFIX=
SERVER_ADMIN=webmaster@example.com
PWD=/home1/example.com/public_html
H2_PUSHED=
REQUEST_SCHEME=https
REDIRECT_STATUS=200
HTTP_X_EIG_ORIGIN=162.241.*.*
HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.5
HTTP_REFERER=https://example.com/wp-admin/admin.php?page=staging
HTTP_ACCEPT=*/*
HTTP_DNT=1
REMOTE_ADDR=174.44.*.*
SERVER_NAME=example.com
SHLVL=2
CONTENT_LENGTH=17
no_proxy=1
H2PUSH=on
H2_PUSHED_ON=
HTTP2=on
SERVER_SOFTWARE=Apache
QUERY_STRING=
SERVER_ADDR=162.241.*.*
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/2.0
HTTP_ACCEPT_ENCODING=gzip, deflate, br
CONTENT_TYPE=application/x-www-form-urlencoded; charset=UTF-8
H2_STREAM_ID=
H2_PUSH=on
HTTP_COOKIE=<redacted>
REQUEST_METHOD=POST
CONTEXT_DOCUMENT_ROOT=/home1/example.com/public_html
OLDPWD=/home1/example.com/public_html/wp-admin
_=/bin/env

我不想在网站上禁用 gzip 压缩,这不是一个选项!我只是希望服务器本地的脚本不会在标准输出上取回压缩数据。有任何想法吗?

--TIA

标签: wordpressgzipwp-cli

解决方案


unset HTTP_ACCEPT_ENCODING在 bash 脚本中成功了。它可以防止 wp-cli 继承和使用 gzip 编码。


推荐阅读