| Server IP : 180.180.241.3 / Your IP : 216.73.216.35 Web Server : Microsoft-IIS/7.5 System : Windows NT NETWORK-NHRC 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 User : IUSR ( 0) PHP Version : 5.3.28 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/AppServ/www/news/components/com_youtubegallery/includes/flv4php/Util/ |
Upload File : |
<?php
/*
Copyright 2006 Iván Montes, Morten Hundevad
This file is part of FLV tools for PHP (FLV4PHP from now on).
FLV4PHP is free software; you can redistribute it and/or modify it under the
terms of the GNU General var License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
FLV4PHP is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General var License for more details.
You should have received a copy of the GNU General var License along with
FLV4PHP; if not, write to the Free Software Foundation, Inc., 51 Franklin
Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/**
* Serializes a PHP variable as an AMF stream
*
*/
class FLV_Util_AMFSerialize {
var $isLittleEndian;
/**
* Class constructor
*/
function FLV_Util_AMFSerialize( )
{
//calculate endianness of the CPU
$this->isLittleEndian = ( pack('s', 1) == pack('v', 1) );
}
/**
* Serializes a PHP variable into an AMF stream
*
* @param mixed $var The variable to serialize
* @param bool $skipMark if true won't add the datatype mark
* @return The AMF stream
*/
function serialize( $var, $skipMark = false )
{
// process objects as hashed arrays
if (is_object($var))
$var = (array)$var;
if (is_array($var))
{
// find out if the array is numeric or associative
$numeric = true;
foreach ( $var as $k=>$v )
{
if (!is_numeric($k))
{
$numeric = false;
break;
}
}
if ($numeric)
{
$data = ($skipMark?'':"\x0A") . pack('N', count($var));
foreach ( $var as $v )
{
$data .= $this->serialize( $v );
}
} else {
$data = ($skipMark?'':"\x08") . pack('N', count($var));
foreach ( $var as $k=>$v )
{
$data .= $this->serialize((string)$k, true);
$data .= $this->serialize($v);
}
// end of sequence mark : empty string and 0x09 byte
$data .= $this->serialize('', true);
$data .= "\x09";
}
return $data;
} else if (is_null($var)) {
return ($skipMark?'':"\x05");
} else if (is_bool($var)) {
return ($skipMark?'':"\x01") . ( $var ? "\x01" : "\x00" );
} else if (is_numeric($var)) {
$number .= pack('d', $var);
//reverse bytes if we are in little-endian hardware
if ($this->isLittleEndian)
{
$number = strrev( $number );
}
return ($skipMark?'':"\x00") . $number;
} else if (is_string($var)) {
// check for a date
if (preg_match('/^([0-9]{4})-?([0-9]{2})-?([0-9]{2})T([0-9]{2}):?([0-9]{2}):?([0-9]{2})(?:\.([0-9]{1,3}))?([Z+-])([0-9:]*)$/', trim($var), $m))
{
$seconds = mktime( $m[4], $m[5], $m[6], $m[2], $m[3], $m[1] );
$ms = $seconds * 1000 + $m[7];
if ($m[9])
{
$ls = explode(':', $m[9]);
$tz = ($m[9]=='-' ? '-' : '') + $ls[0] * 60 + $ls[1];
$tz = pack('s', $tz);
if ($this->isLittleEndian)
$tz = strrev($tz);
}
return ($skipMark?'':"\x0B") . $this->serialize((float)$ms, true) . pack('n', $tz);
}
//we could push this upto 65536 I think but I feel safer like this
if (strlen($var) < 32768)
{
return ($skipMark?'':"\x02") . pack('n', strlen($var)) . $var;
} else {
return ($skipMark?'':"\x0C") . pack('N', strlen($var)) . $var;
}
} else {
//if the datatype is not supported use a null value
return $this->serialize( NULL );
}
}
}
?>