Show all my active WordPress plugins

ript>

Recently, I needed to get a list of every plugin that I’ve activated on all of my WordPress local-hosted blogs.
So, instead of going to every blog’s dashboard and noting down the list of every active plugin, I decided to write a quick (and dirty, i.e. not optimized) script.


<?php
// initialize variables [you have to change them to their proper values]
$dbhost = "localhost";
$dbuser = "dbuser";
$dbpass = "dbpassword";

// connect to MySQL and get all database names
$db = mysql_connect( $dbhost, $dbuser, $dbpass)
      or die( "MySQL connection problem: " . mysql_error());

mysql_set_charset( "utf8");
mysql_select_db( "information_schema", $db) or die( mysql_error());
$sql = "SELECT SCHEMA_NAME FROM SCHEMATA";
$u0 = mysql_query( $sql, $db) or die( mysql_error());
$alldb = array();
while ($u1 = mysql_fetch_row( $u0)) { $alldb[] = $u1[ 0]; }

// select each database found and check for active plugins
foreach( $alldb as $adb) {
    $conn = mysql_select_db( $adb, $db);

    // get *_options table name
    $sql = "SHOW TABLES FROM $adb LIKE '%_options'";
    $u0 = mysql_query( $sql, $db); // or continue;
    while ($u1 = mysql_fetch_row( $u0)) {
        if ($opt = $u1[0]) {
            // get active plugins list
            $sql = "SELECT * FROM $opt WHERE option_name='active_plugins'";
            $u00 = mysql_query( $sql, $db);
            if ($u01 = mysql_fetch_array( $u00)) {
                $apj = $u01[ 'option_value'];
                if ($apj) {
                    $ap = unserialize( $apj);
                    foreach( $ap as $apv)
                        echo "Database: $adb >>> $apvn";
                }
            }
        }
    }
}

mysql_close( $db);
?>

The output of this script is a list of all active plugins, one for each line, so it can be used in a shell script, for example one can find out how many of them are active:

php show_all_active_plugins.php | wc -l

or find out which blogs are using a certain plugin:

php show_all_active_plugins.php | grep akismet

Disclaimer: as usual, this script works for my setup and, for this reason, I'm sharing it here for everyone interested. I hope it will work for anyone else who tries it, but I cannot guarantee it for every possible situation.


Visit The Light of the LAMP blog for more…

Enable warnings in MySQL

By default my MySQL setup didn’t display warnings. So, when this morning I tried to update a record with a slightly invalid date value, I had the following result:

mysql> UPDATE people SET birth =”0000-09-30″ WHERE id=1234;
Query OK, 0 rows affected, 1 warning (0.01 sec)
Rows matched: 1 Changed: 0 Warnings: 1

One warning, zero rows changed! And no clue what went wrong!

OK, time to RTFM! By reading the man page (man mysql), I found that I can enable the warnings on starting the mysql client by issuing: “mysql –show-warnings dbname” or by adding “show-warnings” in the “[mysql]” section of ~/.my.cnf configuration file. Alternatively, without changing anything, I could see the warning by executing: “show warnings;” at the console prompt.

The warning was:

Warning (Code 1265): Data truncated for column ‘birth’ at row 1

which revealed nothing to me. By changing the “sql_mode” parameter to traditional

mysql> set sql_mode=”traditional”;
Query OK, 0 rows affected (0.06 sec)

I had finally a clue:

ERROR 1292 (22007): Incorrect date value: ‘0000-09-30’ for column ‘birth’ at row 1

So, I changed again the sql_mode parameter to ALLOW_INVALID_DATES and I solved my little problem!


Visit The Light of the LAMP blog for more…

Replace in place

What can you do when you want to replace certain text strings with their “equivalents” or “substitutes” very fast?

Of course you can fire up your favorite text editor and start the well-known and frequently used ‘search-and-replace’ procedure.

Or you can do the same thing using sed, like this:

$ sed -i -e ‘s/this/that/g’ -e ‘s/foo/bar/g’ filename

But, if you have MySQL installed, you can find the replace utility very handy, like this:

$ replace this that foo bar — filename

So? Except for the fewer characters typed (in the case of replace), both commands had the same result, right? Right!

But replace can do the following in just one step:

$ replace this that that this — filename

or even

$ replace foo bar bar baz baz foo — filename1 filename2 filename3

replace is a utility written just to replace text strings and it does it very good.
sed, on the other hand, can do a lot (and then some) more, but it’s not for someone less experienced.


Visit The Light of the LAMP blog for more…