9

I am using wp-cli and I am having php notices and errors show up when running wp-export. Some of these warnings and errors are ending up in the output file. How can I force errors to NOT show up. I have tried ini_set('display_errors', 0); and error_reporting(0); in wp-wp-config.php

root@roc-apache-4:/var/www/blogs/html# wp export --quiet=true --debug=false --url=http://blogs.democratandchronicle.com/fleet-feet-beat/ --dir=/root/wordpress_exports --file_item_count=100000000
PHP Notice:  date_default_timezone_set(): Timezone ID 'America/New York' is invalid in phar:///usr/bin/wp/php/wp-cli.php(21) : eval()'d code on line 16
PHP Notice:  Constant ABSPATH already defined in phar:///usr/bin/wp/php/wp-cli.php(21) : eval()'d code on line 68
PHP Notice:  Undefined index: combineCommentCounts in /var/www/blogs/html/wp-content/plugins/facebook-comments-for-wordpress/facebook-comments.php on line 265

Notice: Undefined index: combineCommentCounts in /var/www/blogs/html/wp-content/plugins/facebook-comments-for-wordpress/facebook-comments.php on line 265
PHP Notice:  define() was called with an argument that is <strong>deprecated</strong> since version 3.0! The constant <code>VHOST</code> <strong>is deprecated</strong>. Use the boolean constant <code>SUBDOMAIN_INSTALL</code> in wp-config.php to enable a subdomain configuration. Use is_subdomain_install() to check whether a subdomain configuration is enabled. in /var/www/blogs/html/wp-includes/functions.php on line 3466

4 Answers 4

4

First, you have to do your PHP error settings in your php.ini file unless the PHP ini directives don't list it as PHP_INI_ALL - which is the case for nearly error related definition.

So I'm assuming you just misread something and set stuff to wp_settings.php instead of wp-config.php.

The next point is that WP CLI might run WP in different cases without some stuff loaded, so it could get bypassed.

The safest point to set some php.ini stuff always is your php.ini file. And if you can't work around errors: Go and fix them - that's what errors, warnings and notices are for. If it's a plugin causing it, send a pull request and notify the author.


Note: If you are in/on your Terminal/Command Line, you can use php --ini to list all locations where your php.ini files are stored. Some operating systems support different locations per default. And some packages like XDebug have additional locations per default.

Example php --ini result on Windows:

Configuration File (php.ini) Path: C:\Windows
Loaded Configuration File:         C:\dev\php\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

Example php --ini result on Ubuntu 12.04 LTS:

Configuration File (php.ini) Path: /etc/php5/cli
Loaded Configuration File:         /etc/php5/cli/php.ini
Scan for additional .ini files in: /etc/php5/cli/conf.d
Additional .ini files parsed:      /etc/php5/cli/conf.d/05-opcache.ini,
/etc/php5/cli/conf.d/10-pdo.ini,
/etc/php5/cli/conf.d/20-curl.ini,
/etc/php5/cli/conf.d/20-gd.ini,
/etc/php5/cli/conf.d/20-json.ini,
/etc/php5/cli/conf.d/20-mysql.ini,
/etc/php5/cli/conf.d/20-mysqli.ini,
/etc/php5/cli/conf.d/20-pdo_mysql.ini,
/etc/php5/cli/conf.d/20-readline.ini,
3
  • I have tried php.ini for cli and apache2 and display_errors is Off. I did try adding error_reporting(0); @ini_set('display_errors', 0); to wp-config.php. I don't have the time to e-mail plugin owners. I just need errors to NOT show up. Commented May 21, 2013 at 18:28
  • 3
    It appears the problem was due to log_errors = On. In CLI mode it was logging errors to screen Commented May 21, 2013 at 18:41
  • 2
    Nice, that you found a solution. But honestly: You don't have time to mail authors? Come on. You're using software for free but ain't got time for error reports while you got time to dig in it, play around with it, ask questions about it and then comment on it? Again: Come on. This is the minimum an author could expect.
    – kaiser
    Commented May 21, 2013 at 23:33
2

You can use the --require= argument to include a file that sets error reporting level and whether or not to display errors. I did something similar to this in a shell script:

# Suppress errors by including this generated file
echo "<?php error_reporting(0); @ini_set('display_errors', 0);" > __pre.php

rc=0

for i in 905 1000 10001; do
    wp --quiet --no-color --user=admin --require=./__pre.php \
        post update $i --post_status=draft \
           || (rc=1 && break)
done

rm -f __pre.php
exit $rc

Note the ./ because it will not default to the local path but will use PHP's include_path. Need to bypass that in this case.

If you do not suppress the errors, any PHP notice will cause an exit status of non-zero. Not desirable in my case because I want the loop to stop as soon as any real error occurs.

1
  • Using the --require option and adding those error_reporting functions doesn't seem to work for me :(
    – Benno
    Commented Apr 4, 2016 at 0:26
1

My solution to disable notices etc is to know if the wp-config.php is call via cli or not. So put this little code in wp-config.php

$sapi_type = php_sapi_name();
if ( $sapi_type == 'cli' ) {
    define( 'WP_DEBUG', false );
} else {
    define( 'WP_DEBUG', true );
}
1
  • Most excellent. Funnily enough, the cli shows a different set of warnings if debug is set to false.
    – brasofilo
    Commented Apr 4, 2023 at 13:27
0

There are likely 2 php.ini files

  • /etc/php/7.0/cli/php.ini This is for your Command Line Interface (CLI)
  • /etc/php/7.0/apache2/php.ini This is for your Web Server, in this case Apache2

To update what errors are reported on the command line, update the error_reporting line in the cli/php.ini

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.