PHP a XML-RPC
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

PHP a XML-RPCPHP a XML-RPC

 

PHP a XML-RPC

Google       Google       2. 1. 2011       19 067×

„To XML-RPC je stará technologie, určitě najdu v PHP spoustu tříd, addonů, extenzí a kvalitního kódu.“ Opak je bohužel pravdou, pro XML-RPC mnoho dokumentace a kvalitního kódu není. Pojďme si ukázat, co vlastně se dá používat a jak obejít bugy a „vlastnosti“.

Reklama
Reklama

Výběr toho, co použijete, závisí na vaší verzi PHP a na tom, co „chcete“. Pokud používáte PHP4 style, či nějaké starší verze 5.x, asi se uchýlíte k http://phpxmlrpc.sourceforge.net/. Pokud ovšem používáte PHP 5.2, zvolíte ne tolik zabugovanou interní XML-RPC extenzi http://cz.php.net/xmlrpc, no a v PHP 5.3 třeba zamíříte k jeho nástavbě od Jyxo: https://github.com/jyxo/php/tree/master/Jyxo/Rpc.

Ani jedno ideální

Rozebírat starou knihovnu asi nemá cenu, sice existuje novější beta verze, která podporuje 5.2, ale žádný vývoj se tu neděje, výkonnostně taky žádný zázrak.

Dokumentace extenze PHP je zase pro změnu žalostná. Příklady loudíte spíše z komentářů. Nicméně to je taky „zdroj“, a tak za chvíli vyloudíte něco, co snad funguje. Pokud zůstanete, po nějaké době narazíte na první problém – diakritika a kódování. Ideální je se posunout k nějaké nadstavbě, třeba knihovně od Jyxa.

Otázka je, jestli si chcete do projektu mermomocí zatahovat jmenné prostory + ještě nějaké další profilovací knihovny od Jyxo. Tady klidně vymýšlejte kolo znovu, protože těch dobrých ještě moc vytvořeno nebylo.

Diakritika

Vyřešit problémy s diakritikou se dá velmi jednoduše. Při tvorbě XML-RPC requestu musíte vypnout escapování, a to tak, že jej nastavíte jenom pro „markup“.

$options = array(
	'output_type' => 'xml',
	'verbosity' => 'pretty',
	'escaping' => array('markup'),
	'version' => 'xmlrpc',
	'encoding' => 'utf-8'
);
xmlrpc_encode_request($method, $params, $options);

Nezapomeňte také encoding nastavit na UTF-8 a v tomto kódování data podávat. Ať už byste nastavili encoding jakkoliv, jedná se pouze o hodnotu, která bude v XML hlavičce, extenze ji při escapování kódování nijak nezohledňuje, a proto bylo třeba escapování vypnout.

Klíče

Nyní si ukážeme trochu složitější problém, který je vlastností PHP. Pokud v PHP do pole uložíte data s číselným klíčem předaným jako string, PHP převede klíč na integer:

$var = array();
$var['123'] = 'A';
$var[123]   = 'B';
echo $var['123'];   // vypise B

Tuto vlastnost jste možná ještě ani nezpozorovali, neboť nelineární číselné klíče se často nepoužívají kombinovaně s těmi stringovými. Problém ale nastane v XML-RPC, to totiž (stejně jako např. JavaScript) rozeznává pole a strukturu. Pole má lineární číselné klíče, kdežto struktura může mít za klíč třeba i řetězec.

Jak ale XML-RPC  extenzi říct, že pole není pole, ale struktura, když už samo PHP nám „zmrší klíče“. Existuje na to jednoduchý hack. Abychom zajistili, že PHP klíče nepřekonvertuje na integer, připojíme k nim hodnotu "\00". Klíče tak zůstanou stringy. XML-RPC extenze je pak správně konvertuje na strukturu a znak \00 zahodí.

Zbývá pak už vyřešit jediný problém, jak přidat tento znak automaticky a jen tehdy, kdy je třeba, tedy do pole, které nemá lineární číselné klíče. Toto pole detekujeme také snadno: vezmeme jeho klíče jako hodnoty a porovnáme je s hodnotami nově vytvořeného pole, kde budou hodnoty o stejném rozsahu (nagenerujeme je funkcí range). Pokud se hodnoty shodují, klíče původního pole byly také lineární.

function fixXmlrpcArgs($array)
{
	if (!is_array($array))
		return $array;

	$new = array();
	$range = range(0, count($array) - 1);
	if (array_keys($array) == $range) { # just array
		foreach ($array as $val)
			$new[] = fixXmlrpcArgs($val);

	} else { # structure
		foreach ($array as $key => $val)
			$new[$key. chr(0x00)] = fixXmlrpcArgs($val);

	}

	return $new;
}

Závěrem

Tento druhý fix můžete s radostí používat a šířit. Zájemce nechť klidně vytvoří na Githubu pull request pro Jyxo.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jan ŠkrášekHonza pracuje jako webdeveloper, věnuje se vývoji Nette\Database a Nextras komponentám. Mnoho času věnuje komunitnímu portálu signály.cz. Honza je taky fanouškem XML technologií.
Web     Twitter    

Nové články

Obrázek ke článku Blockchain & Bitcoin konference

Blockchain & Bitcoin konference

V pátek 19. 5. 2017 se v pražském konferenčním centru Andel’s konala Blockchain & Bitcoin konference. Řada odborníků a podnikatelů v oboru blockchainu a kryptoměn představila možnosti budoucího směřování tohoto oboru. Speakeři většinou rusky mluvící provenience prezentovali řešení svých firem založená na technologii blockchainu.

Reklama
Reklama
Obrázek ke článku Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Bezpečnostní tým Cisco Talos odhalil celkem 4 kampaně dosud neobjeveného malwaru, který dostal jméno KONNI. Ten se dokázal úspěšně maskovat od roku 2014. Zpočátku se malware zaměřoval pouze na krádeže citlivých dat. Za 3 roky se ale několikrát vyvinul, přičemž jeho současná verze umožňuje útočníkovi z infikovaného počítače nejenom krást data, ale i mapovat stisky na klávesnici, pořizovat screenshoty obrazovky či v zařízení spustit libovolný kód. Pro odvedení pozornosti oběti zasílali útočníci v příloze také obrázek, zprávu a výhružkách severokorejského režimu či kontakty na členy mezinárodních organizací.

Obrázek ke článku Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Trend Micro, celosvětový lídr v oblasti bezpečnostních řešení a VMware, přední světový dodavatel cloudové infrastruktury a řešení pro podnikovou mobilitu, oznámily výsledky výzkumu mezi českými a slovenskými manažery zodpovědnými za ochranu osobních údajů, který zjišťoval, jak jsou připraveni na nové nařízení o ochraně osobních údajů (GDPR). Většina firem v České republice a na Slovensku nad 100 zaměstnanců je již s novým nařízením GDPR obeznámena. Výzkum provedený ve spolupráci s agenturou Ipsos ukázal, že téměř 8 firem z 10 o nařízení ví, přičemž jeho znalost je o něco vyšší na Slovensku (89 %) než v České republice (69 %).

Obrázek ke článku Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Jeden z nejznámějších ransomwarů, Locky, se vrací. Po většinu roku 2016 patřil mezi nejrozšířenější vyděračské softwary. Ke svému šíření využíval emailové kampaně s infikovanými přílohami. Ransomware Locky byl rozesílán prostřednictvím botnetu (internetový robot zasílající spamy) Necurs. Jeho aktivita na konci roku 2016 téměř upadla a spolu s ní i šíření ransomwaru Locky. Před několika týdny se Necurs opět probudil a začal posílat spamy nabízející výhodný nákup akcií. Dne 21. dubna zaznamenal bezpečnostní tým Cisco Talos první velkou kampaň ransomwaru Locky prostřednictvím botnetu Necurs za posledních několik měsíců.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý