1 <?php 2 3 declare(strict_types=1); 4 5 namespace OpenSpout\Reader\Wrapper; 6 7 use OpenSpout\Reader\Exception\XMLProcessingException; 8 9 /** 10 * @internal 11 */ 12 trait XMLInternalErrorsHelper 13 { 14 /** @var bool Stores whether XML errors were initially stored internally - used to reset */ 15 private bool $initialUseInternalErrorsValue; 16 17 /** 18 * To avoid displaying lots of warning/error messages on screen, 19 * stores errors internally instead. 20 */ 21 private function useXMLInternalErrors(): void 22 { 23 libxml_clear_errors(); 24 $this->initialUseInternalErrorsValue = libxml_use_internal_errors(true); 25 } 26 27 /** 28 * Throws an XMLProcessingException if an error occured. 29 * It also always resets the "libxml_use_internal_errors" setting back to its initial value. 30 * 31 * @throws \OpenSpout\Reader\Exception\XMLProcessingException 32 */ 33 private function resetXMLInternalErrorsSettingAndThrowIfXMLErrorOccured(): void 34 { 35 if ($this->hasXMLErrorOccured()) { 36 $this->resetXMLInternalErrorsSetting(); 37 38 throw new XMLProcessingException($this->getLastXMLErrorMessage()); 39 } 40 41 $this->resetXMLInternalErrorsSetting(); 42 } 43 44 private function resetXMLInternalErrorsSetting(): void 45 { 46 libxml_use_internal_errors($this->initialUseInternalErrorsValue); 47 } 48 49 /** 50 * Returns whether the a XML error has occured since the last time errors were cleared. 51 * 52 * @return bool TRUE if an error occured, FALSE otherwise 53 */ 54 private function hasXMLErrorOccured(): bool 55 { 56 return false !== libxml_get_last_error(); 57 } 58 59 /** 60 * Returns the error message for the last XML error that occured. 61 * 62 * @see libxml_get_last_error 63 * 64 * @return string Last XML error message or null if no error 65 */ 66 private function getLastXMLErrorMessage(): string 67 { 68 $errorMessage = ''; 69 $error = libxml_get_last_error(); 70 71 if (false !== $error) { 72 $errorMessage = trim($error->message); 73 } 74 75 return $errorMessage; 76 } 77 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body