Cloud Zone is brought to you in partnership with:

After teaching math (and a little computer science) for 14 years, Brian changed careers in 2006 with the idea that getting out of his comfort zone would be good. So now he works as a writer and programmer at Microsoft who specializes in PHP and Windows Azure. Brian is a DZone MVB and is not an employee of DZone and has posted 82 posts at DZone. You can read more from them at their website. View Full User Profile

Updating PHP Settings in Windows Azure

04.13.2011
| 6982 views |
  • submit to reddit

I came across this question on Twitter last week: “How can I turn display_errors on for an application that is running in Windows Azure?” I have to admit that I was stumped. The only thing I could think of was to re-deploy the application with an updated php.ini file. But, I happened to mention this question to Ben Lobaugh who suggested a very simple idea: Store your PHP settings in some durable store external to your application as key-value pairs, then loop through the settings and update them with the ini_set function when a page loads. An example will help make this clear, but first, a couple of caveats:

Caveat 1: This is a hack. This is only a hack. This is nothing but a hack. (But it works.) My intent is simply to throw this idea out there and hope that others will improve on it.

Caveat 2: This idea might be useful if you are learning Windows Azure and you want to be able to change settings on a nearly-ready-for-production application. I’ll assume that your heavy-duty testing has been done in the Compute Emulator prior to deployment. I wouldn’t necessarily suggest that the idea presented here be used on a production application.


Ben suggested that I use Windows Azure Table storage for storing my key-value pairs (which I’ll do in my example), but you could really use any store that is external to your application…

Suppose you have deployed an application to Windows Azure with display_errors off, but (for one reason or another) now you want display_errors on. Without putting any forethought into being able to change settings, you are stuck (unless you are willing to re-deploy the application with a new php.ini file, which isn’t really an attractive option). But, if you have put some forethought into changing settings, you might have added a file like this to your application:

<?php
require 'Microsoft\WindowsAzure\Storage\Table.php';

class Setting extends Microsoft_WindowsAzure_Storage_TableEntity
{
    /**
     * @azure value
     */
    public $value; 
}

function updateSettings()
{
    $storageAccount = 'Your storage account name';
    $accountKey = 'Your account key';
    $client = new Microsoft_WindowsAzure_Storage_Table('table.core.windows.net',
                                                       $storageAccount,
                                                       $accountKey);
    $query = "PartitionKey eq 'settings'";
    $settings = $client->retrieveEntities("phpinitable", $query, "Setting");
    foreach($settings as $setting)
    {
        ini_set($setting->getRowKey(), $setting->value);
    }
}
?>

A few things to note about the code above:

  • It requires the Windows Azure SDK for PHP (It’s free and easy to install. More info here: Accessing Windows Azure Table Storage from PHP.)
  • It reflects my Azure Table structure. The Setting class allows my settings to be materialized as Setting objects, and it reflects that my Table has a property called value. The partition key for each Table entry is settings and the row key for entry is the name of the PHP setting. So, each Table entry looks like this:

Partition Key: settings
Row Key: [name of PHP setting]
value: [value of setting]


Now, if I call the above file updateSettings.php, then I simply need to add this to the top of pages in my application:

include 'updateSettings.php';
updateSettings();


To turn on the display_errors setting, I simple need to create a Table entry that looks like this:

Partition Key: settings
Row Key: display_errors
value: 1


An easy way to create Azure Tables and entries is to use the Windows Azure Storage Explorer for Eclipse (more on that here: Using the Windows Azure Storage Explorer for Eclipse). And, I can create as many Table entries as I have settings to update.

Of course, as I mentioned earlier, you don’t have to use Azure Table storage…you could use any store that is external to your application and that you can update easily.

I’d be interested in hearing variations on this idea. If you’ve got other ideas, let me know!

Thanks.

-Brian

References
Published at DZone with permission of Brian Swan, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

Rehman Khan replied on Sat, 2012/02/25 - 5:25am

A dirty but effective hack, but it got me thinking. what if there were more php.ini configuration sources? E.G. a SQLite register or JetSQL (or forget the last one) source that could be easily managed in an azure environment. Maybe we should brainstorm that for a bit and put a feature request into PHP. Of course it would be really awesome if we could get Pierre Joy onboard to actually implement it.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.