http://trash.chregu.tv/phpconf2003/examples/
PHP5 の新しい XML 機能
著者 Christian Stocker 翻訳 Ice_berg16 (Scarecrow of Dreams)
対象読者
この記事は、PHP5 のすべての新しい XML 機能を対象としています。あらゆるレベルの PHP 開発者。読者は XML の基本的な知識を持っていることを前提としています。ただし、すでに PHP で XML を使用している場合にも、この記事の恩恵を受けることができます。
はじめに
今日のインターネットの世界では、XML はもはや流行語ではなく、広く受け入れられ、標準化されています。したがって、PHP4 と比較して、PHP5 の XML サポートはより注目を集めています。 PHP4 では、ほとんどの場合、非標準、API の破損、メモリ リーク、その他の不完全な機能に直面します。 PHP4.3 ではいくつかの欠点が改善されましたが、開発者は元のコードを放棄し、コード全体を PHP5 で書き直すことにしました。
この記事では、PHP5 の XML の魅力的な新機能をすべて 1 つずつ紹介します。
PHP4 の XML
初期の PHP バージョンではすでに XML がサポートされており、これはあらゆる XML ドキュメントを簡単に解析できる SAX ベースのインターフェイスにすぎません。 PHP4 に DOMXML 拡張モジュールが追加されたことで、XML のサポートが強化されました。その後、XSLT が補足として追加されました。 PHP 4 の段階を通じて、HTML、XSLT、DTD 検証などの他の機能も DOMXML 拡張機能に追加されました。残念ながら、XSLT および DOMXML 拡張機能は常に実験段階にあり、API 部分は複数回変更されています。デフォルトではまだインストールできません。さらに、DOMXML 拡張機能は W3C によって確立された DOM 標準に従っていませんが、独自の命名方法を持っています。この部分は PHP 4.3 で改善され、多くのメモリ リークやその他の機能が修正されましたが、安定した段階まで発展することはなく、いくつかの深刻な問題は修正がほぼ不可能になっています。デフォルトでは、SAX 拡張機能のみがインストールされます。他の拡張機能は広く使用されません。
これらすべての理由から、PHP の XML 開発者はコード全体を PHP5 で書き直し、使用標準に従うことにしました。
PHP5 用の XML
XML をサポートするすべての部分が PHP5 でほぼ完全に書き直され、すべての XML 拡張機能は GNOME プロジェクトの LIBXML2 ライブラリに基づいています。これにより、さまざまな拡張モジュールが相互運用できるようになり、コア開発者は基礎となるライブラリを開発するだけで済みます。たとえば、XML 関連のすべての拡張機能は、複雑なメモリ管理を 1 回実装するだけで改善できます。
PHP4 で有名な SAX パーサーを継承することに加えて、PHP5 は W3C 標準に準拠した DOM と LIBXSLT エンジンに基づく XSLT もサポートします。同時に、PHP 独自の SimpleXML 拡張機能と標準準拠の SOAP 拡張機能も追加されています。 XML の重要性がますます高まるにつれ、PHP 開発者は、デフォルトのインストール方法に XML のサポートを追加することを決定しました。これは、SAX、DOM、および SimpleXML を使用できるようになり、これらの拡張機能がより多くのサーバーにインストールされることを意味します。次に、PHP のコンパイル時に XSLT と SOAP のサポートを明示的に構成する必要があります。
データ ストリームのサポート
すべての XML 拡張機能は、PHP から直接アクセスしない場合でも、PHP データ ストリームをサポートするようになりました。たとえば、PHP5 では、ファイルまたはディレクティブからデータ ストリームにアクセスできます。基本的に、通常のファイルにアクセスできる場所ならどこからでも PHP データ ストリームにアクセスできます。
データ フローは PHP4.3 で簡単に導入され、PHP5 ではさらに改良され、ファイル アクセス、ネットワーク アクセス、および一連の機能関数の共有などのその他の操作が含まれます。 PHP コードを使用して独自のデータ フローを実装することもできるため、データ アクセスが非常に簡単になります。この部分の詳細については、PHP ドキュメントを参照してください。
SAX
SAX の正式名称は Simple API for XML で、XML ドキュメントを解析するためのインターフェイスであり、コールバック形式に基づいています。 SAX は PHP3 からサポートされており、現在まで大きな変更はありません。 PHP5 では API インターフェイスは変更されていないため、コードは引き続き実行されます。唯一の違いは、EXPAT ライブラリではなく、LIBXML2 ライブラリに基づいていることです。
この変更により、名前空間のサポートにいくつかの問題が発生しましたが、LIBXML2.2.6 バージョンでは解決されました。ただし、LIBXML2 の以前のバージョンでは解決されていないため、xml_parse_create_ns(); を使用する場合は、システムに LIBXML2.2.6 をインストールすることを強くお勧めします。
DOM
DOM (Document Object Model) は、XML ドキュメント ツリーにアクセスするために W3C によって開発された一連の標準です。 PHP4 では、DOMXML を使用してこれを行うことができます。DOMXML の主な問題は、標準の命名方法に準拠していないことです。そして、メモリリークの問題は長い間存在していました (PHP4.3 ではこの問題が修正されています)。
新しい DOM 拡張機能は W3C 標準に基づいており、メソッド名と属性名が含まれています。 Javascript などの他の言語の DOM に慣れている場合は、PHP で同様の機能を記述するのが非常に簡単です。メソッドとパラメータは同じであるため、毎回ドキュメントを確認する必要はありません。
新しい W3C 標準のため、DOMXML ベースのコードは実行されません。 PHP の API は大きく異なります。ただし、コードで W3C 標準と同様のメソッド命名方法が使用されている場合、移植はそれほど難しくありません。必要なのは、load 関数と save 関数を変更し、関数名のアンダースコアを削除することだけです (DOM 標準では最初の文字に大文字が使用されます)。もちろん他の部分の調整は必要ですが、主なロジックは変更しないでかまいません。
DOM を読む
この記事では、DOM 拡張機能のすべての機能については説明しません。説明する必要はありません。おそらく、HTTP://www.w3.org/DOM のドキュメントをブックマークする必要があります... この記事のほとんどの例では同じ XML ファイルを使用します。zend.com には非常に単純な RSS バージョンがあります。以下のテキストをテキスト ファイルに貼り付け、articles.xml として保存します。
http://www.zend.com/zend/week/week172.php
http://www.zend.com/zend/tut/tut-hatwar3.php
この例を DOM オブジェクトにロードするには、まず、 DOMDocument オブジェクトを作成し、XML ファイルをロードします。
$dom = new DomDocument();
$dom->load("articles.xml");
上記のように、PHP のデータ ストリームを使用して XML ドキュメントをロードできます。 ->load("file:///articles.xml");
(または他のタイプのデータ ストリーム)
XML ドキュメントをブラウザに出力するか、標準としてマークする場合は、次を使用します:
print $ dom->saveXML();
ファイルとして保存したい場合は、次を使用してください:
print $dom->save("newfile.xml"); stdout)
もちろん、この例にはあまり機能がありません。もっと便利なことをやってみましょう。すべてのタイトル要素を取得しましょう。これを行うには多くの方法がありますが、最も簡単なのは getElementsByTagName($tagname) を使用することです:
$titles = $dom->getElementsByTagName("title");
foreach($titles as $node) {
print $node- > ;textContent . "n";
textContent 属性は W3C 標準ではありません。W3C 標準を使用すると、次のように簡単に読み取ることができます。 firstChild->data;
(この時点で、firstChild ノードが必要なテキスト ノードであることを確認する必要があります。そうでない場合は、すべての子ノードを検索して見つける必要があります)。
もう 1 つ注意すべき点は、getElementsByTagName() は PHP4 の get_elements_by_tagname() のような配列ではなく、DomNodeList オブジェクトを返すことです。ただし、この例でわかるように、foreach ステートメントを簡単に使用してそれをトラバースできます。 $titles->item(0) を使用してノードに直接アクセスすることもできます。このメソッドは最初のタイトル要素を返します。
すべてのタイトル要素を取得する別の方法は、ルート ノードからトラバースすることです。ご覧のとおり、この方法はより複雑ですが、タイトル要素以外の要素が必要な場合はより柔軟です。
foreach ($dom->documentElement->childNodes as $articles) {
//ノードが要素 (nodeType == 1) で名前が item の場合、ループを継続します
if ($articles->nodeType == 1 && $articles->nodeName == "item") {
foreach ($articles->childNodes as $item) {
//ノードが要素で名前が title の場合、それを出力します
if ($ item->nodeType == 1 && $item->nodeName == "title") {
print $item->textContent . "n";
}
}
}
XPath
XPaht SQL for XML と同様に、XPath を使用すると、XML ドキュメント内のパターン構文に一致する特定のノードをクエリできます。 XPath を使用してすべてのタイトル ノードを取得したい場合は、次のようにします。
$xp = new domxpath($dom)
$titles = $xp->query("/articles/item/title"); ($ title as $node) {
print $node->textContent . "n";
?>
これは getElementsByTagName() メソッドの使用と似ていますが、たとえば次のような場合です。 title要素があります。これはarticleの子要素です(itemの子要素ではありません)。getElementsByTagName()はそれを返します。 /articles/item/title 構文を使用すると、指定された深さと位置にある title 要素のみが取得されます。これは単なる単純な例ですが、さらに深く掘り下げると、次のようになります:
/articles/item[position() = 1]/title 最初の
/articles/item/title[@id = '23' をすべて返します。 item 要素 ] id 属性を含むすべてのタイトルを返し、値は 23 です
/articles//title items 要素の下にあるすべてのタイトルを返します (翻訳者注: // は任意の深さを表します)
特別な兄弟要素を含むポイントをクエリすることもできます。テキストコンテンツを含む特別な要素、または名前空間の使用など。大量の XML ドキュメントをクエリする必要がある場合、XPath の適切な使用方法を学習すると、使用する時間が大幅に節約され、標準 DOM よりも必要なコードが少なくなります。
データを DOM に書き込む
ドキュメント オブジェクト モデルは、読み取りとクエリだけでなく、操作や書き込みも行うことができます。(DOM 標準は、作成者が考えられるすべての環境をサポートしたいと考えていたため、少し長くなりますが、非常にうまく機能します)。次の例を見てください。article.xml ファイルに新しい要素が追加されています。
$item = $dom->createElement("item");
$title = $dom->createElement("title");
$titletext = $dom->createTextNode("PHP5 の XML");
$title->appendChild($titletext);
$item->appendChild($title);
$dom->documentElement->appendChild($item); ;
まず、必要なすべてのノード、項目要素、タイトル要素、項目タイトルを含むテキスト ノードを作成し、すべてのノードをリンクし、テキスト ノードをタイトル要素に追加します。要素を追加し、最後に item 要素を記事のルート要素に挿入します。 XML ドキュメントに新しい記事リストが追加されました。
拡張クラス (クラス)
さて、上記の例は、PHP4 で DOMXML 拡張機能を使用して実行できます (API が少し異なるだけです)。DOM クラスを自分で拡張できるのは、記述がより読みやすくなる PHP5 の新機能です。強力なコードが可能になります。以下は、DOMDocument クラスを使用して書き直された例全体です。
class Articles extends DomDocument {
function __construct() {
//必ず呼び出す必要があります!
parent::__construct()
}
function addArticle($title) {
$item = $this->createElement("item");
$titlespace = $this->createElement("title");
$titletext = $this->createTextNode($title); >appendChild($titletext);
$item->appendChild($titlespace);
}
}
$dom = 新しい記事
$dom ->load("articles.xml");
$dom->addArticle("PHP5 の XML");
HTML
PHP5 の注目されない機能は、libxml2 ライブラリの HTML サポートです。DOM 拡張機能を使用すると、整形式の XML ドキュメントだけでなく、整形式でない HTML ドキュメントも読み込むことができ、利用可能なすべてを使用して、それを標準の DOMDocument オブジェクトとして扱うことができます。 XPath や SimpleXML などのメソッドと機能。
HTML の機能は、制御できないサイト上のコンテンツにアクセスする必要がある場合に非常に役立ちます。 XPath、XSLT、または SimpleXML を使用すると、正規表現を使用して文字列を比較したり、SAX パーサーを使用したりするなど、多くのコードを節約できます。これは、HTML ドキュメントが適切に構造化されていない場合 (よくある問題です!) に特に役立ちます。
次のコードは、php.net のホームページを取得して解析し、最初の title 要素のコンテンツを返します。
$dom = new DomDocument();
$dom->loadHTMLFile("http://www.php.net/");
$title = $dom->getElementsByTagName("title"); title->item(0)->textContent;
指定された要素が見つからない場合、出力にエラーが含まれる可能性があることに注意してください。 Web サイトがまだ PHP を使用して HTML4 コードを出力している場合、DOM 拡張機能は HTML ドキュメントを読み込むだけでなく、HTML4 形式のファイルとして保存することもできるという朗報があります。 DOM ドキュメントを追加した後、$dom->saveHTML() を使用して保存します。なお、出力するHTMLコードをW3C規格に準拠させるためには、tidy extension(tidy extension)を使用しない方がよいでしょう。 Libxml2 ライブラリでサポートされる HTML は、あらゆる事態を考慮しておらず、非汎用形式の入力を適切に処理しません。
検証
XML ドキュメントの検証はますます重要になっています。たとえば、外部リソースから XML ドキュメントを取得した場合、それを処理する前に、それが特定の形式に準拠しているかどうかを確認する必要があります。幸いなことに、最も広く使用されている 3 つの標準 (DTD、XML スキーマ、または RelaxNG) のいずれかを使用して検証できるため、PHP で独自のバリデータを作成する必要はありません。
DTD は SGML 時代に生まれた標準であり、XML の新しい機能 (名前空間など) がいくつか欠けており、XML で記述されていないため、解析や変換も困難です。
XML スキーマイは W3C によって開発された標準であり、広く使用されており、XML ドキュメントを検証するために必要なほとんどすべてが含まれています。
RelaxNG は、複雑な XML スキーマ標準に相当するもので、Libertarian Organization によって作成されました。XML スキーマよりも実装が簡単であるため、ますます多くのプログラムが RelaxNG をサポートし始めています
従来の計画ドキュメントがない場合、または非常に複雑な場合。 XML ドキュメントの場合は、RelaxNG を使用します。書き込みと読み取りは比較的簡単で、これをサポートするツールはますます増えています。 XML テンプレートから RelaxNG ドキュメントを自動的に作成できる Trang というツールもあります。また、libxml2 は RelaxNG (および古い DTDS) のみを完全にサポートしていますが、libxml2 は ML スキーマも完全にサポートする予定です。
XML ドキュメントを検証するための構文は非常に単純です:
$dom->validate('articles.dtd');
$dom->schemaValidate(')記事.xsd');
現在、これらはすべて true または false を返すだけであり、エラーは PHP 警告として出力されます。ユーザーフレンドリーな情報を返すのは明らかに良い考えではありません。これは PHP 5.0 以降のバージョンで改善される予定です。これがどのように正確に実装されるかはまだ議論中ですが、エラー報告は間違いなくより適切に処理されるでしょう。
SimpleXML
SimpleXML は、PHP の XML ファミリーに追加された最後のメンバーです。SimpleXML 拡張機能を追加する目的は、標準のオブジェクト プロパティとイテレーターを使用して XML ドキュメントにアクセスする簡単な方法を提供することです。この拡張機能には多くのメソッドはありませんが、それでも非常に強力です。ドキュメントからすべてのタイトル ノードを取得するのに必要なコードは以前よりも少なくなります。
$sxe = simplexml_load_file("articles.xml");
foreach($sxe->item as $item) {
print $item->title ."n";
何をしているのですか?まず、articles.xml を SimpleXML オブジェクトにロードします。次に、$sxe 内のすべての item 要素を取得し、最後に $item->title が title 要素のコンテンツを返すだけです。 $item->title['id'] を使用して、連想配列を使用して属性をクエリすることもできます。
これは本当に素晴らしいことです。たとえば、$item->title[0] は例と同じ結果を返します。 ->item->title as $item) は、ドキュメント内のすべてのタイトル要素ではなく、最初のタイトルのみを返します。 (XPath で予想していたとおりです)。
SimpleXML は、実際には、Zend Engine 2 の新機能を使用する最初の拡張機能です。したがって、これはこれらの新機能のテスト ポイントとなり、開発段階ではバグや予期せぬエラーが発生することは珍しくありません。
上記の例で使用されているすべてのノードを走査する方法に加えて、SimpleXML には XPath インターフェースもあり、単一ノードにアクセスする簡単な方法を提供します。
foreach($sxe->xpath('/articles/item/title') as $item) {
print $item . "n";
このコードが前の例より短いことは否定できません。ただし、より複雑な XML ドキュメントや深くネストされた XML ドキュメントを提供する場合は、SimpleXML で XPath を使用すると、入力の手間が大幅に節約されることがわかります。
SimpleXML ドキュメントにデータを書き込む
SimpleXML を解析して読み取るだけでなく、SimpleXML ドキュメントを変更することもできます。少なくともいくつかの拡張機能を追加します:
$sxe->item->title = "XML in PHP5"; //title 要素の新しいコンテンツ。
$sxe->item->title['id'] = 34; // title 要素の新しい属性。
$xmlString = $sxe->asXML(); // SimpleXML オブジェクトをシリアル化された XML 文字列として返します
print $xmlString;
相互運用性
SimpleXML は libxml2 ライブラリに基づいているため、SimpleXML オブジェクトをほぼ簡単に変換できます。速度に影響を与えずに DomDocument オブジェクトを処理します。 (ドキュメントを内部的にコピーする必要はありません)。このメカニズムのおかげで、両方のオブジェクトの長所を利用できます。これは次のように使用されます。 ;
$dom = dom_import_simplexml($sxe);
XSLT
XSLT は、XML 文書を他の XML 文書に変換するために使用される言語であり、プログラム処理およびオブジェクトで使用されます。 (PHP など) 指向の言語は異なります。 PHP4 には、Sablotron (広く使用されている XSLT 拡張機能) と Libxslt (domxml 拡張機能) という 2 つの XSLT プロセッサがあります。これら 2 つの API は相互に互換性がなく、使用方法も異なります。 PHP5 は libxslt プロセッサのみをサポートします。これは、Libxml2 に基づいており、PHP5 の XML 概念により近いため選択されました。
Sablotron を PHP5 にバインドすることは理論的には可能ですが、残念ながら誰もそれを行っていません。したがって、Sablotron を使用している場合は、PHP5 の libxslt プロセッサに切り替える必要があります。 Libxslt は Javascript 例外処理サポートを備えた Sablotron であり、PHP の強力なデータ フローを使用して Sablotron の独自のスキーム ハンドラーを再実装することもできます。さらに、libxslt は最速の XSLT プロセッサの 1 つであるため、無料で速度を向上させることができます。 (実行速度はサブロトロンの2倍)。
この記事で説明した他の拡張機能と同様に、XSL 拡張機能、DOM 拡張機能間で XML ドキュメントを交換することも、その逆も行うことができます。これは、EXT/XSL 拡張機能には XML ドキュメントをロードおよび保存するためのインターフェイスがないためです。 DOM 拡張機能のみを使用できます。 XSLT 変換を初めて学ぶ場合、この API は Mozilla から「借用」されているため、ここには W3C 標準はありません。
まず XSLT スタイルシートが必要で、次のテキストを新しいファイルに貼り付けて、articls として保存します。 = new DomDocument();
$inputdom = new DomDocument( );
$inputdom->load("articles.xml");
/* XSLT プロセッサを作成し、スタイルシートをインポートします*/
$proc = new XsltProcessor() = $proc->importStylesheet($xsl) );
$proc->setParameter(null, "titles", "Titles" );
/* XML ドキュメントを変換して出力します */
$newdom = $proc->transformToDoc($inputdom); ->saveXML();
?>
上の例では、最初に DOM を使用します。load() メソッドは、XSLT スタイル シートのarticle.xsl をロードし、その後、新しい XsltProcessor オブジェクトを作成します。このオブジェクトは、後でインポートされて使用されます。 XSLT スタイル シート オブジェクト。パラメーターは次のように設定できます: setParameter(namespaceURI, name, value)、最後に XsltProcessor オブジェクトは、transformToDoc($inputdom) を使用して変換を開始し、新しい DOMDocument オブジェクトを返します。
. この API の利点は、transformToDoc() 関数をさまざまな XML ドキュメントに適用できるため、同じスタイルシートを使用して多くの XML ドキュメントを変換できることです。一度読み込むだけで再利用できます。
transformToDoc() に加えて、変換には 2 つのメソッドがあります。transformToXML($dom) は文字列を返し、transformToURI($dom, $uri) は変換されたドキュメントをファイルまたは PHP データ ストリームに保存します。または indent="yes" などの XSLT 構文を使用する場合は、変換結果を文字列またはファイルに直接保存する場合に限り、DOMDocument オブジェクトはこの情報を保存できないため、transformToDoc() を使用できないことに注意してください。あなたはこれができますか。
PHP 関数の呼び出し
XSLT 拡張機能の最後に新たに追加された機能は、XSLT スタイル シート内で任意の PHP 関数を呼び出す機能です。正統派 XML サポーターは間違いなくこの機能を好みません (このようなスタイル シートは少し複雑で、ロジックが混乱しやすい可能性があります)。とデザイン)、いくつかの場所で非常に役立ちます。 XSLT は関数に関しては非常に制限されており、異なる言語で日付を出力しようとしても非常に面倒です。しかし、この機能を使用すると、PHP だけを使用するのと同じくらい簡単にこれを処理できます。 XSLT に関数を追加するコードは次のとおりです。
function dateLang () {
return strftime("%A")
}
$xsl = new DomDocument(); " );
$inputdom = new DomDocument();
$inputdom->load("today.xml");
$proc = new XsltProcessor();
$proc->registerPhpFunctions();
// ロード$xsl を文書化して処理します
$xsl = $proc->importStylesheet($xsl)
/* XML ドキュメントを変換して出力します */
$newdom = $proc->transformToDoc($inputdom); newdom->saveXML();
?> 以下は、この関数を呼び出す XSLT スタイル シート datetime.xsl です。
以下は、スタイルシートtoday.xmlを使用して変換されるXML文書です(同様に、articles.xmlでも同じ結果が得られます)。
上記のスタイルシート、PHPスクリプト、およびすべてのXMLファイルは、現在のシステム設定の言語で週の名前を出力します。 php:function() にパラメータを追加すると、追加されたパラメータが PHP 関数に渡されます。関数 php:functionString() があります。この関数はすべての入力パラメータを文字列に自動的に変換するため、PHP で変換する必要はありません。
変換前に $xslt->registerPhpFunctions() を呼び出す必要があることに注意してください。そうしないと、セキュリティ上の理由から PHP 関数呼び出しが実行されません (XSLT スタイルシートを常に信頼していますか?)。現時点ではアクセスシステムは実装されていませんが、おそらく将来のバージョンの PHP5 でこの機能が実装されるでしょう。
要約
PHP の XML サポートは、標準に準拠しており、強力で、相互運用性があり、共同で使用できるようにするための大きな一歩を踏み出しました。新しく追加された SimpleXML 拡張機能は、XML ドキュメントにアクセスする簡単かつ迅速な方法を提供します。これにより、特に構造化されたドキュメントがある場合や強力な XPath を使用できる場合に、多くのコードを節約できます。
PHP5 XML 拡張機能で使用される基礎となるライブラリである libxml2 のおかげで、DTD、RelaxNG、または XML スキーマを使用した XML ドキュメントの検証がサポートされるようになりました。
XSL サポートも刷新され、Libxslt ライブラリを使用するようになりました。これにより、元の Sablotron ライブラリよりもパフォーマンスが大幅に向上しました。さらに、XSLT スタイル シート内で PHP 関数を呼び出すことで、より強力な XSLT コードを作成できるようになりました。
PHP4 または他の言語で XML を使用したことがある場合は、PHP5 の XML 機能が気に入っていただけるでしょう。XML は PHP5 で大幅に変更され、標準に準拠しており、他のツールや言語と同等です。
リンク
PHP 4関連
Domxml拡張子: http://www.php.net/domxml/
Sablotron拡張子: http://www.php.net/xslt/
Libxslt: http://www.php.net /manual/en/functi...-stylesheet.php
PHP 5 関連
SimpleXML: http://www.php.net/simplexml/
Streams: http://www.php.net/manual/en/ref .stream.php
標準
DOM: http://www.w3.org/DOM
XSLT: http://www.w3.org/TR/xslt
XPath: http://www.w3.org/TR /xpath
XML スキーマ: http://www.w3.org/XML/Schema
RelaxNG: http://relaxng.org/
Xinclude: http://www.w3.org/TR/xinclude/
ツール
Libxml2、基礎となるライブラリ: http://xmlsoft.org/
Trang、Schema/RelaxNG/etc コンバータ: http://www.thaiopensource.com/relaxng/trang.html
著者について
Christian Stocker は Bitflux の出身ですGmbH、チューリッヒ 同社の創設者兼 CEO である彼は、XSL、DOM、imagick 拡張機能のメンテナーであり、ドイツ語の書籍 PHP de Luxe の共著者であり、Bitflux Editor や Popoon などの他のオープンソース プロジェクトにも取り組んでいます。 chregu@php.net まで連絡してください。