2
Nov
2009

Running dotMobi WordPress Mobile Pack on PHP 4

Tags: , ,     Categories: Software

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:
  1. Claudiu    Fri, 10th Sep, 2010    12:33 pm   :

    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)


 

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.