SimpleXML chez 1and1

Envie de manipuler un peu de XML facilement avec SimpleXML en php, mais vous êtes hébergé en mutualisé chez 1and1.fr et vos scripts refusent de fonctionner… des interdictions dans tous les sens, des fonctions non prises en charges, l’impression d’être attaché avec des menottes dans le dos?

Voici la petite procédure à suivre:

D’abord il est probable que votre hébergement soit encore en php4 par défaut alors que php5 est installé. Or SimpleXML est une composante de php5.
Pour activer le support de php5, placer un fichier .htaccess dans votre dossier (où à la racine de votre site) avec dedans:
AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php

Cela permet d’activer l’interpréteur php5 pour les fichiers php.

Puis on se rend compte que la fonction simplexml_load_file a été désactivée car « la directive allow_url_fopen est sur Off dans la configuration de PHP ».
C’est bien dommage car cette fonction est très efficace pour charger un fichier xml en tant qu’objet xml. La FAQ de 1and1 conseille plutôt d’utiliser la fonction fsockopen (toute bridée) et implicitement de passer par simplexml_load_string ensuite. Ils donnent même un exemple bien poussif pour utiliser fsockopen chez 1and1. Il n’en reste que cette solution est bien trop lente et surtout bien trop lourde (en testant leur solution, charger un fichier xml en objet est à vue d’oeil 50 fois plus lent que par simplexml_load_file).
On va donc faire fit de cette solution et activer la directive allow_url_fopen = On. Il suffit pour cela d’ajouter un fichier php.ini dans le répertoire où s’exécutent vos scripts en mettant dedans la ligne
allow_url_fopen = On

Ainsi il est possible de charger un fichier distant avec simplexml_load_file.

Recommandations:
– Veillez à bien sécuriser vos scripts afin que l’on ne puisse utiliser à votre insu cette fonctionnalité pour charger du contenu ou des scripts.
– Et puis veillez à optimiser vos scripts pour qu’ils soient efficaces et qu’ils consomment le moins de ressources possible afin de ne pas vous faire taper sur les doigts (coupure du site, mise sur un serveur poubelle) par 1and1.

5 thoughts on “SimpleXML chez 1and1”

  1. Sebbat says:

    Décidément, rien n’est simple avec 1&1 ! Merci pour le tuyau.

  2. Gabriel H. says:

    J’ai voulu installer phpBB3 sur mon hébergement 1&1, j’ai suivi tes instructions, malheureusement ça ne fonctionne pas, phpBB me dit toujours que allow_url_fopen est désactivé. Pourtant j’ai bien placé un .htaccess et un php.ini comme précisé. Que faire ?

  3. ysztof says:

    Alors je pense que ton problème est du au fait que ce qui est défini pour un dossier avec un fichier php.ini ne s’hérite pas dans ses sous-dossiers. Et à mon avis, phpBB étant plutôt une usine à gaz, il doit y avoir pas mal de sous-dossiers.

    Tu as donc le choix:
    – soit de copier ce fichier php.ini dans tous les sous-dossiers
    – soit de repérer les fichiers PHP qui font des appels distants avec des fonctions comme fopen/fsockopen/simplexml_load_file, etc… et d’y mettre une copie du fichier php.ini dans leur dossier respectif (ce qui est peut-être plus prudent)

    La troisième solution (plus aisée) consistait à utiliser la commande « suPHP_ConfigPath » dans le fichier .htaccess afin de faire répercuter la config de php.ini automatiquement dans les sous-dossiers. Mais elle ne semble pas fonctionner chez 1and1 et retourne une erreur 500 (le module suexec ne doit pas être activé sur le serveur pour raison de sécurité).

    Attention: phpBB a régulièrement des failles et comme une partie des webmasters n’applique pas systématiquement les patchs de sécurité, les forums phpBB sont souvent la cible des hackers en herbe, voire de scans automatiques. Or comme tu ajoutes la possibilité avec allow_url_fopen à ton hébergement de pouvoir appeler et charger des pages externes, ouvrir des connexions ftp et autre, si jamais un hacker trouve une faille dans tes scripts, il peut alors faire beaucoup de mal (notamment s’en servir pour aller attaquer d’autres sites) et si cela t’arrives tu risques fort de te faire dégager par 1and1 avec des méthodes plutôt expéditives.
    Je préfère te prévenir pour que tu saches ce que tu fais en activant allow_url_fopen.

  4. Greg says:

    Merci, ca va mieux comme ca ! Mon script me renvoie encore des erreurs mais plus celle concernant une fonction inconnue / illegale.

    Par hasard, aurais-tu aussi un exemple simple de parser xml qui marche sur 1&1 ?

  5. tof says:

    Perso je les fais moi-même les parseurs, car avec les fonctions de base c’est tellement simple (d’où le nom).

    http://www.php.net/manual/fr/ref.simplexml.php

    Pas besoin d’utiliser des fonctions complexe pour faire juste du parsing: la fonction simplexml_load_file ou simplexml_load_string, puis une petite boucle pour récupérer les données, les traiter, mettre dans un array ou juste les afficher…

    Exemple:

    $urlfichier = "http://feeds2.feedburner.com/programme-television?format=xml";
    $xmlorigin = @simplexml_load_file($urlfichier);
    $nomchannel = $xmlorigin->channel->title;

    echo $nomchannel.":\n";

    foreach ($xmlorigin->channel->item as $item) {
    echo $item->title."\n";
    }

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *