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

PHP a XML-RPCPHP a XML-RPC

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

PHP a XML-RPC

Google       Google       2. 1. 2011       21 748×

„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 Open source neznamená „zdarma“

Open source neznamená „zdarma“

Mnoho společností po celém světě, univerzity, vládní organizace a jim podobné dnes používají open source technologie k vytvoření vlastních webových stránek. Tyto technologie se používají čím dál tím více. Jednoduše proto, že je řada poskytovatelů nabízí zcela zdarma. Je to ale opravdu to správné řešení pro všechny? 

Reklama
Reklama
Obrázek ke článku Rádi sledujete obsah streamovacích služeb? Dejte si pozor na pirátské verze Mandaloriana a Netflixu

Rádi sledujete obsah streamovacích služeb? Dejte si pozor na pirátské verze Mandaloriana a Netflixu

Streamovací služby a jejich obsah se v uplynulých měsících těšily velkému zájmu uživatelů, kteří se při pobytu v karanténě chtěli zabavit sledováním filmů a seriálů. Toho bleskově zneužili hackeři, kteří pod názvy oblíbených streamovacích platforem a jejich obsahu maskovali škodlivé soubory. Nejčastěji používali jako návnadu Netflix a seriál The Mandalorian. 

Obrázek ke článku Bionické ruce mění lidem životy. Konference INSPO ukázala nejnovější technologie

Bionické ruce mění lidem životy. Konference INSPO ukázala nejnovější technologie

Bionické myoprotézy rukou jsou ukázkou pokroku, který udělaly za posledních dvacet let technologie pro lidi se zdravotním postižením. Dnešní protézy, které fungují na principu snímání svalových vzorců, umožňují uživatelům operovat s křehkými předměty či provádět úkony složité na kooperaci různých částí těla – ať už jde o hru na hudební nástroje, zavazování tkaniček, nebo třeba pití ze skleničky. Na 20. ročníku konference INSPO se budou zájemci moci naživo seznámit nejen s takzvanou myorukou, ale rovněž s jedním z jejích uživatelů. 

Obrázek ke článku Využití .htaccess na malém webu

Využití .htaccess na malém webu

V dnešní době existuje spoustu cms, které mnohdy ale vůbec nepotřebujeme a stačila by nám pouze základní funkčnost k úpravě url, přesměrování. K tomuto účelu je ideální .htaccess soubor, který nám se všemi těmato úpravami umí pomoct.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý