PHP大于2 ^ 16时会破坏字符串

时间:2015-02-14 14:08:54

标签: php macos buffer-overflow

我目前正在努力解决PHP的奇怪行为(至少对我来说这似乎很奇怪)。

我已经获得了此代码(它匹配缓存的HTML页面中的所有srchref属性,这些属性可能不是最佳的,但可以完美运行):

$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限制问题,我甚至缓冲了数百MB的文件。

我现在尝试的是:

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

我问Google,但我确实找到了没有。似乎没有人遇到这个问题,而且每个消息来源都说你甚至可以将GB存储在一个字符串中。

我正在使用OS X和内置AMPP环境。

0 个答案:

没有答案