PHP: Behind the Parser

Class ‘SimpleXMLElement’ not found

I am trying to use digital ocean spaces in my php7 laravel project. The code is pretty simple to just load a file and copy it to the directory. Everything works on my local machine but fails on my digital ocean server with this error

Even on digital ocean server, if I use tinker to run the same storage commands, it works fine. What can be the issue? My get_loaded_extensions() returns get_loaded_extensions()

[ "Core", "date", "libxml", "openssl", "pcre", "zlib", "filter", "hash", "pcntl", "Reflection", "SPL", "session", "standard", "mysqlnd", "PDO", "xml", "apcu", "calendar", "ctype", "curl", "dom", "mbstring", "fileinfo", "ftp", "gd", "gettext", "iconv", "json", "exif", "mysqli", "pdo_mysql", "Phar", "posix", "readline", "shmop", "SimpleXML", "sockets", "sysvmsg", "sysvsem", "sysvshm", "tokenizer", "wddx", "xmlreader", "xmlrpc", "xmlwriter", "xsl", "zip", "Zend OPcache", ] 

so it looks like xml and simplexml are installed. As suggested by the link, php-xml and php-simplexml should be installed. Do I need to install something separately? Also, my file upload code looks like this

public function uploadNew($file, $title, User $user) < if (!File::directoryExists($user->username)) < Storage::makeDirectory($user->username); > $completeFileName = $user->username.'/'.$title.time(); Storage::put($completeFileName, file_get_contents($file), 'public'); $this->url = File::baseUrl().$completeFileName; $this->title = $title; $this->user_id = $user->id; $this->save(); return $this; > public static function baseUrl() < return 'https://'.env('DO_SPACES_BUCKET').'.nyc3.digitaloceanspaces.com/'; >public static function directoryExists($directory)
(1/1) FatalThrowableError Class 'SimpleXMLElement' not found in PayloadParserTrait.php (line 39) at RestXmlParser->parseXml(object(Stream)) in RestXmlParser.php (line 33) at RestXmlParser->payload(object(Response), object(StructureShape), array()) in AbstractRestParser.php (line 62) at AbstractRestParser->__invoke(object(Command), object(Response)) in RetryableMalformedResponseParser.php (line 37) at RetryableMalformedResponseParser->__invoke(object(Command), object(Response)) in AmbiguousSuccessParser.php (line 58) at AmbiguousSuccessParser->__invoke(object(Command), object(Response)) in GetBucketLocationParser.php (line 30) at GetBucketLocationParser->__invoke(object(Command), object(Response)) in WrappedHttpHandler.php (line 126) at WrappedHttpHandler->parseResponse(object(Command), object(Request), object(Response), array()) in WrappedHttpHandler.php (line 93) at WrappedHttpHandler->Aws\(object(Response)) in Promise.php (line 203) 

Источник

Читайте также:  outline-style

Справочник по PHP : Функции работы с данными : XML : SimpleXML

SimpleXML предоставляет очень простой в восприятии, интуитивно-понятный доступ к XML-документам, позволяющий совершать разнообразные операции с элементами XML-документа и их атрибутами.

Требования

SimpleXML присутствует в PHP начиная с версии 5.

Установка

SimpleXML установлен в PHP по умолчанию. Для того, чтобы отключить это расширение, перекомпилируйте PHP с ключом —disable-simplexml.

Примеры

Практически все примеры используют XML-документ. Вместо того, чтобы каждый раз повторять содержание XML-документа в каждом примере, мы поместим XML-документ в файл, который будет читать при помощи функции simplexml_load_file().

Ms. CoderOnlivia ActoraMr. CoderEl ActÓr So, this language. It's like, a programming language. Or is it a scripting language? All is revealed in this thrilling horror spoof of a documentary. 
75

Простоту работы с SimpleXML можно продемонстрировать извлечением текста из заданного элемента XML-документа.

Пример 2. Получение текста в

movie[0]->plot; // "So this language. It's like. " ?>

Пример 3. Работа с группой элементов в SimpleXML

Можно применять циклы для получения дочерних элементов заданного элемента (если дочерние элементы существуют).

 мы отображаем элемент . */ foreach ($xml->movie as $movie) < echo $movie->plot, '
'; > ?>

Пример 4. Использование атрибутов

Выше было показано как работать с элементами XML-документа и их значениями. SimpleXML также имеет доступ к атрибутам элементов. Атрибуты указанного элемента доступны как ассоциативный массив данного элемента.

 для первого кино.*/ foreach ($xml->movie[0]->rating as $rating) < switch((string) $rating['type']) < // Возвращает атрибуты как элементы массива case 'thumbs': echo $rating, ' thumbs up'; break; case 'stars': echo $rating, ' stars'; break; >> ?>

Пример 5. Сравнение элементов и их атрибутов с текстовыми значениями

Для того, чтобы сравнивать элемент или атрибут со строковыми значениями, или передавать содержание элемента или атрибута в функцию, которая использует строковое значение передаваемого параметра, вы должны использовать элементы и атрибуты как строки с признаком (string). В противном случае PHP воспримет передаваемое значение как объект.

movie->title == 'PHP: Behind the Parser') < print 'Мой любимый фильм.'; >htmlentities((string) $xml->movie->title); ?>

Пример 6. Использование Xpath

В SimpleXML включена поддержка запросов Xpath. Поиск всех элементов :

xpath('//character') as $character) < echo $character->name, ' съиграл ', $character->actor, '
'; > ?>

'//' служит групповым символом. Чтобы задать абсолютный путь, требуется убрать один слеш.

Пример 7. Задание новых значений

Данные в SimpleXML не могут быть постоянными. Объект учитывает изменения всех его элементов.

movie[0]->characters->character[0]->name = 'Miss Coder'; echo $xml->asXML(); ?>

Результатом вышеуказанного примера будет новый XML-документ, идеентичный оригиналу за исключением того, что в новом XML-документе будет вместо Ms. Coder будет Miss Coder.

Пример 8. Взаимодействие с DOM

PHP имеет механизм конвертации XML-документов из формата SimpleXML в DOM и обратно. Следующий пример показывает как конвертировать DOM-элемент в SimpleXML-элемент:

loadXML(''); if (!$dom) < echo 'Ошибка преобразования документа'; exit; >$s = simplexml_import_dom($dom); echo $s->book[0]->title; ?>

Источник

PHP 7 simpleXML

Я тестирую PHP7 и испытываю странную проблему после недавнего обновления. SimpleXML должен быть включен по умолчанию, а моя страница phpinfo показывает, что он доступен:

введите описание изображения здесь

Однако функции недоступны:

simplexml_load_file')) < echo "simpleXML functions are available.
\n"; > else < echo "simpleXML functions are not available.
\n"; > // result-- NOT available

И модуль не указан как загруженный:

~ $ php -m [PHP Modules] calendar Core ctype curl . Reflection session shmop sockets SPL standard sysvmsg sysvsem sysvshm tokenizer Zend OPcache zlib 

Кто-нибудь знает, есть ли обходной путь для этого?

~ $ php -v PHP 7.0.3-8+deb.sury.org~trusty+2 (cli) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies 

У меня была такая же проблема, и я использую Ubuntu 15.10.

В моем случае, чтобы решить эту проблему, я установил пакет php7.0-xml с помощью диспетчера пакетов Synaptic, который включает SimpleXml. Итак, после перезагрузки моего сервера Apache моя проблема была решена. Этот пакет появился в версии Debian, и вы можете найти его здесь: https://packages.debian.org/sid/php7.0-xml .

Для всех тех, кто использует Ubuntu с ppa:ondrej/php PPA, это устранит проблему:

apt install php7.0-mbstring php7.0-zip php7.0-xml

Спасибо @Alexandre Barbosa за это!

EDIT 20160423:

Один-лайнер для устранения этой проблемы:

sudo add-apt-repository -y ppa:ondrej/php && sudo apt update && sudo apt install -y php7.0-mbstring php7.0-zip php7.0-xml 

(это добавит ppa, упомянутое выше, и также обязательно будет иметь последнюю версию php. Мы используем PHPppa Ondřej в течение почти двух лет, и это работает как шарм)

PHP 7.0.13-1 + deb.sury.org ~ trusty + 1 (cli) (NTS)

sudo apt-get install php-xml 

Я использую Bash для Windows (Ubuntu 16.04), и я только что установил с php7.0-xml, и теперь все работает для требований PHP Symfony 3.2.7.

sudo apt-get install php7.0-xml 

Для Alpine (в докере) вы можете использовать apk add php7-simplexml .

узнать, какой пакет предоставляет php-xml:

затем из списка вывода выберите соответствующий, установите

yum install php70u-xml-7.0.14-2.ius.centos7.x86_64 

Как правило, в системах Debian у вас есть другая конфигурация PHP для CLI, а для PHP – как Apache. Ваша страница phpinfo может очень хорошо показать, что simplexml включен с помощью веб-сервера, в то время как он не включен через CLI.

Источник

Оцените статью