I recently encountered memory leak while using the xcache extension (version 1.2) with PHP 5.2.6.
The following code confirms the memory leak:
$data = "data";
xcache_set("key",$data);
while(1) {
$a = xcache_get("key");
echo "Memory Usage :".memory_get_usage()."\n";
}
This seems like a known issue and a worksround is suggested by oli at http://xcache.lighttpd.net/ticket/95 . Simply type-cast the data to a string while using xcache_set. The following works without any memory leak:
$data = "data";
xcache_set("key",(string)$data);
while(1) {
$a = xcache_get("key");
echo "Memory Usage :".memory_get_usage()."\n";
}
Don't know the root cause of this issue but the workaround helped.
Showing posts with label php. Show all posts
Showing posts with label php. Show all posts
Thursday, June 18, 2009
Wednesday, June 03, 2009
Tagging pattern in an element of XML using PHP
Recently I had a requirement to tag a pattern within an element of the provided XML.
Following code worked:
<?php
function replaceElementWithTaggedElement($doc, $element, $pattern, $tagNameForPattern)
{
$newElement = $doc->appendChild(new domelement($element->nodeName));
$content = $element->nodeValue;
while(preg_match($pattern, $content, $matches, PREG_OFFSET_CAPTURE))
{
$match = $matches[0][0];
$offset = $matches[0][1];
$firstPart = substr($content,0,$offset);
$secondPart = substr($content,$offset+strlen($match));
$newElement->appendChild($doc->createTextNode($firstPart));
$taggedElement = $doc->createElement($tagNameForPattern);
$taggedElement->appendChild($doc->createTextNode($match));
$newElement->appendChild($taggedElement);
$content = $secondPart;
}
$newElement->appendChild($doc->createTextNode($content));
$element->parentNode->replaceChild($newElement, $element);
}
$doc = new DOMDocument();
$doc->loadXML("<root><one>This is the first text node</one><two>This is the second text node and the word to be highlighted is second</two></root>");
$oldElement = $doc->getElementsByTagName("two")->item(0);
replaceElementWithTaggedElement($doc, $oldElement, "/second/", "tagged");
echo $doc->saveXML();
?>
OUTPUT
<?xml version="1.0"?>
<root><one>This is the first text node</one><two>This is the <tagged>second</tagged> text node and the word to be highlighted is <tagged>second</tagged></two></root>
Following code worked:
<?php
function replaceElementWithTaggedElement($doc, $element, $pattern, $tagNameForPattern)
{
$newElement = $doc->appendChild(new domelement($element->nodeName));
$content = $element->nodeValue;
while(preg_match($pattern, $content, $matches, PREG_OFFSET_CAPTURE))
{
$match = $matches[0][0];
$offset = $matches[0][1];
$firstPart = substr($content,0,$offset);
$secondPart = substr($content,$offset+strlen($match));
$newElement->appendChild($doc->createTextNode($firstPart));
$taggedElement = $doc->createElement($tagNameForPattern);
$taggedElement->appendChild($doc->createTextNode($match));
$newElement->appendChild($taggedElement);
$content = $secondPart;
}
$newElement->appendChild($doc->createTextNode($content));
$element->parentNode->replaceChild($newElement, $element);
}
$doc = new DOMDocument();
$doc->loadXML("<root><one>This is the first text node</one><two>This is the second text node and the word to be highlighted is second</two></root>");
$oldElement = $doc->getElementsByTagName("two")->item(0);
replaceElementWithTaggedElement($doc, $oldElement, "/second/", "tagged");
echo $doc->saveXML();
?>
OUTPUT
<?xml version="1.0"?>
<root><one>This is the first text node</one><two>This is the <tagged>second</tagged> text node and the word to be highlighted is <tagged>second</tagged></two></root>
Saturday, April 18, 2009
Gearman Client and Worker with PHP
To write the Gearman client or worker in PHP there are 2 options available:
1) Net_Gearman pear package: http://pear.php.net/package/Net_Gearman/download/0.1.1
2) Gearman PHP Extension: http://www.gearman.org/doku.php?id=download
As per my experiments, Net_Gearman does not processes all requests when multiple (more than 5) simultaneous clients are sending requests.
The PHP extension available on gearman.org is better and initial tests are encouraging.
I encourage using the Gearman server and library available on gearman.org as well.
1) Net_Gearman pear package: http://pear.php.net/package/Net_Gearman/download/0.1.1
2) Gearman PHP Extension: http://www.gearman.org/doku.php?id=download
As per my experiments, Net_Gearman does not processes all requests when multiple (more than 5) simultaneous clients are sending requests.
The PHP extension available on gearman.org is better and initial tests are encouraging.
I encourage using the Gearman server and library available on gearman.org as well.
Friday, March 27, 2009
Keyword Suggestor in PHP 5
To add a feature like Google's Did You Mean in your PHP application a reasonable solution is to use PHP's pspell library.
This comes bundled with PHP (http://php.net/pspell). Compile PHP with the '--with-pspell' option but before this ensure that you have aspell (version 0.6 or above) already installed.
Custom dictionary can also be created for aspell but this will require the aspell-lang package. You can download the same from here.
Details on how to create your custom dictionary are available here under the 'Creating a Custom Language Dictionary' section.
This comes bundled with PHP (http://php.net/pspell). Compile PHP with the '--with-pspell' option but before this ensure that you have aspell (version 0.6 or above) already installed.
Custom dictionary can also be created for aspell but this will require the aspell-lang package. You can download the same from here.
Details on how to create your custom dictionary are available here under the 'Creating a Custom Language Dictionary' section.
Friday, February 29, 2008
Profiling PHP code with xdebug
Using xdebug to profile php code is very simple.
Following are the steps to get started:
1) Install the xdebug extension (http://xdebug.org/docs/install) for PHP.
2) Enable profiling for any PHP which gets executed by setting xdebug.profiler_enable=1 in php.ini
3) Restart the Apache Server
From now on, whenever you execute a PHP, files with name starting from cachegrind.out will be created under the /tmp directory.
4) Install kcachegrind (http://kcachegrind.sourceforge.net/)
5) start kcachegrind with the cachegrind.out file as the parameter (eg. kcachegrind cachegrind.out.12345)
6) Set xdebug.profiler_enable=0 in php.ini to disable profiling.
Following are the steps to get started:
1) Install the xdebug extension (http://xdebug.org/docs/install) for PHP.
2) Enable profiling for any PHP which gets executed by setting xdebug.profiler_enable=1 in php.ini
3) Restart the Apache Server
From now on, whenever you execute a PHP, files with name starting from cachegrind.out will be created under the /tmp directory.
4) Install kcachegrind (http://kcachegrind.sourceforge.net/)
5) start kcachegrind with the cachegrind.out file as the parameter (eg. kcachegrind cachegrind.out.12345)
6) Set xdebug.profiler_enable=0 in php.ini to disable profiling.
Friday, February 01, 2008
Compiling PHP with PDO-mysql
To install pdo-mysql with PHP, following are the steps:
1) configure PHP with '--enable-pdo=shared --with-pdo-mysql=shared' options.
2) compile and install PHP (make, make install)
3) Add 'extension = pdo.so' and 'extension = pdo_mysql.so' in the php.ini after pointing the extension_dir variable to the appropriate location where these 'so' reside. (eg. extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613)
1) configure PHP with '--enable-pdo=shared --with-pdo-mysql=shared' options.
2) compile and install PHP (make, make install)
3) Add 'extension = pdo.so' and 'extension = pdo_mysql.so' in the php.ini after pointing the extension_dir variable to the appropriate location where these 'so' reside. (eg. extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613)
Friday, January 11, 2008
Removing all non-ASCII characters from a string using php
ASCII characters have hex code from 00 to 7F (http://www.asciitable.com/).
Following php function removes all non-ASCII characters from a string:
function removeNonAscii($string) {
return preg_replace('/[^\x00-\x7f]/','',$string);
}
Following php function removes all non-ASCII characters from a string:
function removeNonAscii($string) {
return preg_replace('/[^\x00-\x7f]/','',$string);
}
Subscribe to:
Posts (Atom)