2013-12-08 34 views
1

我需要插入較長的字符串的短字符串。我的問題是,字符串成本內存的substr ...是任何方式如何將長串串入兩串,而不會消耗新內存。php 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_replace添加額外的內存...因爲沒有被替換...插入文本

我不能使用任何文件操作,因爲是動態生成的文本(不是文件)

+0

請說明真正的問題,不是你的 「解決方案」。 – zerkms

+0

如果你在PHP中定義一個10MB的字符串,反正你做錯了什麼。 –

+0

10 MB字符串?該死,我的整個網站(僅計算php,js和css文件)甚至不超過10 MB。 – Vallentin

回答

0

你可以嘗試substr-replace,但我不確定這是內存使用情況。 http://php.net/manual/en/function.substr-replace.php

編輯

的Perl更有效地處理字符串操作。將文件輸出到服務器上的某個位置後,您需要執行腳本。

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

如果你是在PHP工作的另外一個很好的解決方案是使用preg_replace

+0

然後你的答案的目的是什麼?你是否認爲OP不能閱讀文檔? – zerkms

+0

@zerkms注意。我知道使用Perl會是應用字符串操作的一種非常快速的方式。它需要一個exec命令。我會做一個編輯,使我的回答值得。 –

+0

「更有效地處理字符串操作」---它沒有任何意義,對不起。 – zerkms

0

在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('', ''); 
} 

以下是一個示例函數,它將釋放內存。

- strtok() PHP manual

+0

爲什麼不給出一個大概愚蠢的問題的答案而不是等待什麼應該被解決的真正的解釋? – zerkms

+1

@zerkms我儘量不要假設任何問題都很愚蠢,因爲我不知道他爲什麼需要答案。 –

+0

事情是 - 99%的新手由於缺乏經驗而走錯了路線。因此,要問真正的任務是有道理的,而不是盲目地回答他們所問的問題。但事實上這取決於 - 你的策略是好的,你的目標不是提供真正的幫助,而是獲得簡單的聲譽點。 – zerkms

0

可以這樣做:

$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]; 
} 
+0

極其緩慢...如果能說MB,就意味着數百萬個週期 – user5332