PHP: Llamada a función indefinida: simplexml_load_string ()

85

Estoy implementando la función de conteo de Facebook usando el archivo cron. En el que cron se ejecuta cada 10 minutos y cuenta el total de Me gusta de una página.

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

Pero estoy obteniendo un error de función de llamada indefinido.

añil
fuente
6
¿Tiene un php-xmlmódulo instalado y habilitado?
marian0

Respuestas:

154

Para PHP 7 y Ubuntu 14.04, el procedimiento es el siguiente. Dado que PHP 7 no está en los PPA oficiales de Ubuntu, probablemente lo instaló a través del PPA de Ondřej Surý (sudo add-apt-repository ppa: ondrej / php). Vaya a /etc/php/7.0/fpm y edite php.ini, elimine el comentario de la siguiente línea:

extension=php_xmlrpc.dll

Luego, simplemente instale php7.0-xml:

sudo apt-get install php7.0-xml

Y reinicia PHP:

sudo service php7.0-fpm restart

Y reinicia Apache:

sudo service apache2 restart

Si tiene una versión posterior de Ubuntu en la que se incluye PHP 7, lo más probable es que el procedimiento también sea el mismo (excepto para agregar un repositorio de terceros).

Andreas Bergström
fuente
14
Solo para su información, no necesita descomentar extension = php_xmlrpc.dll en Ubuntu, ya que es una extensión de Windows, solo haga el segundo paso y funcionará
wmfrancia
Seguí lo mismo: aún recibo una llamada a la función no definida simplexml_load_string () en /var/www/html/magento1901/lib/Varien/Simplexml/Config.php en la línea 510
Sushivam
1
Recibí un error de servicio no reconocido. Acabo de reiniciar apache2 y esto solucionó este problema. Gracias por la ayuda para encontrar esta línea en PHP.ini
Contenedor codificado
sí, esto funcionó, y pude omitir el primer paso como dijo @wmfrancia.
Linnea Huxford
Intenté lo mismo pero no funcionó para mí. Del registro de errores Error no detectado: llamada a la función indefinida simplexml_load_string () en /var/www/html/lib/Varien/Simplexml/Config.php
Killer
51

Si el módulo XML no está instalado, instálelo.

Versión actual 5.6 en ubuntu 14.04:

sudo apt-get install php5.6-xml

Y no olvide ejecutar el comando sudo service apache2 restart después de él

Zulhilmi Zainudi

Fabian Blechschmidt
fuente
4
Puede simplemente hacer "sudo apt install php-xml" y obtendrá la versión correcta para usted.
naomi
1
Y no olvide ejecutar el sudo service apache2 restartcomando después de él
Zulhilmi Zainudin
8

También enfrenté este problema. Mi sistema operativo es Ubuntu 18.04 y mi versión de PHP es PHP 7.2 .

Así es como lo resolví:

Instale Simplexml en su servidor Ubuntu:

sudo apt-get install php7.2-simplexml

Reinicie el servidor Apache

sudo systemctl restart apache2

Eso es todo.

espero que esto ayude

Promesa Preston
fuente
5

Asegúrese de tener el módulo php-xml instalado y habilitado en php.ini.

También puede cambiar el formato de respuesta a json, que es más fácil de manejar. En ese caso, solo tiene que agregar &format=jsona la cadena de consulta de URL.

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

Y luego use json_decode()para recuperar datos en su secuencia de comandos:

$result = json_decode($content, true);
$fb_like_count = $result['like_count'];
marian0
fuente
He modificado la versión de php de mi terminal, entonces está funcionando bien
anil
1

Para corregir este error en Centos 7 :

  1. Instale la extensión PHP:

    sudo yum instalar php-xml

  2. Reinicie su servidor web. En mi caso es php-fpm :

    servicios php-fpm reiniciar

yesnik
fuente
0

Para Nginx (sin apache) y PHP 7.2, instalar php7.2-xml no fue suficiente. Tuve que instalar el paquete php7.2-simplexml para que funcionara

Entonces, los comandos para debian / ubuntu, actualizan paquetes e instalan ambos paquetes

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

Y reinicia tanto Nginx como php

systemctl restart nginx php7.2-fpm
Ajay Singh
fuente