macos — PHP разрывает строку, если она больше 2 ^ 16

В настоящее время я борюсь со странным поведением PHP (по крайней мере, мне кажется странным).

У меня есть этот код (он соответствует всем src а также href атрибуты внутри буферизованной HTML-страницы, которая может быть еще не оптимальной, но работает без нареканий):

$regex = '#(</?\w+\s+(?:\w+(?:\s*=\s*(?:"[^"]*"|\'[^\']*\'|[^"\'>\s]+))?\s*)*(?:href|src)\s*=\s*)("[^"]*"|\'[^\']*\'|[^"\'>\s]+)#Uis';
$buffer = preg_replace_callback($regex, function($match) {
$match[2] = preg_replace('/^["\'](.*)["\']$/', '\1', $match[2]);
// do further stuff
return $match[0];
}, $buffer);

Теперь это заняло у меня очень долго выяснять почему preg_replace_callback вернет NULL только немного ситуации, и оказалось, что она разрывается, когда строка больше 2 ^ 16, что мне кажется странным, потому что у меня никогда не было проблем с ограничениями в PHP раньше, и я даже буферизовал файлы размером в несколько сотен МБ.

То, что я попробовал сейчас, это:

$test = str_repeat('1', 65537); // 2**16+1
echo $test; // NULL (prints an empty string)

Я спросил Google, но я действительно нашел ничего такого. Кажется, что ни у кого нет этой проблемы, и каждый источник говорит, что вы даже можете хранить ГБ в строке.

Я использую OS X и встроенную среду AMPP.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …