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
Pergoly a střechy Brno

PHP a XML-RPC

Google       Google       2. 1. 2011       21 947×

„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 Konference: Moderní informační systémy podporují automatizaci

Konference: Moderní informační systémy podporují automatizaci

Současná situace v šíření onemocnění Covid-19 klade na řadu firem nové nároky a mnohé z nich jsou nyní více než kdy jindy závislé na nejmodernějších informačních technologiích. Proto i v oblasti podnikových informačních systémů vidíme rostoucí důraz na automatizaci nebo na důslednou integraci. Také o těchto trendech se bude mluvit na konferenci Firemní informační systémy, která se koná 24.9.2020 v pražském Kongresovém centru Vavruška na Karlově náměstí.

Reklama
Reklama
Obrázek ke článku Nebezpečí ukrytá v USB: z nuly na škvarek za pět sekund

Nebezpečí ukrytá v USB: z nuly na škvarek za pět sekund

Za cenu šesti dolarů lze celkem bez obtíží koupit nový, líbivě vyhlížející flash disk. Přidaná hodnota, které se vám spolu s ním dostane, už tak moc líbivá není. To, co se před pár sekundami tvářilo jako externí disk, se po připojení k počítači změní v důmyslné elektrické křeslo, které vaše zařízení v onen příslovečný škvarek promění za pár sekund. Cílovou skupinou pro koupi takových zařízení by mohli být záškodníci, kteří by tímto způsobem osnovali pomstu třeba vůči záletnému partnerovi. 

Obrázek ke článku Znalosti, dovednosti i prestižní titul MBA: Jde to i moderně a online

Znalosti, dovednosti i prestižní titul MBA: Jde to i moderně a online

Snad nikdy není špatná příležitost na investici do hodnotného vzdělání. Obzvlášť v případě, že absolvent dovede teoretické poznatky přetavit v praktické dovednosti, využitelné při řešení problémů i v komunikaci. Právě na to se specializuje studijní program MBA Řízení informačních technologií, vyučovaný na Business Institutu.

Obrázek ke článku Coding Bootcamp Praha: Obor IT krize nepoznamenala, žádaní jsou weboví vývojáři

Coding Bootcamp Praha: Obor IT krize nepoznamenala, žádaní jsou weboví vývojáři

Pandemie Covid-19 otřásla trhem práce v základech. Dopady krize pocítilo celkově až 45 % zaměstnanců. Není divu, že čím dál větší jistotu přináší obor IT. Ten zůstal krizí téměř nepoznamenán a při nutnosti začít dělat věci na dálku se ještě více ukázalo, jak moc mnohé firmy kvalitní IT potřebují. Do IT nyní přicházejí začátečníci, kteří v něm vidí lukrativní budoucnost a jistotu, ale i freelanceři a zaměstnanci z oborů zasažených krizí

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