Author Archives:
Excitement at Ibuildings

(this is us drinking, rather than speaking, obviously)
Back to my ZendCon story. A few weeks ago, my employers Ibuildings announced their PHP Centre of Expertise which we will be building up. Its an initiative to support the wider PHP ecosystem, particularly because so many key PHP community people and contributors are employed at Ibuildings. I’m not usually a big fan of towing the company line on personal blogs, but this story is important to me.
ZendCon finished on the Thursday lunchtime and after a long afternoon hanging around outside and acquiring some really impressive sunburn (English complexion, Californian sunshine, yes I know I should know better!), the Ibuildings people present at ZendCon went out for a meal – with the table booked for one extra person. When Cal Evans walked in the room, I was delighted to see him, and wondered for a moment if he had just popped in for some beer and chatter – but I was completely and wonderfully wrong! Cal is the Chair of the PCE – so he’ll be my colleague within a few weeks!! I have known Cal for perhaps two years now, he’s a great supporter of phpwomen.org and I count him among my personal friends. Having him move halfway round the world to work with Ibuildings on such an exciting project makes me very optimistic at the thought of things to come. This is Cal and I at the conference:

Ibuildings is often recruiting, and it seems like many friends have joined the organisation already. Could anyone looking for a job with Ibuildings please note that we do have a bonus for employees recommending friends … ?
My Sister’s Graduation
I’m also very pleased to have been able to be here to cheer her on and also very pleased that we now have the sequel to a photograph taken at my own graduation day 5 years ago.
Well done, little one!!
Update from ZendCon
For everything else, see the zendcon photos on flickr! http://www.flickr.com/photos/tags/zendcon08
Using curl and PHP to talk to a REST service
If you don’t know about PHP, Rest, or curl, then I recommend you do a little reading around each of those subjects before reading this as its unlikely to make much sense – I’m not including background on these topics as there are better resources elsewhere.
I’ve written about using curl before from the command line, but this example uses PHP’s curl to access the service. This is just a simple example, but hopefully if you are doing something along these lines you can adapt for your needs.
In the example, we set the URL we’d like to call and initialise the curl object to point to that. Then we create an array of post data, and configure curl to use POST to make the request and to use our data array.
$service_url = 'http://example.com/rest/user/';
$curl = curl_init($service_url);
$curl_post_data = array(
"user_id" => 42,
"emailaddress" => '[email protected]',
);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
$curl_response = curl_exec($curl);
curl_close($curl);
$xml = new SimpleXMLElement($curl_response);
We execute the request and capture the response. Health warning: by default curl will echo the response (for reasons that aren’t clear to me), if you want to parse it then you will need to use the CURLOPT_RETURNTRANSFER flag to have curl return the response rather than a boolean indication of success – this fooled me completely for a while, I have no idea why it works this way. As you can see I’ve parsed the resulting XML and my script can then continue with the data it acquired. Depending what you need to do next, you can manipulate the SimpleXMLElement object as you need to.
If you’re working with PHP and services, then hopefully this will get you started, if you have any questions or comments, then please add them below!
PHPNW Update
Tickets will be on sale somewhere around the end of September or beginning of October, and we’re already finalising some of the sponsorships – thanks so much to the companies who are getting involved in the event. So many of them are really adding to the experience as well as just buying advertising space, its giving the event a very special feel. I’m looking forward to seeing at least some of you in Manchester on November 22nd!!
Crochet Tutorial: Granny Square Round 2
If you get this far – definitely let me know :)
Acer Aspire One and an XD Card
Well, we went back to the shop and demonstrated the card not working. They took the card, tried it in their card reader (it worked, just like it does in my card reader and in the camera). Then they tried it in the display model of the same machine, and it persisted in not working. After a whole rigamarole of contacting the supplier, who told us to contact the retailer, who told us to go home and ring their central helpline, who told us to contact the supplier (which went on for a while) we went back to the shop again and they got a new XD card, and it worked absolutely fine. The new card is a 2GB card just like the old one.
Things I notice about this:
- The old card doesn’t work even after formatting
- The camera boots MUCH faster with the new card in it
- I have no idea what could cause that
Anyway, I take it all back, XD cards do work with the linux acer aspire ones – and now I’m all set for being able to upload photos from my trip to ZendCon next week.
Laceweight Purple Mohair
I’ve got this laceweight mohair from http://www.thenaturaldyestudio.com/ and its absolutely gorgeous. The pattern calls for Rohan Kidsilk Haze, which I know is lovely but it really is quite pricey.
One of the skeins (I have three!) was wound into a ball by friends when I took it to the knitting group, its 400 yards per skein so I can’t imagine I’m going to manage to crochet all that while I’m away.
The pattern is “Beaded Cobweb Wrap” from Erica Knight’s Essential Crochet, uses a 6mm hook so the pattern is more space than yarn anyway, and it looks quite easy once you’ve done the cast on – its crocheted longways, so there’s a mad long chain that you have to hook into to start with, something I always struggle with. I’ve been assured it’ll look like chewed string until I block it and that I should just carry on regardless – I’ll let you know how I get on :)
PHP Rest Server (part 3 of 3)
This is part 3 of my article about writing a restful service server. If you haven’t already, you might like to read part 1 (covering the core library and grabbing the information we need from the incoming request) and part 2 (covering the service handler itself) before reading this section. This part covers the Response object that I used to return the data to the user in the correct format.
XML Response Object
Exactly what output you want from your service completely depends on the specification and what you are actually trying to do. I wrote a really simple response wrapper that responds with an outline tag containing a status, and then either the content or some error details. Here’s my response class:
class Response {
public function output() {
header('Content-type: text/xml');
echo '';
echo "\n";
echo '';
echo "\n";
foreach($this as $prop_key => $prop_value) {
if(!is_array($prop_value)) {
echo '<'.$prop_key.'>';
echo $prop_value;
echo ''.$prop_key.'>';
echo "\n";
} else {
echo '<'.$prop_key.'>';
echo "\n";
foreach($prop_value as $array_key => $array_value) {
echo '<'.$array_key.'>';
echo $array_value;
echo ''.$array_key.'>';
echo "\n";
}
echo ''.$prop_key.'>';
echo "\n";
}
}
echo " \n";
}
}
This could be more elegant and thorough, but its kind of an outline of what I did. Firstly set the content header, then the main tag. Then it loops through all the properties set against the response object and just writes them out as XML. Its very limited but at least its short enough to read easily! There is also an error response that gets called and returns the error type and message, setting the response status to “error” rather than “ok”.
REST Service in PHP
So there you have the ingredients for a REST server in PHP. I’m sure this isn’t the only way to solve this problem, but this is how I did it and I hope it helps someone. If you’ve got any questions, feel free to comment below – and if you do use this for a project, I’d love to hear from you :)




