PHP: wywołanie niezdefiniowanej funkcji: simplexml_load_string ()

85

Wdrażam funkcję liczenia facebooków za pomocą pliku cron. W którym cron działa co 10 minut i zlicza wszystkie polubienia strony.

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

Ale otrzymuję niezdefiniowany błąd funkcji połączenia.

indygowiec
źródło
6
Czy masz php-xmlzainstalowany i włączony moduł?
marian0

Odpowiedzi:

154

W przypadku PHP 7 i Ubuntu 14.04 procedura jest następująca. Ponieważ PHP 7 nie znajduje się w oficjalnych PPA Ubuntu, prawdopodobnie zainstalowałeś go za pośrednictwem PPA Ondřeja Surý (sudo add-apt-repository ppa: ondrej / php). Przejdź do /etc/php/7.0/fpm i edytuj php.ini, odkomentuj do następującej linii:

extension=php_xmlrpc.dll

Następnie po prostu zainstaluj php7.0-xml:

sudo apt-get install php7.0-xml

I zrestartuj PHP:

sudo service php7.0-fpm restart

I zrestartuj Apache:

sudo service apache2 restart

Jeśli korzystasz z późniejszej wersji Ubuntu, która zawiera PHP 7, procedura jest najprawdopodobniej taka sama (z wyjątkiem dodawania repozytorium stron trzecich).

Andreas Bergström
źródło
14
Po prostu nie musisz odkomentować rozszerzenia = php_xmlrpc.dll na Ubuntu, ponieważ jest to rozszerzenie systemu Windows, zrób drugi krok i zadziała
wmfrancia
Postępowałem zgodnie z tym samym: nadal otrzymuję Call to undefined function simplexml_load_string () w /var/www/html/magento1901/lib/Varien/Simplexml/Config.php w linii 510
Sushivam
1
Otrzymałem nierozpoznany błąd usługi. Właśnie zrestartowałem Apache2 i to rozwiązało ten problem. Dziękujemy za pomoc w znalezieniu tej linii w PHP.ini
Coded Container
tak, to zadziałało i mogłem pominąć pierwszy krok, jak stwierdził @wmfrancia.
Linnea Huxford
Próbowałem tego samego, ale nie zadziałało. Z dziennika błędów Uncaught Error: wywołanie niezdefiniowanej funkcji simplexml_load_string () w /var/www/html/lib/Varien/Simplexml/Config.php
Killer
51

Jeśli moduł XML nie jest zainstalowany, zainstaluj go.

Aktualna wersja 5.6 na Ubuntu 14.04:

sudo apt-get install php5.6-xml

I nie zapomnij uruchomić po nim polecenia sudo service apache2 restart

Zulhilmi Zainudi

Fabian Blechschmidt
źródło
4
Możesz po prostu wykonać polecenie „sudo apt install php-xml”, a program uzyska odpowiednią wersję.
naomi
1
I nie zapomnij uruchomić sudo service apache2 restartpolecenia po nim
Zulhilmi Zainudin
8

Ja też miałem do czynienia z tym problemem. Mój system operacyjny to Ubuntu 18.04, a wersja PHP to PHP 7.2 .

Oto jak to rozwiązałem:

Zainstaluj Simplexml na swoim serwerze Ubuntu:

sudo apt-get install php7.2-simplexml

Uruchom ponownie serwer Apache

sudo systemctl restart apache2

To wszystko.

mam nadzieję, że to pomoże

Obietnica Preston
źródło
5

Upewnij się, że masz zainstalowany i włączony moduł php-xml w php.ini.

Możesz także zmienić format odpowiedzi na json, który jest łatwiejszy w obsłudze. W takim przypadku wystarczy dodać &format=jsondo adresu URL zapytanie.

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

Następnie użyj, json_decode()aby pobrać dane w swoim skrypcie:

$result = json_decode($content, true);
$fb_like_count = $result['like_count'];
marian0
źródło
Zmodyfikowałem moją wersję terminala php, więc działa dobrze
anil
1

Aby naprawić ten błąd w Centos 7 :

  1. Zainstaluj rozszerzenie PHP:

    sudo yum zainstaluj php-xml

  2. Uruchom ponownie serwer WWW. W moim przypadku jest to php-fpm :

    usługi php-fpm restart

yesnik
źródło
0

W przypadku Nginx (bez apache) i PHP 7.2 instalacja php7.2-xml nie wystarczyła. Musiałem zainstalować pakiet php7.2-simplexml, aby działał

Więc polecenia dla debian / ubuntu, zaktualizuj pakiety i zainstaluj oba pakiety

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

I zrestartuj zarówno Nginx, jak i php

systemctl restart nginx php7.2-fpm
Ajay Singh
źródło