SimpleXML sur le serveur Apache d'OSX ?

Chamyky

Membre expert
Club iGen
11 Mars 2005
1 278
39
ehv.monespace.net
Bonjour, comme indiqué dans le titre, je cherche à savoir si il est possible d'activer/installer simpleXML sous OS X, pour aller avec le serveur Apache/PHP.
Je suis sous OS X 14.8 (enfin, la dernière version quoi :D !), sous Intel.

Merci d'avance :) !


Edit : Ou alors, existe-t-il un parseur XML plus répandu et/ou déjà intégré sur OSX ? Je viens de tester mon script sur un serveur distant, qui en connaît pas nonplus SimpleXML... vu que c'est en partie sur ce serveur que j'aimerais utiliser ce script, il me faudrait quelque chose de compatible, évidemment :D ! Il me semble qu'une solution qui était déjà dans php4 existe...
 
Merci, mais, j'ai plutôt peur d'installer un truc supplémentaire sur le serveur Apache (avec lequel j'ai déjà eu quelques problèmes...).
Mais, je vais quand même regarder ça (on ne sait jamais) :) !
 
SimpleXML est intégré à PHP5, alors que l'Apache de MacOS est toujours en 4.
J'espère qu'on aura un Apache 2/PHP 5 dans Leopard.

J'ai adapté une fonction trouvée sur http://fr2.php.net/manual/fr/ref.xml.php pour exploiter en javascript un xml transmis par php :

Bloc de code:
<?php

$file = "http://tonfichier.......";

function trustedFile($file)
{
   // faites seulement confiance aux fichiers locaux dont vous êtes le propriétaire
   if (!eregi("^([a-z]+)://", $file)
       && fileowner($file) == getmyuid()) {
           return true;
   }
   return false;
}

function startElement($parser, $name, $attribs)
{
   echo "<$name";
   if (count($attribs)) {
       foreach ($attribs as $k => $v) {
           echo " $k=\"$v\"";
       }
   }
   echo ">";
}

function endElement($parser, $name)
{
   echo "</$name>";
}

function characterData($parser, $data)
{
   echo "$data";
}

function PIHandler($parser, $target, $data)
{
   switch (strtolower($target)) {
       case "php":
           global $parser_file;
           // si le document analysé est de confiance, nous déclarons qu'il est sûr
           // d'exécuter le code PHP qu'il contient. Si ce n'est pas le cas, le code est affiché
           // à la place.
           if (trustedFile($parser_file[$parser])) {
               eval($data);
           } else {
               printf("Untrusted PHP code: %s",
                       htmlspecialchars($data));
           }
           break;
   }
}

function defaultHandler($parser, $data)
{
   if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
       printf('%s',
               htmlspecialchars($data));
   } else {
       printf('%s',
               htmlspecialchars($data));
   }
}

function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,
                                 $publicId) {
   if ($systemId) {
       if (!list($parser, $fp) = new_xml_parser($systemId)) {
           printf("Could not open entity %s at %s\n", $openEntityNames,
                   $systemId);
           return false;
       }
       while ($data = fread($fp, 4096)) {
           if (!xml_parse($parser, $data, feof($fp))) {
               printf("erreur XML : %s à la ligne %d lors de l'analyse de l'entité %s\n",
                       xml_error_string(xml_get_error_code($parser)),
                       xml_get_current_line_number($parser), $openEntityNames);
               xml_parser_free($parser);
               return false;
           }
       }
       xml_parser_free($parser);
       return true;
   }
   return false;
}

function new_xml_parser($file)
{
   global $parser_file;

   $xml_parser = xml_parser_create();
   xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
   xml_set_element_handler($xml_parser, "startElement", "endElement");
   xml_set_character_data_handler($xml_parser, "characterData");
   xml_set_processing_instruction_handler($xml_parser, "PIHandler");
   xml_set_default_handler($xml_parser, "defaultHandler");
   xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");

   if (!($fp = @fopen($file, "r"))) {
       return false;
   }
   if (!is_array($parser_file)) {
       settype($parser_file, "array");
   }
   $parser_file[$xml_parser] = $file;
   return array($xml_parser, $fp);
}

if (!(list($xml_parser, $fp) = new_xml_parser($file))) {
   die("Impossible d'ouvrir le fichier XML");
}

while ($data = fread($fp, 4096)) {
   if (!xml_parse($xml_parser, $data, feof($fp))) {
       die(sprintf("Erreur XML : %s à la ligne %d\n",
                   xml_error_string(xml_get_error_code($xml_parser)),
                   xml_get_current_line_number($xml_parser)));
   }
}

xml_parser_free($xml_parser);

?>
 
Merci :) !

Mais, comment ça "pour exploiter en javascript" ? Tu veux dire que ce script le transmet à une autre script javascript ?..

Et, je pense que le parseur dont tu m'as parlé pourrais bien être ma solution !
 
Merci :) !

Mais, comment &#231;a "pour exploiter en javascript" ? Tu veux dire que ce script le transmet &#224; une autre script javascript ?..

Il me sert de Proxy PHP, pour que Firefox puisse acc&#233;der &#224; un XML qui n'est pas sur le m&#234;me serveur que la page. Apr&#232;s pour mes besoins je le traduit en JSON par Javascript, car je n'ai pas trouv&#233; de parseur JSON en PHP (et j'ai la flemme d'en faire un !!!)

EDIT : que dis-je la flemme... plut&#244;t pas les comp&#233;tences !!!