User:Craftish Resident/php/SLRequestData

From Second Life Wiki
Revision as of 04:01, 16 February 2013 by Craftish Resident (talk | contribs) (PHP script for reading SL http request headers)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Optimized Second Life HTTP request header-reading class for php

Doesn't process headers unless they are used


slrequestdata.php <php> <?php

/* *** -------------------------------------------------- *** */ /* *** Copyright (c) 2013 by Craftish Resident *** */ /* *** Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) *** */ /* *** http://creativecommons.org/licenses/by-sa/3.0/ *** */ /* *** -------------------------------------------------- *** */

class SLRequestData{ private static $object_grid=FALSE; private static $object_name=FALSE; private static $object_key=FALSE; private static $object_pos=FALSE; private static $object_vel=FALSE; private static $object_rot=FALSE; private static $owner_key=FALSE; private static $owner_name=FALSE; private static $region_data=FALSE; private static $region_name=FALSE; private static $region_pos=FALSE; // private static $apachecheck=FALSE; private static $apache=FALSE; private static $headers; // private static function header_get($x){ return array_key_exists($x,self::$headers)?self::$headers[$x]:; } public static function header($x) { if(self::$apachecheck===FALSE){ self::$apache=function_exists('apache_request_headers'); self::$headers=self::$apache?apache_request_headers():$GLOBALS['HTTP_ENV_VARS']; self::$apachecheck=TRUE; } switch($x):default: return ; break;case 'object_grid': return (self::$object_grid!==FALSE)?(self::$object_grid):(self::$object_grid=self::header_get(self::$apache?'X-SecondLife-Shard':'HTTP_X_SECONDLIFE_SHARD')); break;case 'object_name': return (self::$object_name!==FALSE)?(self::$object_name):(self::$object_name=self::header_get(self::$apache?'X-SecondLife-Object-Name':'HTTP_X_SECONDLIFE_OBJECT_NAME')); break;case 'object_key': return (self::$object_key!==FALSE)?(self::$object_key):(self::$object_key=self::header_get(self::$apache?'X-SecondLife-Object-Key':'HTTP_X_SECONDLIFE_OBJECT_KEY')); break;case 'object_pos': if(self::$object_pos!==FALSE)return self::$object_pos; $temp1=self::header_get(self::$apache?'X-SecondLife-Local-Position':'HTTP_X_SECONDLIFE_LOCAL_POSITION'); $temp2; preg_match_all('#\(([\d.]+), ([\d.]+), ([\d.]+)\)#i',$temp1,$temp2); return self::$object_pos=@array('x'=>(float)$temp2[1][0],'y'=>(float)$temp2[2][0],'z'=>(float)$temp2[3][0]); break;case 'object_vel': if(self::$object_vel!==FALSE)return self::$object_vel; $temp1=self::header_get(self::$apache?'X-SecondLife-Local-Velocity':'HTTP_X_SECONDLIFE_LOCAL_VELOCITY'); $temp2; preg_match_all('#\(([\d.]+), ([\d.]+), ([\d.]+)\)#i',$temp1,$temp2); return self::$object_vel=@array('x'=>(float)$temp2[1][0],'y'=>(float)$temp2[2][0],'z'=>(float)$temp2[3][0]); break;case 'object_rot': if(self::$object_rot!==FALSE)return self::$object_rot; $temp1=self::header_get(self::$apache?'X-SecondLife-Local-Rotation':'HTTP_X_SECONDLIFE_LOCAL_ROTATION'); $temp2; preg_match_all('#\(([\d.]+), ([\d.]+), ([\d.]+), ([\d.]+)\)#i',$temp1,$temp2); return self::$object_rot=@array('x'=>(float)$temp2[1][0],'y'=>(float)$temp2[2][0],'z'=>(float)$temp2[3][0],'s'=>(float)$temp2[4][0]); break;case 'owner_key': return (self::$owner_key!==FALSE)?(self::$owner_key):(self::$owner_key=self::header_get(self::$apache?'X-SecondLife-Owner-Key':'HTTP_X_SECONDLIFE_OWNER_KEY')); break;case 'owner_name': return (self::$owner_name!==FALSE)?(self::$owner_name):(self::$owner_name=self::header_get(self::$apache?'X-SecondLife-Owner-Name':'HTTP_X_SECONDLIFE_OWNER_NAME')); break;case 'region_data': return (self::$region_data!==FALSE)?(self::$region_data):(self::$region_data=self::header_get(self::$apache?'X-SecondLife-Region':'HTTP_X_SECONDLIFE_REGION')); break;case 'region_name': if(self::$region_name!==FALSE)return self::$region_name; $temp1=self::header('region_data'); $temp2; preg_match_all('#([\w ]*)\s\((\d+), (\d+)\)#i',$temp1,$temp2); self::$region_pos=@array('x'=>(float)$temp2[2][0],'y'=>(float)$temp2[3][0]); return self::$region_name=@$temp2[1][0]; break;case 'region_pos': if(self::$region_pos!==FALSE)return self::$region_pos; $temp1=self::header('region_data'); $temp2; preg_match_all('#([\w ]*)\s\((\d+), (\d+)\)#i',$temp1,$temp2); self::$region_name=@$temp2[1][0]; return self::$region_pos=@array('x'=>(float)$temp2[2][0],'y'=>(float)$temp2[3][0]); break;case 'print_r': return print_r(array( 'object_grid'=>self::header('object_grid'), 'object_name'=>self::header('object_name'), 'object_key'=>self::header('object_key'), 'object_pos'=>self::header('object_pos'), 'object_vel'=>self::header('object_vel'), 'object_rot'=>self::header('object_rot'), 'owner_key'=>self::header('owner_key'), 'owner_name'=>self::header('owner_name'), 'region_data'=>self::header('region_data'), 'region_name'=>self::header('region_name'), 'region_pos'=>self::header('region_pos'), ),TRUE); break;case 'headers': return print_r(self::$headers,TRUE); break;endswitch; return ; } }

?> </php>

Example:

<php> <?php

header('Content-Type: text/plain');

include 'slrequestdata.php';

echo "Hello " . SLRequestData::header('owner_name') . "\n";

// Outputs: Hello Craftish Resident

$pos = SLRequestData::header('object_pos'); echo SLRequestData::header('object_name') . "'s z position is {$pos['z']}";

// Outputs: Object's z position is 1400.5

?> </php>