Nov
2009
Running dotMobi WordPress Mobile Pack on PHP 4
If you, like me, are installing the dotMobi WordPress Mobile Pack on a server with PHP4 installed, and you enable the “Shrink images” feature under “Mobile Theme”, you will likely see just the header of a blog post being out put for mobile devices (and not the full content).
This feature reduces the image size (of any images in your WordPress post/page) to make it more bandwidth and screen friendly for mobile users. The problem is that it uses a PHP5-only call of file_put_contents(..), which fails without error, or logging, on my WordPress install.
To remedy the problem, I substituted the call, in 2 places, with the PHP4 equivalent calls. file_put_contents(..) is a shortcut convenience method which is the same as calling fopen(..), fwrite(..) and fclose(..).
As of version 1.1.3 of the plugin the code is under wp-content/plugins/wordpress-mobile-pack/plugins/wpmp_transcoder/ in your WordPress install directory. The 2 occurrences are in the file wpmp_transcoder.php on lines 431 and 448 respectively.
I changed
@file_put_contents($full_location, $data);
.. to ..
$fhout = @fopen($full_location, "w" );
@fwrite($fhout, $data);
@fclose( $fhout );
.. and ..
@file_put_contents("$full_location.meta", "< ?php $"."width='$width';$"."height='$height';$"."type='$type'; ?>");
.. to ..
$fhmeta = @fopen( "$full_location.meta", "w" );
@fwrite( $fhmeta, "< ?php $"."width='$width';$"."height='$height';$"."type='$type'; ?>");
@fclose( $fhmeta );
.. and all was well again.
You could also just not use the “Shrink images” feature to avoid having to mess with any code!
One Response:
Leave a Reply
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Search
Categories
Links
Tags:
Or, you could just add a snippet of code in the config file:
if (!function_exists('file_put_contents')) {
function file_put_contents($filename, $data) {
$f = @fopen($filename, 'w');
if (!$f) {
return false;
} else {
$bytes = fwrite($f, $data);
fclose($f);
return $bytes;
}
}
}
Just to make sure that you keep compatibility in case you get some updates/add-ons whatever that could insert a file_put_contents somewhere in the code. The same goes for any other PHP5 only function (most can be replicated in PHP4 as well)