Когда я пытаюсь выполнить эту команду в моем SVG-файле, браузер сообщает, что данные не получены, и я получаю сообщение об ошибке в моем файле журнала Apache.
preg_match("/(<g(\s|\S)*?<\/g>)/i", $SVG, $Matches);
Мой SVG-файл Вот.
И фактическая ошибка, которую я получаю это
[ядро: уведомление] [pid 20852] AH00052: сигнал выхода дочернего pid 31338
Ошибка сегментации (11)
Что я здесь не так сделал и как это исправить?
Использовать PHP DOM функции разобрать файлы XML. Есть веская причина, почему вы не должны использовать RegEX для разбора XML 🙂
Так как вы ищете все <g ...></g>
теги, вы можете сделать это так:
$xdoc = new DOMDocument;
// load your .svg
$xdoc->Load('0057b8.svg');
// get all "g"-tags
$gTags = $xdoc->getElementsByTagName('g');
// since the return is a DOMNodeList, we loop through all (even if it's only 1)
foreach($gTags as $gTag) {
// and here we can e.g. get the attributes
echo $gTag->getAttribute('transform') . PHP_EOL;
echo $gTag->getAttribute('fill') . PHP_EOL;
echo $gTag->getAttribute('stroke') . PHP_EOL;
// or set a new attribute
$gTag->setAttribute('stroke-width', '5');
}
G-теги будут DOMElements, так что вы можете прочитать в ссылке, чтобы получить все возможные методы на них.
Других решений пока нет …