This is a one line fix if you have missing string/array output from a custom WP-CLI command when using the WP Engine “SSH Gateway”.
Terminology:
-
- WP Engine is a WordPress hosting company*.
- They have an SSH Gateway – where you login to a separate machine and it will pass a limited range of useful commands to your actual server (basic file management, a MySQL console client, WP-CLI)
- WP-CLI is a timesaving WordPress command line utility.
The problem is the unorthodox way the gateway works suppresses ordinary output from certain commands – e.g. print_r
or echo
. Symptom: you run a WP-CLI command of your own through the SSH gateway and lines of text you’re expecting are missing.
First, you should switch from WP_CLI::line()
(deprecated now anyway) to WP_CLI::log()
– the line() method doesn’t work because, if you dig into the source code, you’ll see it just echos the output, however log() uses the proper wp-cli Logger class.
That’s fine if you want to output strings. Unfortunately, it doesn’t work if you need to print an array.
This does though:
fwrite( STDOUT, print_r($foo, TRUE) );
To unpack that, we’re using print_r to neatly print the array. The second argument for print_r returns its value as a string. You need not fopen STDOUT first, as you would for another file handle.
And that’s it.
* Would I recommend WP Engine? No, given I have hosting knowledge myself, and when I asked for their assistance with this particular problem, their support agent told me it was out of scope and I should look at StackOverflow, for which they have earned this mildly passive aggressive paragraph in a blog post that will sink without trace. However, many people do like them, and if you’re a WordPress developer, you may well inherit a client with a site hosted there one day.