diff options
Diffstat (limited to 'Services/Yadis/XML.php')
-rw-r--r-- | Services/Yadis/XML.php | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/Services/Yadis/XML.php b/Services/Yadis/XML.php index 59ec0df..331e8fb 100644 --- a/Services/Yadis/XML.php +++ b/Services/Yadis/XML.php @@ -307,8 +307,10 @@ function Services_Yadis_setDefaultParser(&$parser) } $__Services_Yadis_xml_extensions = array( - 'dom' => 'Services_Yadis_dom', - 'domxml' => 'Services_Yadis_domxml' + 'dom' => array('classname' => 'Services_Yadis_dom', + 'libname' => array('dom.so', 'dom.dll')), + 'domxml' => array('classname' => 'Services_Yadis_domxml', + 'libname' => array('domxml.so', 'php_domxml.dll')), ); /** @@ -327,20 +329,26 @@ function &Services_Yadis_getXMLParser() } $p = null; + $classname = null; // Return a wrapper for the resident implementation, if any. - foreach ($__Services_Yadis_xml_extensions as $name => $cls) { - if (extension_loaded($name) || - @dl($name . '.so')) { - // First create a dummy variable because PHP doesn't let - // you return things by reference unless they're - // variables. Feh. - $p = new $cls(); + foreach ($__Services_Yadis_xml_extensions as $name => $params) { + if (!extension_loaded($name)) { + foreach ($params['libname'] as $libname) { + if (@dl($libname)) { + $classname = $params['classname']; + } + } + } else { + $classname = $params['classname']; + } + if (isset($classname)) { + $p = new $classname(); return $p; } } - return null; + return $p; } -?>
\ No newline at end of file +?> |