PHP: Виклик невизначеної функції: simplexml_load_string ()


85

Я реалізую функцію підрахунку facebook за допомогою файлу cron. У якому cron запускається кожні 10 хвилин і підраховує загальну кількість лайків сторінки.

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

Але я отримую невизначену помилку функції виклику.


6
У вас php-xmlвстановлений та ввімкнений модуль?
marian0

Відповіді:


154

Для PHP 7 та Ubuntu 14.04 процедура наступна. Оскільки PHP 7 відсутній в офіційному PPA Ubuntu, ви, швидше за все, встановили його через PPA Ondřej Surý (sudo add-apt-repository ppa: ondrej / php). Перейдіть до /etc/php/7.0/fpm і відредагуйте php.ini, розкоментуйте наступний рядок:

extension=php_xmlrpc.dll

Тоді просто встановіть php7.0-xml:

sudo apt-get install php7.0-xml

І перезапустіть PHP:

sudo service php7.0-fpm restart

І перезапустіть Apache:

sudo service apache2 restart

Якщо ви використовуєте пізнішу версію Ubuntu, де включений PHP 7, процедура, швидше за все, така ж (крім додавання будь-якого стороннього сховища).


14
Просто не потрібно коментувати extension = php_xmlrpc.dll на Ubuntu, оскільки це розширення для Windows, зробіть другий крок, і він буде працювати
wmfrancia

я слідував за тим самим: все ще отримую виклик невизначеної функції simplexml_load_string () у /var/www/html/magento1901/lib/Varien/Simplexml/Config.php на лінії 510
Сушивам

1
Я отримав невизнану помилку в службі. Я щойно перезапустив apache2, і це вирішило цю проблему. Thaks за допомогу знайти цей рядок у PHP.ini
кодований контейнер

так, це спрацювало, і я зміг пропустити перший крок, як заявив @wmfrancia.
Linnea Huxford

Я пробував те саме, але не працював для мене. З журналу помилок Uncaught Error: Виклик невизначеної функції simplexml_load_string () у /var/www/html/lib/Varien/Simplexml/Config.php
Killer

51

Якщо модуль XML не встановлено, встановіть його.

Поточна версія 5.6 на ubuntu 14.04:

sudo apt-get install php5.6-xml

І не забудьте запустити після цього команду sudo service apache2 restart

Зульхілмі Зайнуді


4
Ви можете просто зробити "sudo apt install php-xml", і він отримає правильну версію для вас.
Наомі

1
І не забудьте запустити sudo service apache2 restartкоманду після неї
Зулхілмі Зайнудін,

7

Я також стикався з цим питанням. Моя операційна система - Ubuntu 18.04, а версія PHP - PHP 7.2 .

Ось як я це вирішив:

Встановіть Simplexml на ваш сервер Ubuntu:

sudo apt-get install php7.2-simplexml

Перезапустіть сервер Apache

sudo systemctl restart apache2

Це все.

Сподіваюся, це допоможе


6

Я думаю, що це може бути щось на зразок цього повідомлення: Клас 'SimpleXMLElement' не знайдений на puphpet PHP 5.6 Тож, можливо, ви могли б встановити / активувати

php-xml or php-simplexml

Не забудьте активувати бібліотеки у файлі php.ini . (як верхній коментар )


Також спробуйте це посилання
Björn Pfoster

5

Переконайтеся, що у вас встановлено та ввімкнено модуль php-xml php.ini.

Ви також можете змінити формат відповіді на json, який простіше в роботі. У цьому випадку вам потрібно лише додати &format=jsonдо запиту url рядок.

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

А потім використовуйте json_decode()для отримання даних у вашому сценарії:

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

я змінив свою версію php терміналу, тоді вона працює нормально
anil

1

Щоб виправити цю помилку на Centos 7 :

  1. Встановити розширення PHP:

    sudo yum встановити php-xml

  2. Перезапустіть веб-сервер. У моєму випадку це php-fpm :

    послуги перезапуск php-fpm


0

Для Nginx (без apache) та PHP 7.2 встановлення php7.2-xml було недостатньо. Довелося встановити пакет php7.2-simplexml, щоб він працював

Отже, команди для debian / ubuntu, оновіть пакети та встановіть обидва пакети

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

І перезапустіть як Nginx, так і php

systemctl restart nginx php7.2-fpm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.