Toying around with php and pushing events at first seems a bit advanced. However after some digging around it turns out to be quite simple concept. First you must create a string containing an iCalendar format. Then push the contents of that file to the server with fsockopen or curl. Here is a bit of code to push a simple event:

$uid = "test-12345"; // setting this to an existing uid updates event, a new uid adds event
$url = $account['uri'].'/'.$uid.'.ics'; //http://mail.domain.com/calendars/DOMAIN/USER/Calendar/'.$uid.'.ics'
$userpwd = $account['user'] .":". $account['pass'];
$description = 'My event description here';
$summary = 'My event title 1';
$tstart = '201206015T000000Z';
$tend = '20120616T000000Z';
$tstamp = gmdate("Ymd\THis\Z");

$body = <<<__EOD
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
DTSTAMP:$tstamp
DTSTART:$tstart
DTEND:$tend
UID:$uid
DESCRIPTION:$description
LOCATION:Office
SUMMARY:$summary
END:VEVENT
END:VCALENDAR
__EOD;

$headers = array(
	'Content-Type: text/calendar; charset=utf-8',
	'If-None-Match: *',
	'Expect: ',
	'Content-Length: '.strlen($body),
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_exec($ch);
curl_close($ch);

A long piece of code, but not complex. If we use an existing UID it will be understood as an update. A new UID will create a new event. The hard part will be getting the url at this point. If you are unable to issue a PUT request you may check your Content-Type. I was getting events with empty date fields. I had to specify Content-type: text/calendar. Hope that helps. I have only used this against one server but others are welcome to add to this snippet. Also see this post for more information.