After a recent update of our Advanced Ads ad management plugin a few users contacting us regarding 500 or 502 errors in their WordPress frontend, which practically meant a blank page.

It took me a while to identify the following line as the cause, since it worked perfectly on all of our sites:

if ( method_exists( 'Advanced_Ads_Tracking_Plugin' , 'check_ad_tracking_enabled' ) ) {Code language: JavaScript (javascript)

This line basically checks if a function in our Tracking add-on exists in order to add a compatibility fix.

Even though we were able to fix it by rewriting this line I wanted to know what caused this, so we kept digging.

We were finally able to reproduce the error on the following server setup:

  • CentOS release 6.8
  • Apache/2.2.15
  • PHP Version 5.3.29, Apache module
  • Zend Guard Loader v3.3

The most important part here is Zend Guard Loader.

The following error showed up in the Apache error_log:

[notice] child pid 20475 exit signal Segmentation fault (11)Code language: CSS (css)

There is no error given in the debug.log of WordPress, this is why it took us a while.

The problem is basically only happening to those without the Tracking add-on installed and Zend Guard Loader running on the server.

The fix is simple. Just check if the class exists using class_exists . Hence, our line from above looks like this:

if ( class_exists ('Advanced_ads_Tracking_Plugin') 
    && method_exists( 'Advanced_ads_Tracking_Plugin' , 'check_ad_tracking_enabled' ) ) {Code language: JavaScript (javascript)

Bottom line: we always check the class individually now.

If this helped you to find a bug and fix a problem, take a look at Advanced Ads and support us.

The Author