PHP: Appel à une fonction non définie: simplexml_load_string ()

85

J'implémente la fonction de comptage de Facebook en utilisant le fichier cron. Dans lequel cron s'exécute toutes les 10 minutes et compte le total des goûts d'une page.

for($i=0;$i<3;$i++){
    $source_url =$cars[$i];
    $rest_url = "http://api.facebook.com/restserver.php?method=links.getStats&urls=".urlencode($source_url);
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL,$rest_url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $content = curl_exec($curl);
    curl_close($curl);
    $message=stripslashes($content);
    $xml_record = simplexml_load_string($message);
    $fb_like_count = $xml_record->link_stat->like_count;
    echo "".$fb_like_count;
    mail("[email protected]","hi".$fb_like_count,$message);
}

Mais j'obtiens une erreur de fonction d'appel non définie.

anil
la source
6
Le php-xmlmodule est-il installé et activé?
marian0

Réponses:

154

Pour PHP 7 et Ubuntu 14.04, la procédure est la suivante. Puisque PHP 7 ne fait pas partie des PPA officiels d'Ubuntu, vous l'avez probablement installé via le PPA d'Ondřej Surý (sudo add-apt-repository ppa: ondrej / php). Accédez à /etc/php/7.0/fpm et éditez php.ini, décommentez la ligne suivante:

extension=php_xmlrpc.dll

Ensuite, installez simplement php7.0-xml:

sudo apt-get install php7.0-xml

Et redémarrez PHP:

sudo service php7.0-fpm restart

Et redémarrez Apache:

sudo service apache2 restart

Si vous utilisez une version ultérieure d'Ubuntu où PHP 7 est inclus, la procédure est probablement la même (sauf l'ajout d'un référentiel tiers).

Andreas Bergström
la source
14
Juste FYI vous n'avez pas besoin de l' extension uncomment = php_xmlrpc.dll sur Ubuntu qui est une extension de fenêtres juste faire la deuxième étape et cela fonctionnera
wmfrancia
J'ai suivi la même chose: je reçois toujours un appel à la fonction non définie simplexml_load_string () dans /var/www/html/magento1901/lib/Varien/Simplexml/Config.php en ligne 510
Sushivam
1
J'avais reçu une erreur de service non reconnue. Je viens de redémarrer apache2 et cela a résolu ce problème. Merci pour l'aide à trouver cette ligne dans PHP.ini
Conteneur codé
oui, cela a fonctionné, et j'ai pu sauter la première étape comme l'a déclaré @wmfrancia.
Linnea Huxford
J'ai essayé la même chose mais je n'ai pas fonctionné pour moi. À partir du journal d'erreurs Erreur non interceptée: Appel à la fonction non définie simplexml_load_string () dans /var/www/html/lib/Varien/Simplexml/Config.php
Killer
51

Si le module XML n'est pas installé, installez-le.

Version actuelle 5.6 sur Ubuntu 14.04:

sudo apt-get install php5.6-xml

Et n'oubliez pas d'exécuter la commande de redémarrage sudo service apache2 après cela

Zulhilmi Zainudi

Fabian Blechschmidt
la source
4
Vous pouvez simplement faire "sudo apt install php-xml" et il obtiendra la bonne version pour vous.
naomi
1
Et n'oubliez pas de lancer la sudo service apache2 restartcommande après
Zulhilmi Zainudin
7

J'ai également fait face à ce problème. Mon système d'exploitation est Ubuntu 18.04 et ma version PHP est PHP 7.2 .

Voici comment je l'ai résolu:

Installez Simplexml sur votre serveur Ubuntu:

sudo apt-get install php7.2-simplexml

Redémarrez le serveur Apache

sudo systemctl restart apache2

C'est tout.

J'espère que ça aide

Promesse Preston
la source
6

Je pense que cela peut être quelque chose comme dans cet article: La classe 'SimpleXMLElement' ne se trouve pas sur puphpet PHP 5.6 Alors peut-être que vous pourriez installer / activer

php-xml or php-simplexml

N'oubliez pas d'activer les bibliothèques dans le fichier php.ini . (comme le commentaire du haut )

Björn Pfoster
la source
Essayez également ce lien
Björn Pfoster
5

Assurez-vous que le module php-xml est installé et activé dans php.ini.

Vous pouvez également changer le format de réponse en json, ce qui est plus facile à gérer. Dans ce cas, vous devez uniquement ajouter &format=jsonà la chaîne de requête URL.

$rest_url = "http://api.facebook.com/restserver.php?method=links.getStats&format=json&urls=".urlencode($source_url);

Et puis utilisez json_decode()pour récupérer des données dans votre script:

$result = json_decode($content, true);
$fb_like_count = $result['like_count'];
marian0
la source
J'ai modifié ma version de terminal php alors cela fonctionne bien
anil
1

Pour corriger cette erreur sur Centos 7 :

  1. Installez l'extension PHP:

    sudo yum installer php-xml

  2. Redémarrez votre serveur Web. Dans mon cas, c'est php-fpm :

    redémarrage des services php-fpm

yesnik
la source
0

Pour Nginx (sans apache) et PHP 7.2, installer php7.2-xml ne suffisait pas. J'ai dû installer le package php7.2-simplexml pour le faire fonctionner

Donc, les commandes pour debian / ubuntu, mettent à jour les packages et installent les deux packages

apt update
apt install php7.2-xml php7.2-simplexml

Et redémarrez Nginx et php

systemctl restart nginx php7.2-fpm
Ajay Singh
la source