PHP: Aufruf einer undefinierten Funktion: simplexml_load_string ()

85

Ich implementiere die Facebook-Zählfunktion mit einer Cron-Datei. In welchem ​​Cron alle 10 Minuten ausgeführt wird und die Gesamtzahl der Likes einer Seite gezählt wird.

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);
}

Aber ich bekomme einen undefinierten Aufruffunktionsfehler.

anil
quelle
6
Haben Sie ein php-xmlModul installiert und aktiviert?
marian0

Antworten:

154

Für PHP 7 und Ubuntu 14.04 wird wie folgt vorgegangen. Da PHP 7 nicht in den offiziellen Ubuntu-PPAs enthalten ist, haben Sie es wahrscheinlich über Ondřej Surýs PPA (sudo add-apt-repository ppa: ondrej / php) installiert. Gehen Sie zu /etc/php/7.0/fpm und bearbeiten Sie die php.ini. Kommentieren Sie die folgende Zeile aus:

extension=php_xmlrpc.dll

Dann installieren Sie einfach php7.0-xml:

sudo apt-get install php7.0-xml

Und starten Sie PHP neu:

sudo service php7.0-fpm restart

Und starten Sie Apache neu:

sudo service apache2 restart

Wenn Sie eine spätere Ubuntu-Version verwenden, in der PHP 7 enthalten ist, ist die Vorgehensweise höchstwahrscheinlich auch dieselbe (außer das Hinzufügen eines Repositorys eines Drittanbieters).

Andreas Bergström
quelle
14
Nur zu Ihrer Information, Sie müssen die Erweiterung = php_xmlrpc.dll unter Ubuntu nicht auskommentieren, da dies eine Windows-Erweiterung ist. Führen Sie einfach den zweiten Schritt aus und es wird funktionieren
wmfrancia
Ich folgte dem gleichen: Ich erhalte immer noch den Aufruf der undefinierten Funktion simplexml_load_string () in /var/www/html/magento1901/lib/Varien/Simplexml/Config.php in Zeile 510
Sushivam
1
Ich hatte einen nicht erkannten Servicefehler erhalten. Ich habe gerade apache2 neu gestartet und dies hat dieses Problem behoben. Vielen Dank für die Hilfe finden diese Zeile in PHP.ini
Coded Container
Ja, das hat funktioniert und ich konnte den ersten Schritt überspringen, wie @wmfrancia sagte.
Linnea Huxford
Ich habe das gleiche versucht, aber bei mir nicht funktioniert. Aus dem Fehlerprotokoll Nicht erfasster Fehler: Aufruf der undefinierten Funktion simplexml_load_string () in /var/www/html/lib/Varien/Simplexml/Config.php
Killer
51

Wenn das XML-Modul nicht installiert ist, installieren Sie es.

Aktuelle Version 5.6 unter Ubuntu 14.04:

sudo apt-get install php5.6-xml

Und vergessen Sie nicht, den Befehl sudo service apache2 restart danach auszuführen

Zulhilmi Zainudi

Fabian Blechschmidt
quelle
4
Sie können einfach "sudo apt install php-xml" ausführen und es wird die richtige Version für Sie erhalten.
Naomi
1
Und vergessen Sie nicht, das sudo service apache2 restartKommando danach
auszuführen
7

Ich habe mich auch diesem Problem gestellt. Mein Betriebssystem ist Ubuntu 18.04 und meine PHP-Version ist PHP 7.2 .

So habe ich es gelöst:

Installieren Sie Simplexml auf Ihrem Ubuntu Server:

sudo apt-get install php7.2-simplexml

Starten Sie Apache Server neu

sudo systemctl restart apache2

Das ist alles.

ich hoffe das hilft

Versprich Preston
quelle
6

Ich denke, es kann so etwas wie in diesem Beitrag sein: Klasse 'SimpleXMLElement' nicht auf puphpet PHP 5.6 gefunden. Vielleicht könnten Sie es installieren / aktivieren

php-xml or php-simplexml

Vergessen Sie nicht, die Bibliotheken in der Datei php.ini zu aktivieren . (wie der oberste Kommentar )

Björn Pfoster
quelle
Versuchen Sie auch diesen Link
Björn Pfoster
4

Stellen Sie sicher, dass Sie das PHP-XML-Modul installiert und aktiviert haben php.ini.

Sie können das Antwortformat auch in json ändern, was einfacher zu handhaben ist. In diesem Fall müssen Sie nur die &format=jsonURL-Abfragezeichenfolge hinzufügen .

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

Und dann verwenden Sie json_decode(), um Daten in Ihrem Skript abzurufen:

$result = json_decode($content, true);
$fb_like_count = $result['like_count'];
marian0
quelle
Ich habe meine Terminal-PHP-Version geändert, dann funktioniert es
einwandfrei
1

So beheben Sie diesen Fehler auf Centos 7 :

  1. Installieren Sie die PHP-Erweiterung:

    sudo yum installiere php-xml

  2. Starten Sie Ihren Webserver neu. In meinem Fall ist es php-fpm :

    Dienste php-fpm Neustart

yesnik
quelle
0

Für Nginx (ohne Apache) und PHP 7.2 reichte die Installation von php7.2-xml nicht aus. Musste das Paket php7.2-simplexml installieren, damit es funktioniert

Also die Befehle für debian / ubuntu, Pakete aktualisieren und beide Pakete installieren

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

Und starten Sie sowohl Nginx als auch PHP neu

systemctl restart nginx php7.2-fpm
Ajay Singh
quelle