无内存消耗的php substr

无内存消耗的php substr,php,memory,substr,Php,Memory,Substr,我需要在长字符串中插入短字符串。我的问题是,字符串的substr消耗内存。。。不管怎样,在不消耗新记忆的情况下,把长串一分为二都是不可能的 $str = "xxx...yyy"; // 10 MB $insert_str = "insert here"; // now split long string and insert short string echo substr($str, 0, 5000000); // eats next 5 MB echo $insert_str

我需要在长字符串中插入短字符串。我的问题是,字符串的substr消耗内存。。。不管怎样,在不消耗新记忆的情况下,把长串一分为二都是不可能的

 $str = "xxx...yyy"; // 10 MB

 $insert_str = "insert here";

 // now split long string and insert short string

 echo substr($str, 0, 5000000); // eats next 5 MB
 echo $insert_str;
 echo substr($str, 5000000); // eats next 5 MB
我的问题是脚本以致命错误结束:内存不足 但是不要也不能为这个添加额外的内存

我不能用substr\u替换。。。因为没有什么可以替代。。。是插入的文本


我不能使用任何文件操作,因为文本是动态生成的(不在文件中)

您可以尝试
substr replace
,但我不确定它的内存使用情况。

编辑


Perl处理字符串操作的效率更高。将文件输出到服务器上的某个位置后,需要执行脚本

$perl = new Perl();
$perl->require("inserter.pl");

如果您使用PHP,另一个很好的解决方案是使用
preg\u replace

碰巧PHP站点上有人发布了类似场景的示例

$token_symbols = " \t\n";
$str = file_get_contents('10MB.txt'); // 9.75410079956 MB
tokenize($str, $token_symbols); // 9.75426483154 MB
unset($str);
strtok('', ''); // 0.0543975830078 MB


function tokenize($str, $token_symbols, $token_reset = true) {
    $word = strtok($str, $token_symbols);
    while (false !== $word) {
        // do something here...
        $word = strtok($token_symbols);
    }

    if($token_reset)
        strtok('', '');
}
下面是一个示例函数,它将在以后释放内存

--可以这样做:

$str = "xxx...yyy"; // 10 MB

$insert_str = "insert here";

// now split long string and insert short string

for($i=0;$i<5000000;$i++){
    echo $str[$i];
}
echo $insert_str;
$len = strlen($str);
for($i=5000000;$i<len;$i++){
    echo $str[$i];
}
$str=“xxx…yyy”//10 MB
$insert_str=“在此处插入”;
//现在拆分长字符串并插入短字符串

对于($i=0;$i),请解释真正的问题,而不是你的“解决方案”。如果你在PHP中定义了一个10 MB的字符串,那么你就做错了。10 MB字符串?该死,我的整个网站(只计算PHP、js和css文件)甚至没有10 MB的大小。那么你的答案的目的是什么?你认为OP不能阅读文档吗?@zerkms指出。我知道使用perl将是应用字符串操作的一种非常快速的方法。不过它需要一个exec命令。我将进行编辑,使我的答案有价值。“处理字符串操作的效率更高”---对不起,这毫无意义。为什么不给可能是愚蠢的问题一个答案,而不等待应该解决什么的真正解释呢?@zerkms我尽量不假设任何问题都是愚蠢的,因为我不知道他为什么需要答案。非常慢…如果能谈论MB意味着百万个周期