Why Are These Functions Causing MASSIVE Memory Problems? Please Help!


Posted on 16th Feb 2014 07:03 pm by admin

Hi,

I have a script with some options.

Did you know?Explore Trending and Topic pages for more stories like this.
I use regex to replace patterns in strings, but I seem to be using them incorrectly, because they very quickly break my max_memory_limit (by several orders of magnitude)

This is strange, because I'm dealing with maybe 10 simultaneous strings of 500 words max.

I'm clearly causing some kind of overly recursive syntax, but I can't see how...

Any help you could give me to programme this better (or tell me where I'm going wrong) would be most appreciated

Code: [Select]

$string = "this would be about 500 words long";
$parts = $string; // $parts would normally be a substring of $string;

wp_wordmash($parts);
wp_synonymize($string);
wp_keyword2url($string);

//html stuff follows here...


function wp_wordmash($parts) {

$wordlist = file_get_contents('dictionary.txt', true);
$dictionary = explode(",", $wordlist);
$htmldictionary = array();
foreach($dictionary as $dicword) {
$htmldictionary[] = wp_htmlcode($dicword);
$htmldictionary_u[] = wp_htmlcode(strtoupper($dicword));
$htmldictionary_u1[] = wp_htmlcode(ucfirst($dicword));
$htmldictionary_ucwords[] = wp_htmlcode(ucwords($dicword));
}
for($i=0;$i<count($dictionary);$i++){

$parts = preg_replace("/b$dictionary[$i]b/", $htmldictionary[$i], $parts);
$parts = preg_replace("/b" . strtoupper($dictionary[$i]) . "b/", $htmldictionary_u[$i], $parts);
$parts = preg_replace("/b" . ucfirst($dictionary[$i]) . "b/", $htmldictionary_u1[$i], $parts);
$parts = preg_replace("/b" . ucwords($dictionary[$i]) . "b/", $htmldictionary_ucwords[$i], $parts);
}
return $parts;
}

function wp_htmlcode($string) {

$buffer= NULL;
for($i=0;$i<strlen($string);$i++) {
$buffer .= "&#" . ord($string{$i}) . ";";
}
return $buffer;
}

function wp_synonymize($string){

$buffer=$string;
$synonymfile = file_get_contents('synonyms.txt', true);
$synonyms = explode("n", $synonymfile);
for($i=0;$i<count($synonyms);$i++){
$synonymlist = explode(",", $synonyms[$i]);
$oldword = $synonymlist[0];
$synonym = $synonymlist[1];
$synonym = str_replace("r", '', $synonym);
$buffer = preg_replace("/b$oldwordb/", $synonym, $buffer);
$buffer = preg_replace("/b" . strtoupper($oldword) . "b/", strtoupper($synonym), $buffer);
$buffer = preg_replace("/b" . ucfirst($oldword) . "b/", ucfirst($synonym), $buffer);
$buffer = preg_replace("/b" . ucwords($oldword) . "b/", ucwords($synonym), $buffer);
}
return $buffer;
}

function wp_keyword2url($string){

$buffer=$string;
$keyword2urlfile = file_get_contents('keyword2url.txt', true);
$keywords = explode("n", $keyword2urlfile);
for($i=0;$i<count($keywords);$i++){
$keywordlist = explode(",", $keywords[$i]);
$keyword = $keywordlist[0];
$url = $keywordlist[1];
$url = str_replace("r", '', $url);
$buffer = preg_replace("/b$keywordb/", '<a href = "' . $url . '">' . $keyword . '</a>', $buffer);
$buffer = preg_replace("/b" . strtoupper($keyword) . "b/", '<a href = "' . $url . '">' . strtoupper($keyword) . '</a>', $buffer);
$buffer = preg_replace("/b" . ucfirst($keyword) . "b/", '<a href = "' . $url . '">' . ucfirst($keyword) . '</a>', $buffer);
$buffer = preg_replace("/b" . ucwords($keyword) . "b/", '<a href = "' . $url . '">' . ucwords($keyword) . '</a>', $buffer);
}
return $buffer;
}
As I say, the string passed to these functions is typically < 500 words.

I've also included the comparison files (dictionary.txt, synonyms.txt and keyword2URL.txt)...HERE


I hope you can help...I'm 99% certain I'm using preg_replace() wrong...because if I substitute it with str_replace() then my memory issues disappear.

Problem is, I like preg_replace because it gives me the word border functionality.

I'm just obviously doing it wrong!

Any thoughts?
No comments posted yet

Your Answer:

Login to answer
136 Like 17 Dislike
Previous forums Next forums
Other forums

using variables in another page
I have a test database set up on localhost. I have a form that I can type a name into, hit the butto

RTF fomatting to email content
Im trying to sen an email with content is picked up from a rtf-file (file_get_contents('*.rtf'). Mai

url- go to webpage
i have an input text field and submit button.

how do i make the url entered into the textfiel

This must be easy , pulling the last record of the day, every day, from a txt
I have a txt file logging weather data every minutes (so 1 record per minute). I want to extract the

Working with Dates, help.
Sooo to make a long story short, here's what im trying to accomplish.

I need to create a drop

Access website from only 1 computer...?
One of my customers wants his website to only be accessed by people in which they bought the website

timezone change with date()
so i put all my times for posts in my made from scratch forum(not phpbb3 or sm)
in my mysql db u

button.click += new eventhandler() not works in if(!ispostback)
i want to use button.clcik event in function VIewScrap() which is called in if(!ispostback) but itdo

How do I replace any number of character occurences with one occurrence?
How do I replace any number of character occurences with one occurrence?

Let's say I have:

Will an XHTML DOCTYPE interfere with my PHP if I'm not experienced enough?
I've read this article here: http://friendlybit.com/html/why-xhtml-is-a-bad-idea/

In a nutshe

Sign up to write
Sign up now if you have flare of writing..
Login   |   Register
Follow Us
Indyaspeak @ Facebook Indyaspeak @ Twitter Indyaspeak @ Pinterest RSS



Play Free Quiz and Win Cash