Archive for June 30, 2007

Robust PHP MogileFS Client

We’ve just released our MogileFS Client for PHP (5.1). It does a very good job of handling errors and is being used in production on Socialverse.

You might also want to consider this PECL module that implements the protocol. Personally, I don’t see many performance advantages to using this module. The native PHP MogileFS class above uses CURL for almost everything, which is an efficient library for HTTP communication all in C. CURL also comes standard with almost every PHP packing system that I’ve seen, so you don’t need to maintain yet another PECL.

Psst it on!

I am constantly sending links to my friends. Problem is, I don’t know if my friends appreciated the link or hated it. Also, it’d be neat to see if they liked it so much they passed it on to other people. On the receiving end, I like getting links from my friends because they know what I like and we have many things in common. It’s a sort of natural filtering process where the crap dies and the good stuff lingers on. If this sounds like something you run into on a daily basis, you should check out http://psstit.com/. What’s especially cool is that you can get an RSS feed of links your friends send you. That way, you can check them out at leisure.

Cap Oddity `initialize’: No such file or directory (Errno::ENOENT)

Trying to deploy something today and ran into the error

`initialize’: No such file or directory -- /tmp/ssh-IOIwF31501/agent.31501 (Errno::ENOENT)

Turns out it’s related to the passwordless ssh login.

Running the following fixed these issues:

$ ssh-agent bash $ ssh-add

PHP Exception Throwing Eval



  
function eeval($string)
  {
    $result = @eval($string);
    if( isset($php_errormsg) )
      throw new Exception($php_errormsg);
    return $result;
  }

PHP CURL PUT String

In the process of writing a MogileFS client in PHP, I discovered there’s no no straight forward way to issue a PUT request using CURL where the body of the request comes from a string, rather than a file. Luckily, PHP 5.2 introduces memory based streams…

 

   $fh 
fopen('php://memory''rw');
    fwrite($fh$dataToPut);
    rewind($fh);
   $ch curl_init();
    curl_setopt($chCURLOPT_INFILE$fh);
    curl_setopt($chCURLOPT_INFILESIZE$length);
    curl_setopt($chCURLOPT_TIMEOUT10);
    curl_setopt($chCURLOPT_PUT4);
    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($chCURLOPT_HTTPHEADER, Array('Expect: '));
    $response curl_exec($ch);
    fclose($fh);

PHP CSV Parsing

PHP offers a way to parse a stream handle, but not way to parse just a string. Here’s a simple/lazy way to parse a single CSV line in PHP:



function parseCSV($str$delimiter ',', $enclosure '"',  
$len 
4096)
{
  
$fh fopen('php://memory''rw');
  
fwrite($fh$str);
  
rewind($fh);
  
$result fgetcsv$fh$len$delimiter$enclosure );
  
fclose($fh);
  return 
$result;
}

Los Angeles Time Lapse