PHP: chiamata a una funzione non definita: simplexml_load_string ()


86

Sto implementando la funzione di conteggio di Facebook utilizzando il file cron. In cui cron viene eseguito ogni 10 minuti e conta i Mi piace totali di una pagina.

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("abc@gmail.com","hi".$fb_like_count,$message);
}

Ma sto ottenendo un errore di funzione di chiamata non definito.


6
Hai il php-xmlmodulo installato e abilitato?
marian0

Risposte:


157

Per PHP 7 e Ubuntu 14.04 la procedura è la seguente. Poiché PHP 7 non è nei PPA ufficiali di Ubuntu, probabilmente lo hai installato tramite il PPA di Ondřej Surý (sudo add-apt-repository ppa: ondrej / php). Vai a /etc/php/7.0/fpm e modifica php.ini, rimuovi il commento alla riga seguente:

extension=php_xmlrpc.dll

Quindi installa semplicemente php7.0-xml:

sudo apt-get install php7.0-xml

E riavvia PHP:

sudo service php7.0-fpm restart

E riavvia Apache:

sudo service apache2 restart

Se utilizzi una versione successiva di Ubuntu in cui è incluso PHP 7, anche la procedura è molto probabilmente la stessa (eccetto l'aggiunta di qualsiasi repository di terze parti).


14
Solo per caso non è necessario decommentare extension = php_xmlrpc.dll su Ubuntu poiché è un'estensione di Windows, basta fare il secondo passaggio e funzionerà
wmfrancia

ho seguito lo stesso: ricevo ancora Call to undefined function simplexml_load_string () in /var/www/html/magento1901/lib/Varien/Simplexml/Config.php on line 510
Sushivam

1
Ho ricevuto un errore di servizio non riconosciuto. Ho appena riavviato apache2 e questo ha risolto il problema. Grazie per l'aiuto a trovare questa riga in PHP.ini
Coded Container

sì, ha funzionato e sono stato in grado di saltare il primo passaggio come ha dichiarato @wmfrancia.
Linnea Huxford

Ho provato lo stesso ma non ha funzionato per me. Dal registro errori Errore non rilevato: chiamata alla funzione non definita simplexml_load_string () in /var/www/html/lib/Varien/Simplexml/Config.php
Killer

52

Se il modulo XML non è installato, installalo.

Versione corrente 5.6 su ubuntu 14.04:

sudo apt-get install php5.6-xml

E non dimenticare di eseguire il comando di riavvio del servizio sudo apache2 dopo di esso

Zulhilmi Zainudi


4
Puoi semplicemente fare "sudo apt install php-xml" e otterrà la versione corretta per te.
naomi

1
E non dimenticare di eseguire il sudo service apache2 restartcomando dopo di esso
Zulhilmi Zainudin

8

Ho anche affrontato questo problema. Il mio sistema operativo è Ubuntu 18.04 e la mia versione PHP è PHP 7.2 .

Ecco come l'ho risolto:

Installa Simplexml sul tuo server Ubuntu:

sudo apt-get install php7.2-simplexml

Riavvia Apache Server

sudo systemctl restart apache2

È tutto.

spero che possa aiutare


7

Assicurati di avere il modulo php-xml installato e abilitato in php.ini.

Puoi anche modificare il formato della risposta in json, che è più facile da gestire. In tal caso devi solo aggiungere &format=jsonalla stringa di query dell'URL.

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

E poi usa json_decode()per recuperare i dati nel tuo script:

$result = json_decode($content, true);
$fb_like_count = $result['like_count'];

Ho modificato la mia versione di PHP terminale, allora si sta lavorando bene
Anil


2

Per correggere questo errore su Centos 7 :

  1. Installa l'estensione PHP:

    sudo yum installa php-xml

  2. Riavvia il tuo server web. Nel mio caso è php-fpm :

    services php-fpm riavvio


0

Per Nginx (senza apache) e PHP 7.2, l'installazione di php7.2-xml non era sufficiente. Ho dovuto installare il pacchetto php7.2-simplexml per farlo funzionare

Quindi i comandi per debian / ubuntu, aggiorna i pacchetti e installa entrambi i pacchetti

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

E riavvia sia Nginx che php

systemctl restart nginx php7.2-fpm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.