Over the past several months I have been working hard on a new plugin for WordPress and now I am pleased to unveil the initial release.
Updraft is a backup and restore plugin for WordPress. It can do scheduled or one time backups of your plugins, themes, uploads, and DB itself. These backups can be kept locally, emailed, sent to an FTP server, uploaded to Rackspace Cloud Files, or transferred to Amazon S3.1
Additionally, you can pick the number of backups to retain and restore from a backup of your choice either by using a local backup, uploading copies yourself, or pulling them down from your cloud service.2
Visit the Updraft homepage to learn more, see a screencast, and give feedback on bugs or features you’d like to see. I look forward to hearing from you!
WP 2.9 is out. The upgrade went quite smoothly here, but be sure you upgrade your plugins before running the core upgrade! Fidgetr and CDN Tools are both 2.9 compatible already, so if you have the latest versions you’re set.
One of the big problems I’ve run into as a WordPress plugin developer is the diversity of PHP installations. Simply stating you only support PHP5 and greater is insufficient to ensure compatibility. Things you may take for granted in your development environment may be missing or worse, partially functional. I’ve decided to document a few of the bigger “gotchas” I’ve run into so future WordPress hackers will have a starting point for investigating problems.
One easy way to reduce compatibility confusion is specifying a minimum version of PHP for your WordPress plugin or widget. To do so you can use PHP’s version_compare function:
if(version_compare(PHP_VERSION, '5.0.0','<')) { die(sprintf('You are currently running PHP version %s and you must have at least PHP 5.0.x', PHP_VERSION)); } |
Take a look at the version_compare documentation for more information.
The biggest single thing to remember is that any module for PHP is optional. If you want to require something like curl, that’s great, but be aware that some non-trivial percentage of your potential users may not have it. Still want to use that module? Test for its presence during the instantiation of your plugin and die if it’s not present. This will prevent users from being able to successfully install your “broken” product if they don’t have the proper requirements.
Sometimes you’ll find yourself using functions you think are core to PHP like “mime_content_type”. This is not the case. In fact, I have frequently run into PHP installations that have no MIME detection facilities at all. Consider writing a fallback for suffix detection1 in addition to coding for mime_content_type and the finfo_* methods.
Another common issue is safe_mode and open_basedir. These flags enforce certain security restrictions (must have the same group as PHP when writing to a directory, can’t open files beneath the basedir, et cetera). However, they also impact some modules. For instance, using curl you can’t use CURLOPT_FOLLOWLOCATION. This will trigger the error “CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set”.
I’ve already talked a bit about the curl module, but you may also be tempted to use file_get_contents() assuming allow_url_fopen is enabled. This is very frequently untrue in shared hosting environments. Luckily, you don’t need to rely on curl or allow_url_fopen or write your own fsockopen() wrapper class. Instead, WordPress has integrated Snoopy into the core. Invoking it to fetch just the contents of a URL could not be easier!
require_once( ABSPATH . 'wp-includes/class-snoopy.php'); $snoopy = new Snoopy(); $result = $snoopy->fetch($url); if($result) { $response = $snoopy->results; } |
Just hit up Google for the class docs to learn everything Snoopy can do for you.
There are many more where these came from, so drop your problems and solutions in the comments!
I’ve spent quite a bit of time on CDN Tools and Fidgetr in the past few weeks and this has cut back on the time I had planned to use to write blog entries. I’ll try to get a few new articles up soon, but in the mean time here is a status update on some projects you might be interested in…
CDN Tools (v0.9x and higher) is now compatible with WordPress 2.8+ and features a wide variety of reliability upgrades for various installation quirks. I will be testing it shortly with WP 2.9 and expect to have a compatible version out prior to that release. There are also some fun new features in the pipeline that will hopefully see the light of day in the next few weeks.
Regarding Fidgetr; I have decided to port the widget to the new WP 2.8 multi-widget API (which is adapted from the firetree multi-widget class). While doing so I discovered that my previous assumptions about a single Fidgetr widget per WordPress page made porting quite difficult. This necessitated an almost total rewrite of the core (and major modifications to the accompanying themes). At this time I have the new widget mostly working, but there are many cosmetic bugs to resolve with the themes. That said, I’m excited to offer this feature for those who desire it. I have no targeted release date, but Fidgetr 2.0 will require WP 2.8+. Fidgetr 1.3.5 is almost certainly the last 2.7 compatible release.