isPhpFpm()) { return $this->heuristicScan($xmlContent); } $document = new DOMDocument(); $loadEntities = libxml_disable_entity_loader(true); $useInternalXmlErrors = libxml_use_internal_errors(true); /** * Load XML with network access disabled (LIBXML_NONET) * error disabled with @ for PHP-FPM scenario */ set_error_handler( function ($errno, $errstr) { if (substr_count($errstr, 'DOMDocument::loadXML()') > 0) { return true; } return false; }, E_WARNING ); $result = (bool)$document->loadXML($xmlContent, LIBXML_NONET); restore_error_handler(); // Entity load to previous setting libxml_disable_entity_loader($loadEntities); libxml_use_internal_errors($useInternalXmlErrors); if (!$result) { return false; } foreach ($document->childNodes as $child) { if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { if ($child->entities->length > 0) { return false; } } } return true; } }