we check for proper subclass of xmlrpcval instead of
// presence of _php_class to detect what we can do?
if (in_array('decode_php_objs', $options) && $xmlrpc_val->_php_class != ''
&& class_exists($xmlrpc_val->_php_class)
) {
$obj = @new $xmlrpc_val->_php_class;
while (list($key, $value) = $xmlrpc_val->structeach()) {
$obj->$key = php_xmlrpc_decode($value, $options);
}
return $obj;
} else {
$arr = array();
while (list($key, $value) = $xmlrpc_val->structeach()) {
$arr[$key] = php_xmlrpc_decode($value, $options);
}
return $arr;
}
case 'msg':
$paramcount = $xmlrpc_val->getNumParams();
$arr = array();
for ($i = 0; $i < $paramcount; $i++) {
$arr[] = php_xmlrpc_decode($xmlrpc_val->getParam($i));
}
return $arr;
}
}
// This constant left here only for historical reasons...
// it was used to decide if we have to define xmlrpc_encode on our own, but
// we do not do it anymore
if (function_exists('xmlrpc_decode')) {
define('XMLRPC_EPI_ENABLED', '1');
} else {
define('XMLRPC_EPI_ENABLED', '0');
}
/**
* Takes native php types and encodes them into xmlrpc PHP object format.
* It will not re-encode xmlrpcval objects.
*
* Feature creep -- could support more types via optional type argument
* (string => datetime support has been added, ??? => base64 not yet)
*
* If given a proper options parameter, php object instances will be encoded
* into 'special' xmlrpc values, that can later be decoded into php objects
* by calling php_xmlrpc_decode() with a corresponding option
*
* @author Dan Libby (dan@libby.com)
*
* @param mixed $php_val the value to be converted into an xmlrpcval object
* @param array $options can include 'encode_php_objs', 'auto_dates', 'null_extension' or 'extension_api'
* @return xmlrpcval
*/
function php_xmlrpc_encode($php_val, $options = array())
{
$type = gettype($php_val);
switch ($type) {
case 'string':
if (in_array('auto_dates', $options) && preg_match('/^[0-9]{8}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/', $php_val)) {
$xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcDateTime']);
} else if (in_array('auto_base64', $options) && strpos($php_val, 'BASE64:') === 0) {
$xmlrpc_val = new xmlrpcval(substr($php_val, 7), $GLOBALS['xmlrpcBase64']);
} else {
$xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcString']);
}
break;
case 'integer':
$xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcInt']);
break;
case 'double':
$xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcDouble']);
break;
//
// Add support for encoding/decoding of booleans, since they are supported in PHP
case 'boolean':
$xmlrpc_val = new xmlrpcval($php_val, $GLOBALS['xmlrpcBoolean']);
break;
//
case 'array':
// PHP arrays can be encoded to either xmlrpc structs or arrays,
// depending on wheter they are hashes or plain 0..n integer indexed
// A shorter one-liner would be
// $tmp = array_diff(array_keys($php_val), range(0, count($php_val)-1));
// but execution time skyrockets!
$j = 0;
$arr = array();
$ko = false;
foreach ($php_val as $key => $val) {
$arr[$key] = php_xmlrpc_encode($val, $options);
if (!$ko && $key !== $j) {
$ko = true;
}
$j++;
}
if ($ko) {
$xmlrpc_val = new xmlrpcval($arr, $GLOBALS['xmlrpcStruct']);
} else {
$xmlrpc_val = new xmlrpcval($arr, $GLOBALS['xmlrpcArray']);
}
break;
case 'object':
if (is_a($php_val, 'xmlrpcval')) {
$xmlrpc_val = $php_val;
} else if (is_a($php_val, 'DateTime')) {
$xmlrpc_val = new xmlrpcval($php_val->format('Ymd\TH:i:s'), $GLOBALS['xmlrpcStruct']);
} else {
$arr = array();
reset($php_val);
while (list($k, $v) = each($php_val)) {
$arr[$k] = php_xmlrpc_encode($v, $options);
}
$xmlrpc_val = new xmlrpcval($arr, $GLOBALS['xmlrpcStruct']);
if (in_array('encode_php_objs', $options)) {
// let's save original class name into xmlrpcval:
// might be useful later on...
$xmlrpc_val->_php_class = get_class($php_val);
}
}
break;
case 'NULL':
if (in_array('extension_api', $options)) {
$xmlrpc_val = new xmlrpcval('', $GLOBALS['xmlrpcString']);
} else if (in_array('null_extension', $options)) {
$xmlrpc_val = new xmlrpcval('', $GLOBALS['xmlrpcNull']);
} else {
$xmlrpc_val = new xmlrpcval();
}
break;
case 'resource':
if (in_array('extension_api', $options)) {
$xmlrpc_val = new xmlrpcval((int)$php_val, $GLOBALS['xmlrpcInt']);
} else {
$xmlrpc_val = new xmlrpcval();
}
// catch "user function", "unknown type"
default:
// giancarlo pinerolo
// it has to return
// an empty object in case, not a boolean.
$xmlrpc_val = new xmlrpcval();
break;
}
return $xmlrpc_val;
}
/**
* Convert the xml representation of a method response, method request or single
* xmlrpc value into the appropriate object (a.k.a. deserialize)
* @param string $xml_val
* @param array $options
* @return mixed false on error, or an instance of either xmlrpcval, xmlrpcmsg or xmlrpcresp
*/
function php_xmlrpc_decode_xml($xml_val, $options = array())
{
$GLOBALS['_xh'] = array();
$GLOBALS['_xh']['ac'] = '';
$GLOBALS['_xh']['stack'] = array();
$GLOBALS['_xh']['valuestack'] = array();
$GLOBALS['_xh']['params'] = array();
$GLOBALS['_xh']['pt'] = array();
$GLOBALS['_xh']['isf'] = 0;
$GLOBALS['_xh']['isf_reason'] = '';
$GLOBALS['_xh']['method'] = false;
$GLOBALS['_xh']['rt'] = '';
/// @todo 'guestimate' encoding
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
// What if internal encoding is not in one of the 3 allowed?
// we use the broadest one, ie. utf8!
if (!in_array($GLOBALS['xmlrpc_internalencoding'], array('UTF-8', 'ISO-8859-1', 'US-ASCII'))) {
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');
} else {
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $GLOBALS['xmlrpc_internalencoding']);
}
xml_set_element_handler($parser, 'xmlrpc_se_any', 'xmlrpc_ee');
xml_set_character_data_handler($parser, 'xmlrpc_cd');
xml_set_default_handler($parser, 'xmlrpc_dh');
if (!xml_parse($parser, $xml_val, 1)) {
$errstr = sprintf('XML error: %s at line %d, column %d',
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser), xml_get_current_column_number($parser));
error_log($errstr);
xml_parser_free($parser);
return false;
}
xml_parser_free($parser);
if ($GLOBALS['_xh']['isf'] > 1) // test that $GLOBALS['_xh']['value'] is an obj, too???
{
error_log($GLOBALS['_xh']['isf_reason']);
return false;
}
switch ($GLOBALS['_xh']['rt']) {
case 'methodresponse':
$v =& $GLOBALS['_xh']['value'];
if ($GLOBALS['_xh']['isf'] == 1) {
$vc = $v->structmem('faultCode');
$vs = $v->structmem('faultString');
$r = new xmlrpcresp(0, $vc->scalarval(), $vs->scalarval());
} else {
$r = new xmlrpcresp($v);
}
return $r;
case 'methodcall':
$m = new xmlrpcmsg($GLOBALS['_xh']['method']);
for ($i = 0; $i < count($GLOBALS['_xh']['params']); $i++) {
$m->addParam($GLOBALS['_xh']['params'][$i]);
}
return $m;
case 'value':
return $GLOBALS['_xh']['value'];
default:
return false;
}
}
/**
* decode a string that is encoded w/ "chunked" transfer encoding
* as defined in rfc2068 par. 19.4.6
* code shamelessly stolen from nusoap library by Dietrich Ayala
*
* @param string $buffer the string to be decoded
* @return string
*/
function decode_chunked($buffer)
{
// length := 0
$length = 0;
$new = '';
// read chunk-size, chunk-extension (if any) and crlf
// get the position of the linebreak
$chunkend = strpos($buffer, "\r\n") + 2;
$temp = substr($buffer, 0, $chunkend);
$chunk_size = hexdec(trim($temp));
$chunkstart = $chunkend;
while ($chunk_size > 0) {
$chunkend = strpos($buffer, "\r\n", $chunkstart + $chunk_size);
// just in case we got a broken connection
if ($chunkend == false) {
$chunk = substr($buffer, $chunkstart);
// append chunk-data to entity-body
$new .= $chunk;
$length += strlen($chunk);
break;
}
// read chunk-data and crlf
$chunk = substr($buffer, $chunkstart, $chunkend - $chunkstart);
// append chunk-data to entity-body
$new .= $chunk;
// length := length + chunk-size
$length += strlen($chunk);
// read chunk-size and crlf
$chunkstart = $chunkend + 2;
$chunkend = strpos($buffer, "\r\n", $chunkstart) + 2;
if ($chunkend == false) {
break; //just in case we got a broken connection
}
$temp = substr($buffer, $chunkstart, $chunkend - $chunkstart);
$chunk_size = hexdec(trim($temp));
$chunkstart = $chunkend;
}
return $new;
}
/**
* xml charset encoding guessing helper function.
* Tries to determine the charset encoding of an XML chunk received over HTTP.
* NB: according to the spec (RFC 3023), if text/xml content-type is received over HTTP without a content-type,
* we SHOULD assume it is strictly US-ASCII. But we try to be more tolerant of unconforming (legacy?) clients/servers,
* which will be most probably using UTF-8 anyway...
*
* @param string $httpheaders the http Content-type header
* @param string $xmlchunk xml content buffer
* @param string $encoding_prefs comma separated list of character encodings to be used as default (when mb extension is enabled)
*
* @todo explore usage of mb_http_input(): does it detect http headers + post data? if so, use it instead of hand-detection!!!
*/
function guess_encoding($httpheader = '', $xmlchunk = '', $encoding_prefs = null)
{
// discussion: see http://www.yale.edu/pclt/encoding/
// 1 - test if encoding is specified in HTTP HEADERS
//Details:
// LWS: (\13\10)?( |\t)+
// token: (any char but excluded stuff)+
// quoted string: " (any char but double quotes and cointrol chars)* "
// header: Content-type = ...; charset=value(; ...)*
// where value is of type token, no LWS allowed between 'charset' and value
// Note: we do not check for invalid chars in VALUE:
// this had better be done using pure ereg as below
// Note 2: we might be removing whitespace/tabs that ought to be left in if
// the received charset is a quoted string. But nobody uses such charset names...
/// @todo this test will pass if ANY header has charset specification, not only Content-Type. Fix it?
$matches = array();
if (preg_match('/;\s*charset\s*=([^;]+)/i', $httpheader, $matches)) {
return strtoupper(trim($matches[1], " \t\""));
}
// 2 - scan the first bytes of the data for a UTF-16 (or other) BOM pattern
// (source: http://www.w3.org/TR/2000/REC-xml-20001006)
// NOTE: actually, according to the spec, even if we find the BOM and determine
// an encoding, we should check if there is an encoding specified
// in the xml declaration, and verify if they match.
/// @todo implement check as described above?
/// @todo implement check for first bytes of string even without a BOM? (It sure looks harder than for cases WITH a BOM)
if (preg_match('/^(\x00\x00\xFE\xFF|\xFF\xFE\x00\x00|\x00\x00\xFF\xFE|\xFE\xFF\x00\x00)/', $xmlchunk)) {
return 'UCS-4';
} elseif (preg_match('/^(\xFE\xFF|\xFF\xFE)/', $xmlchunk)) {
return 'UTF-16';
} elseif (preg_match('/^(\xEF\xBB\xBF)/', $xmlchunk)) {
return 'UTF-8';
}
// 3 - test if encoding is specified in the xml declaration
// Details:
// SPACE: (#x20 | #x9 | #xD | #xA)+ === [ \x9\xD\xA]+
// EQ: SPACE?=SPACE? === [ \x9\xD\xA]*=[ \x9\xD\xA]*
if (preg_match('/^<\?xml\s+version\s*=\s*' . "((?:\"[a-zA-Z0-9_.:-]+\")|(?:'[a-zA-Z0-9_.:-]+'))" .
'\s+encoding\s*=\s*' . "((?:\"[A-Za-z][A-Za-z0-9._-]*\")|(?:'[A-Za-z][A-Za-z0-9._-]*'))/",
$xmlchunk, $matches)
) {
return strtoupper(substr($matches[2], 1, -1));
}
// 4 - if mbstring is available, let it do the guesswork
// NB: we favour finding an encoding that is compatible with what we can process
if (extension_loaded('mbstring')) {
if ($encoding_prefs) {
$enc = mb_detect_encoding($xmlchunk, $encoding_prefs);
} else {
$enc = mb_detect_encoding($xmlchunk);
}
// NB: mb_detect likes to call it ascii, xml parser likes to call it US_ASCII...
// IANA also likes better US-ASCII, so go with it
if ($enc == 'ASCII') {
$enc = 'US-' . $enc;
}
return $enc;
} else {
// no encoding specified: as per HTTP1.1 assume it is iso-8859-1?
// Both RFC 2616 (HTTP 1.1) and 1945 (HTTP 1.0) clearly state that for text/xxx content types
// this should be the standard. And we should be getting text/xml as request and response.
// BUT we have to be backward compatible with the lib, which always used UTF-8 as default...
return $GLOBALS['xmlrpc_defencoding'];
}
}
/**
* Checks if a given charset encoding is present in a list of encodings or
* if it is a valid subset of any encoding in the list
* @param string $encoding charset to be tested
* @param mixed $validlist comma separated list of valid charsets (or array of charsets)
*/
function is_valid_charset($encoding, $validlist)
{
$charset_supersets = array(
'US-ASCII' => array('ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4',
'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8',
'ISO-8859-9', 'ISO-8859-10', 'ISO-8859-11', 'ISO-8859-12',
'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'UTF-8',
'EUC-JP', 'EUC-', 'EUC-KR', 'EUC-CN')
);
if (is_string($validlist))
$validlist = explode(',', $validlist);
if (@in_array(strtoupper($encoding), $validlist))
return true;
else {
if (array_key_exists($encoding, $charset_supersets))
foreach ($validlist as $allowed)
if (in_array($allowed, $charset_supersets[$encoding]))
return true;
return false;
}
}
?> สมัครบริการ Constant Contact บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ ConvertKit มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ ConvertKit บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ Drip %s มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ Drip บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ GetResponse %s มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ GetResponse บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ Hatchbuck มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ Hatchbuck คีย์ API ไม่ถูกต้อง มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ Hatchbuck บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ Infusionsoft %s มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ Infusionsoft บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ Mad Mimi บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ MailChimp %s มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ MailChimp บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ Mailrelay %s มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ Mailrelay บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ SendinBlue โปรดลองอีกครั้ง มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ SendinBlue บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ Sendy %s มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ Sendy บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ iContact %s มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ iContact บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ ไม่ได้ติดตั้ง MailPoet มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ โปรดลองอีกครั้ง มีข้อผิดพลาดเกี่ยวกับการสมัครบริการ บัญชีไม่ได้ถูกเชื่อมโยงอีกต่อไป มีชุมชนที่ยอดเยี่ยมของ “Beaver Builders” อยู่และเราอยากให้ คุณ มาร่วมกับเรา! ข้อผิดพลาด: ไม่มีประเภทบริการ นี้จะช่วยให้คุณสามารถเพิ่มเนื้อหามากกว่าหรือนอกเหนือไปจากการเลือกพื้นหลังดังกล่าวข้างต้น สถานที่ตั้งของเลย์เอ้าท์เนื้อหาที่สามารถเลือกได้ในแท็บสไตล์ วิธีนี้จะใช้กับเว็บไซต์ทั้งหมดบนเครือข่าย ไฟล์นี้ดูเหมือนจะไม่ใช่ไฟล์ WXR เพราะไม่มีหมายเลขเวอร์ชัน WXR/หมายเลขไม่ถูกต้อง จำเป็นต้องใส่ข้อมูลในส่วนนี้ วิธีนี้จะใช้กับเว็บไซต์นี้เท่านั้น โปรดไปที่การตั้งค่าผู้ดูแลระบบเครือข่ายเพื่อล้างแคชของเว็บไซต์ทั้งหมดบนเครือข่าย การตั้งค่านี้สำหรับพื้นหลังทั้งหมดของสไลด์ของคุณ นี่คือการตั้งค่าความสูงขั้นต่ำของเนื้อหาสไลด์ เนื้อหาจะขยายความสูงโดยอัตโนมัติ นี่คือการตั้งค่าความสูงขั้นต่ำของการเลื่อนการโพสต์ เนื้อหาจะขยายความสูงโดยอัตโนมัติ ปลั๊กอิน โปรแกรมสร้างหน้าเพจ เวอร์ชันนี้ไม่สามารถใช้ร่วมกับ WordPress Multisite โปรดอัพเกรด เป็นเวอร์ชัน Multisite ของปลั๊กอินนี้ รูปย่อ ขนาดย่อ ปุ่มขนาดย่อ ขนาดรูปขนาดย่อ หัวเรื่อง ขนาดชื่อเรื่อง เครื่องมือ ด้านบน ความห่างด้านบน ผลิตภัณฑ์ที่ได้คะแนนสูงสุด ความกว้างด้านบน การเปลี่ยนผ่าน ความเร็วการเปลี่ยนผ่าน สไลด์ โปร่งใส ปุ่ม Twitter ชนิด ไม่มีการอัพเดท! โปรดสมัครขอรับบริการหรือใส่คีย์การอนุญาตใช้งานด้านล่างเพื่อเปิดการอัพเดทอัตโนมัติ ไม่มีการอัพเดท! การสมัครบริการของคุณยังใช้งานอยู่ แต่โดเมนนี้ได้ถูกปิดใช้งาน โปรดเปิดใช้งานโดเมนนี้อีกครั้งในบัญชีของคุณเพื่อเปิดการอัพเดทอัตโนมัติ URL UTC ไม่สามารถเชื่อมต่อกับ Mad Mimi โปรดตรวจดูข้อมูลประจำตัวของคุณ ยกเลิกการติดตั้ง ปรับปรุงเทมเพลท การสมัครบริการอัพเดท & การสนับสนุน อัพเกรด อัพเกรดวันนี้