<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>protung.ro &#187; PHP</title>
	<atom:link href="http://www.protung.ro/category/programming/web-development/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.protung.ro</link>
	<description></description>
	<lastBuildDate>Tue, 16 Feb 2010 18:03:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PHP Spell Checker v1.1</title>
		<link>http://www.protung.ro/2010/02/php-spell-checker-v1-1/</link>
		<comments>http://www.protung.ro/2010/02/php-spell-checker-v1-1/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 18:03:14 +0000</pubDate>
		<dc:creator>Dragos</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php class]]></category>
		<category><![CDATA[Spell checker]]></category>

		<guid isPermaLink="false">http://www.protung.ro/?p=274</guid>
		<description><![CDATA[A new version of PHP Spell Checker is available. The new feature is checking the spelling with Google&#8217;s &#8220;Did you mean&#8221; feature, so not a big update, but useful non the less. The syntax is the same: &#60;?php // include the class require_once(dirname(__FILE__)."/../GDYMSpellChecker.class.php"); // instantiate the class $spellCheck = new GDYMSpellChecker(); $textWithErrors = "PHP: the [...]]]></description>
			<content:encoded><![CDATA[<p>A new version of PHP Spell Checker is available.<br />
The new feature is checking the spelling with <strong>Google&#8217;s &#8220;Did you mean&#8221;</strong> feature, so not a big update, but useful non the less.</p>
<p>The syntax is the same:</p>
<pre class="brush: php">&lt;?php

// include the class
require_once(dirname(__FILE__)."/../GDYMSpellChecker.class.php");

// instantiate the class
$spellCheck = new GDYMSpellChecker();

$textWithErrors = "PHP: the quik browm fox jumps over the lazi dog lazi today"; // this text has 3 errors
$result = $spellCheck->checkSpelling($textWithErrors, "en-US"); // will return an array with the wrong words with associated suggestions
//$result = $spellCheck->checkSpelling($textWithErrors, "en-US", false); // will return an array with the wrong words without associated suggestions
//print_r($spellCheck->getWarnings());// get all warnings
//print_r($spellCheck->getErrors());// get all errors
if (count($result) == 0) {
	print "Text is OK !&lt;br/&gt;";
} else {
	print "Text has errors !&lt;br/&gt;";
	print "&lt;pre&gt;";
	print_r($result);
}

?&gt;</pre>
<p>For further reading about the PHP class <a href="http://www.protung.ro/2009/08/php-spell-checker/">read this post</a>.</p>
<p><a title="Download class" href="http://titirit.users.phpclasses.org/browse/package/5597.html" target="_blank">Download the class from here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.protung.ro/2010/02/php-spell-checker-v1-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP FIFA Manager online editor project</title>
		<link>http://www.protung.ro/2009/12/php-fifa-manager-online-editor-project/</link>
		<comments>http://www.protung.ro/2009/12/php-fifa-manager-online-editor-project/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 17:45:59 +0000</pubDate>
		<dc:creator>Dragos</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[fifa manager]]></category>
		<category><![CDATA[online editor]]></category>

		<guid isPermaLink="false">http://www.protung.ro/?p=256</guid>
		<description><![CDATA[I am a fan of the FIFA Manager game, i play it every year and every year i would like to install all the &#8220;database extensions&#8221; (community database improvements) available out there, but the problem is that i have to keep track of all fan sites and choose carefully as some databases, club badges, player [...]]]></description>
			<content:encoded><![CDATA[<p>I am a fan of the FIFA Manager game, i play it every year and every year i would like to install all the &#8220;database extensions&#8221; (community database improvements) available out there, but the problem is that i have to keep track of all fan sites and choose carefully as some databases, club badges, player pictures, etc collide with each other.</p>
<p>In this regard I started the FIFA Manger online editor. The aim is to create a web application for editing the database of the game and allow contributors to upload all the images (club badges, player&#8217;s pictures, etc) into one place, aggregate everything in one place.</p>
<p>This is a big project in the way that there is a lot of data to parse and even harder to understand the internal database structure.</p>
<p>Until now i have a small draft of how the application will look like and also I have already written the parser for some details.<br />
You can take a look and test it here: <a href="http://fmed.protung.ro/" target="_blank">http://fmed.protung.ro/</a><br />
For now only England is available for testing (not with the full database).<br />
For now you can see a list of all countries, clubs in that country, all players of the clubs and some details of the players.<br />
The referees are also parsed but there is no interface to see them for now.</p>
<p>Everybody that is interested in this project and has a few hours per week free is more than welcome to join. I need as much help as possible in order to complete this project before the 2011 release  <img src='http://www.protung.ro/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>One of the biggest problems now is the user interface, there are just so many buttons, input fields and windows. So if you are an ExtJS developer and want to create a nice, clean and fast interface for this project do not hesitate to contact me.</p>
<p>Have a nice game, and more about this project soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.protung.ro/2009/12/php-fifa-manager-online-editor-project/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Simple XML Parser Namespace support</title>
		<link>http://www.protung.ro/2009/10/simple-xml-parser-namespace-support/</link>
		<comments>http://www.protung.ro/2009/10/simple-xml-parser-namespace-support/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 20:49:25 +0000</pubDate>
		<dc:creator>Dragos</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[namespace]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[php class]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.protung.ro/?p=241</guid>
		<description><![CDATA[I have added support for namespaces to the parser. What this means, you are now able to register a namspace in order to be able to parse the XML. Also the usage of this class changed. &#60;?php $xml = "http://www.protung.ro/feed/atom/"; // parse an Atom feed // create a new object $parser = new SimpleLargeXMLParser(); // [...]]]></description>
			<content:encoded><![CDATA[<p>I have added support for namespaces to the parser.<br />
What this means, you are now able to register a namspace in order to be able to parse the XML.</p>
<p>Also the usage of this class changed.</p>
<pre class="brush: php">&lt;?php

$xml = "http://www.protung.ro/feed/atom/"; // parse an Atom feed

// create a new object
$parser = new SimpleLargeXMLParser();
// load the XML
$parser->loadXML($xml);

// register the namespace
$parser->registerNamespace("atom", "http://www.w3.org/2005/Atom");
// this will get an array of entries
$array = $parser->parseXML("//atom:feed/atom:entry");

?&gt;
</pre>
<p>As always, you can download the new version from <a href="http://www.phpclasses.org/browse/package/5667.html">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.protung.ro/2009/10/simple-xml-parser-namespace-support/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>New PHP Simple Large XML Parser version</title>
		<link>http://www.protung.ro/2009/10/new-php-simple-large-xml-parser-version/</link>
		<comments>http://www.protung.ro/2009/10/new-php-simple-large-xml-parser-version/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 10:56:20 +0000</pubDate>
		<dc:creator>Dragos</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[php class]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.protung.ro/?p=225</guid>
		<description><![CDATA[I have added support for node attributes to the PHP Simple Large XML Parser class. Now it&#8217;s possible to retrieve the structure of the XML document with the attributes of the nodes. If you choose to get the nodes also the structure of the result array will be different from the non-attribute array. The new [...]]]></description>
			<content:encoded><![CDATA[<p>I have added support for node attributes to the PHP Simple Large XML Parser class.</p>
<p>Now it&#8217;s possible to retrieve the structure of the XML document with the attributes of the nodes. If you choose to get the nodes also the structure of the result array will be different from the non-attribute array.</p>
<p>The new structure will be like this:</p>
<pre class="brush: php">&lt;?php

array('value'=&gt; 'another node / value' ,
     'attributes'=&gt;array('attribute name'=&gt;'attribute value',
                    'another attribute'=&gt;'some value',
                    'yet another attribute'=&gt;'other value'
                    )
);

?&gt;</pre>
<p>In order to get the array with attributes you need to pass the 3rd parameter as true:</p>
<pre class="brush: php">&lt;?php

   SimpleLargeXMLParser::parseXML($xml, "//myFirstNode", true);

?&gt;</pre>
<p>You can download the new version from <a href="http://www.phpclasses.org/browse/package/5667.html">here</a>.</p>
<p>Please <a href="http://www.protung.ro/2009/09/php-simple-large-xml-parser/">read this post</a> for more information about the functionality of the class:</p>
]]></content:encoded>
			<wfw:commentRss>http://www.protung.ro/2009/10/new-php-simple-large-xml-parser-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Yahoo Messenger Archive Decoder v1.5</title>
		<link>http://www.protung.ro/2009/09/php-yahoo-messenger-archive-decoder-v1-5/</link>
		<comments>http://www.protung.ro/2009/09/php-yahoo-messenger-archive-decoder-v1-5/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 18:25:57 +0000</pubDate>
		<dc:creator>Dragos</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[archive]]></category>
		<category><![CDATA[decode]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[php class]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[Yahoo Messenger Archive Decoder]]></category>

		<guid isPermaLink="false">http://www.protung.ro/?p=188</guid>
		<description><![CDATA[A new version of PHP Yahoo Messenger Archive Decoder is available for download. I know 2 years have passed since the release (or actually any other modifications), but a friend asked me to modify it so he can use it to parse conference history files. So this is what&#8217;s new in this version. I really [...]]]></description>
			<content:encoded><![CDATA[<p>A new version of PHP Yahoo Messenger Archive Decoder is available for <a href="http://titirit.users.phpclasses.org/browse/package/3938.html">download</a>.</p>
<p>I know 2 years have passed since the release (or actually any other modifications), but a friend asked me to modify it so he can use it to parse conference history files. So this is what&#8217;s new in this version.</p>
<p>I really don&#8217;t think a new version will be added, unless it will not work anymore with the latest yahoo messenger version (it still works with version 10 beta)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.protung.ro/2009/09/php-yahoo-messenger-archive-decoder-v1-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP simple large XML parser</title>
		<link>http://www.protung.ro/2009/09/php-simple-large-xml-parser/</link>
		<comments>http://www.protung.ro/2009/09/php-simple-large-xml-parser/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 15:55:24 +0000</pubDate>
		<dc:creator>Dragos</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[php class]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.protung.ro/?p=180</guid>
		<description><![CDATA[I needed a simple PHP script to parse large XML files fast and without huge memory consumption, so I&#8217;ve written a small class for this. This class can be used to parse large XML files (it works with small one also) fast and with minimum of memory consumption. It can parse any valid XML and [...]]]></description>
			<content:encoded><![CDATA[<p>I needed a simple PHP script to parse large XML files fast and without huge memory consumption, so I&#8217;ve written a small class for this.</p>
<p>This class can be used to parse large XML files (it works with small one also) fast and with minimum of memory consumption.<br />
It can parse any valid XML and convert it to an array. What it does not do is to get the attributes of the nodes.<br />
If you need it, contact me and i can implement it for you if you want.</p>
<p>You can parse any part of the XML as it supports XPath with the same performance as parsing the entire XML (well, a little bit faster as it&#8217;s less data to parse)</p>
<h2><span id="more-180"></span>Here is an example</h2>
<p>Let&#8217;s say we have the following XML file (called example.xml)</p>
<pre class="brush: xml">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!--
/**********************
 * Example XML (not that large, but it's for demo purpose only)
 **********************/
 --&gt;
&lt;myFirstNode&gt;
	&lt;color-palettes&gt;
		&lt;color type='txt'&gt;red&lt;/color&gt;
		&lt;color type='txt'&gt;yellow&lt;/color&gt;
		&lt;color type='txt'&gt;lime&lt;/color&gt;
		&lt;color type='txt'&gt;cyan&lt;/color&gt;
		&lt;color type='txt'&gt;blue&lt;/color&gt;
		&lt;color type='txt'&gt;magenta&lt;/color&gt;
		&lt;color type='txt'&gt;white&lt;/color&gt;
		&lt;color type='txt'&gt;black&lt;/color&gt;
		&lt;color type='hex'&gt;#FF0000&lt;/color&gt;
		&lt;color type='hex'&gt;#FFFF00&lt;/color&gt;
		&lt;color type='hex'&gt;#00FF00&lt;/color&gt;
		&lt;color type='hex'&gt;#00FFFF&lt;/color&gt;
		&lt;color type='hex'&gt;#0000FF&lt;/color&gt;
		&lt;color type='hex'&gt;#FF00FF&lt;/color&gt;
		&lt;color type='hex'&gt;#FFFFFF&lt;/color&gt;
		&lt;color type='hex'&gt;#000000&lt;/color&gt;
	&lt;/color-palettes&gt;
	&lt;first-100-numbers&gt;
		&lt;number n='1'&gt;1&lt;/number&gt;
		&lt;number n='2'&gt;2&lt;/number&gt;
		&lt;number n='3'&gt;3&lt;/number&gt;
		...
		&lt;number n='97'&gt;97&lt;/number&gt;
		&lt;number n='98'&gt;98&lt;/number&gt;
		&lt;number n='99'&gt;99&lt;/number&gt;
		&lt;number n='100'&gt;100&lt;/number&gt;
	&lt;/first-10-numbers&gt;
	&lt;searchengines&gt;
		&lt;engine&gt;
			&lt;name&gt;Google&lt;/name&gt;
			&lt;website&gt;http://www.google.com&lt;/website&gt;
		&lt;/engine&gt;
		&lt;engine&gt;
			&lt;name&gt;Yahoo&lt;/name&gt;
			&lt;website&gt;http://www.yahoo.com&lt;/website&gt;
		&lt;/engine&gt;
		&lt;engine&gt;
			&lt;name&gt;Bing&lt;/name&gt;
			&lt;website&gt;http://www.bing.com&lt;/website&gt;
		&lt;/engine&gt;
	&lt;/searchengines&gt;
&lt;/myFirstNode&gt;</pre>
<p>And here is the PHP code to extract some data from it as an array:</p>
<pre class="brush: php">&lt;php

// include the class
require_once('SimpleLargeXMLParser.class.php');
$xml = "example.xml";

// get all colors in hex format as an array
$array = SimpleLargeXMLParser::parseXML($xml, "//myFirstNode/color-palettes/color[@type='hex']");

// get all numbers bigger then 50 as an array
$array = SimpleLargeXMLParser::parseXML($xml, "//myFirstNode/first-100-numbers/number[@n&gt;'50']");

// get all search engines as an array
$array = SimpleLargeXMLParser::parseXML($xml, "//myFirstNode/searchengines");

// get the full XML file as an array
// if you don't specify the first node the script will search for it and use the root node
// for performance reasons is better to specify it if you know it
$array = SimpleLargeXMLParser::parseXML($xml, "//myFirstNode"); 

?&gt;</pre>
<p>A new version is available. See <a href="http://www.protung.ro/2009/10/new-php-simple-large-xml-parser-version/">this post</a> for more information about what&#8217;s new.</p>
<h2>Download</h2>
<p>Download <a href="http://www.phpclasses.org/browse/package/5667.html">here</a>. (there are some examples in the package)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.protung.ro/2009/09/php-simple-large-xml-parser/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHP WSDL Generator new version work in progress</title>
		<link>http://www.protung.ro/2009/09/php-wsdl-generator-new-version-work-in-progress/</link>
		<comments>http://www.protung.ro/2009/09/php-wsdl-generator-new-version-work-in-progress/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 20:36:08 +0000</pubDate>
		<dc:creator>Dragos</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php class]]></category>
		<category><![CDATA[wsdl]]></category>
		<category><![CDATA[WSDL Generator]]></category>

		<guid isPermaLink="false">http://www.protung.ro/?p=177</guid>
		<description><![CDATA[i started working on a new (improved) version of PHP WSDL Generator. Many people have asked for new features and better output this is what the new version will have. I will also rewrite almost all the code. The new PHP parser is almost done. Now you can also add classes without specifying files. Just [...]]]></description>
			<content:encoded><![CDATA[<p>i started working on a new (improved) version of PHP WSDL Generator.<br />
Many people have asked for new features and better output this is what the new version will have.<br />
I will also rewrite almost all the code.</p>
<p>The new PHP parser is almost done. Now you can also add classes without specifying files. Just include them in  your code and tell the generator to also use those classes. Of course the old way to add classes (by specifying files with PHP code) will still be available, but unlike before when the content of the files was parsed, now the files first will be included (using require_once() ). I know this is not ideal if you have other code that must not arbitrary execute, but then again it&#8217;s good practice to have the classes separated from any other code. The new parser will be much faster and more accurate.</p>
<p>That&#8217;s all for now, I will post more news about this after more work is done.</p>
<p>Please don&#8217;t ask when the release will happen as I don&#8217;t know. I do this in my free time witch is somehow limited right now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.protung.ro/2009/09/php-wsdl-generator-new-version-work-in-progress/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP Web Commander</title>
		<link>http://www.protung.ro/2009/08/php-web-commander/</link>
		<comments>http://www.protung.ro/2009/08/php-web-commander/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 20:10:07 +0000</pubDate>
		<dc:creator>Dragos</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[file manager]]></category>
		<category><![CDATA[php web commander]]></category>
		<category><![CDATA[phpwc]]></category>

		<guid isPermaLink="false">http://www.protung.ro/?p=145</guid>
		<description><![CDATA[PHP Web Commander is an application designed for web server usage. The basic idea of the program concerns the possibility to manage files, ftp accounts, database, etc. Similarly to the populars files managers, the utility is endowed with an user-friendly interface, ensuring the same level of functional procedures. Supporting a wide range of plugins, the [...]]]></description>
			<content:encoded><![CDATA[<p>PHP Web Commander is an application designed for web server usage.<br />
The basic idea of the program concerns the possibility to manage files, ftp accounts, database, etc.<br />
Similarly to the populars files managers, the utility is endowed with an user-friendly interface, ensuring the same level of functional procedures.<br />
Supporting a wide range of plugins, the application allows the user to configure his own Web Commander system, through miscellaneous commands.</p>
<p>Download it from <a title="PHP Web Commander download" href="http://sourceforge.net/projects/phpwebcommander/" target="_blank">here</a>. Changelog <a onclick="window.open('http://www.protung.ro/PHPWCUpdate.php','PHP Web Commander changelog','scrollbars=yes,width=750,height=600,left='+(screen.availWidth/2-375)+'');return false;" href="http://www.protung.ro/PHPWCUpdate.php">here</a>.</p>

<a href='http://www.protung.ro/2009/08/php-web-commander/phpwebcommander_screenshot_1/' title='phpwebcommander_screenshot_1'><img width="150" height="150" src="http://www.protung.ro/wp-content/uploads/phpwebcommander_screenshot_1-150x150.jpg" class="attachment-thumbnail" alt="PHP Web Commander screenshot 1" title="phpwebcommander_screenshot_1" /></a>
<a href='http://www.protung.ro/2009/08/php-web-commander/phpwebcommander_screenshot_2/' title='phpwebcommander_screenshot_2'><img width="150" height="150" src="http://www.protung.ro/wp-content/uploads/phpwebcommander_screenshot_2-150x150.jpg" class="attachment-thumbnail" alt="PHP Web Commander screenshot 2" title="phpwebcommander_screenshot_2" /></a>
<a href='http://www.protung.ro/2009/08/php-web-commander/phpwebcommander_screenshot_3/' title='phpwebcommander_screenshot_3'><img width="150" height="150" src="http://www.protung.ro/wp-content/uploads/phpwebcommander_screenshot_3-150x150.jpg" class="attachment-thumbnail" alt="PHP Web Commander screenshot 3" title="phpwebcommander_screenshot_3" /></a>

]]></content:encoded>
			<wfw:commentRss>http://www.protung.ro/2009/08/php-web-commander/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Spell Checker</title>
		<link>http://www.protung.ro/2009/08/php-spell-checker/</link>
		<comments>http://www.protung.ro/2009/08/php-spell-checker/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 19:00:31 +0000</pubDate>
		<dc:creator>Dragos</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php class]]></category>
		<category><![CDATA[Spell checker]]></category>

		<guid isPermaLink="false">http://www.protung.ro/?p=20</guid>
		<description><![CDATA[This package can be used to check the spelling of text and get fix suggestions. There is a base class that defines functions for spell checking. There are also two classes for checking the spelling of text using either PHP scripts that contain arrays of valid words and grammar definitions, or using the hunspell program. [...]]]></description>
			<content:encoded><![CDATA[<p>This package can be used to check the spelling of text and get fix suggestions.</p>
<p>There is a base class that defines functions for spell checking.</p>
<p>There are also two classes for checking the spelling of text using either PHP scripts that contain arrays of valid words and grammar definitions, or using the hunspell program.</p>
<p>If the classes determine that there are misspelled words, they may return suggestions for eventual fixes.</p>
<p><span id="more-20"></span></p>
<ol>
<li> Installation<br />
This class uses affix dictionaries. This means that you can use the dictionaries from OpenOffice or Mozilla products.<br />
Just go to https://addons.mozilla.org/en-US/firefox/browse/type:3 and download the dictionaries that you want.<br />
Unpack the *.xpi files and extract the *.aff and *.dic files into dictionaries/hunspell/ folder.<br />
This class also works with MySpell dictionaries.<br />
There is nothing more you have to do, just start using the class. Please read further and then take a look at the examples.</li>
<li>HunSpell version<br />
The hunspell version of this class is preferred.<br />
It uses less memory for complex languages or with a very big dictionary (over 150.000 words) and the word suggestion is excellent.<br />
You can get the binaries from http://sourceforge.net/projects/hunspell/files/Hunspell/1.2.8/<br />
When using this version of the class you need to specify where hunspell is installed by calling the setHunspellPath() method<br />
or add hunspell to the system path.</li>
<li>PHP version<br />
In case you can not install hunspell on your server you can use a pure PHP version.<br />
The words suggestions is not as good as the HunSpell version (will implement a new algorithm soon).<br />
Also the PHP version can use a lot of memory for complex languages or with a very big dictionary (over 150.000 words).<br />
As an example, for German languages the script can use over 100Mb. On the other hand for simple languages it only uses about 10Mb.<br />
The affix dictionaries can not be used as it is. They need to be converted to PHP code.<br />
This can be done manuall by calling the compileHunAffixDictionary() method.<br />
If the dictionary is not compiled yet, the first time you use it it will try to compile it from hunspell.<br />
For complex languages this file can be over 15Mb.</li>
<li>Known bugs, accuracy and performance concerns<br />
There are several known bugs:</p>
<ul>
<li> initially if a word has the suffix doubled (misspell) the spell checker reports it as a correct word. (pure PHP version only).There is a fix implmented that will rezolve the issue but if a word is correctly spelled with the doubled sufix it will be reported ar wrong.You can remove the fix by commenting the 93-95 lines in PHPSpellChecker.class.php</li>
</ul>
<ul>
<li> in some languages there is a need for a special encoding and this is not yet supported (will be soon)</li>
</ul>
<p>Accuracy: (pure PHP version)</p>
<ul>
<li> Word suggestion is not very smart. It&#8217;s just a simple &#8220;algorithm&#8221;. I plan on improveing this (maybe you can help out)</li>
</ul>
<p>Performance:</p>
<ul>
<li> For very complex languages, or with a very big dictionary (over 150.000 words) (pure PHP version only) the script can use alot of memmory (100Mb)</li>
</ul>
</li>
<li>Conclusion<br />
The PHP version can be used very efficient for simple languages or with small dictionary (ex. english)<br />
This is just the first release and it will be greatlly improved.<br />
If you want to participate on this project please contact me.</li>
</ol>
<p>Example (PHP Based):</p>
<pre class="brush: php">&lt;?php

// include the class
require_once(dirname(__FILE__)."/../PHPSpellChecker.class.php");

// instantiate the class
$spellCheck = new PHPSpellChecker();

/////////////////////////
// set some text to check
$text1 = "Die Commerzbank blickt besorgt in die Zukunft: Das Geldhaus rechnet in der zweiten Jahreshälfte mit einer Zunahme von Kreditausfällen - denn Firmen wie Privatkunden bekommen Probleme, ihre Schulden zu bedienen. Schon jetzt hat das Institut vorsichtshalber knapp eine Milliarde Euro zurückgelegt";
$result = $spellCheck-&gt;checkSpelling($text1, "de-DE"); // should return an empty array (text is correct)
//print_r($spellCheck-&gt;getWarnings());// get all warnings
//print_r($spellCheck-&gt;getErrors());// get all errors
if (count($result) == 0) {
    print "Text is OK !
";
} else {
    print "Text has errors !
";
    print "&lt;pre&gt;";
    print_r($result);
}
$spellCheck-&gt;clearWarnings(); // clear all previous warnings
$spellCheck-&gt;clearErrors(); // clear all previous errors

$text1 = "PHP: the quik browm fox jumps over the lazi dog"; // this text has 3 errors
$result = $spellCheck-&gt;checkSpelling($text1, "en-US"); // will return an array with the wrong words with associated suggestions
//$result = $spellCheck-&gt;checkSpelling($textWithErrors, "en-US", false); // will return an array with the wrong words without associated suggestions
//print_r($spellCheck-&gt;getWarnings());// get all warnings
//print_r($spellCheck-&gt;getErrors());// get all errors
if (count($result) == 0) {
    print "Text is OK !
";
} else {
    print "Text has errors !
";
    print "&lt;pre&gt;";
    print_r($result);
}

?&gt;</pre>
<p>Example (HunSpell Based):</p>
<pre class="brush: php">&lt;?php
// include the class
require_once(dirname(__FILE__)."/../HunSpellChecker.class.php");

// instantiate the class
$spellCheck = new HunSpellChecker();
$spellCheck-&gt;setHunspellPath(dirname(__FILE__)."/../hunspell"); // set path for windows systems
/////////////////////////
// set some text to check
$text1 = "Die Commerzbank blickt besorgt in die Zukunft: Das Geldhaus rechnet in der zweiten Jahreshälfte mit einer Zunahme von Kreditausfällen - denn Firmen wie Privatkunden bekommen Probleme, ihre Schulden zu bedienen. Schon jetzt hat das Institut vorsichtshalber knapp eine Milliarde Euro zurückgelegt";
$result = $spellCheck-&gt;checkSpelling($text1, "de-DE"); // should return an empty array (text is correct)
//print_r($spellCheck-&gt;getWarnings());// get all warnings
//print_r($spellCheck-&gt;getErrors());// get all errors
if (count($result) == 0) {
    print "Text is OK !
";
} else {
    print "Text has errors !
";
    print "&lt;pre&gt;";
    print_r($result);
}
$spellCheck-&gt;clearWarnings(); // clear all previous warnings
$spellCheck-&gt;clearErrors(); // clear all previous errors

$text1 = "PHP: the quik browm fox jumps over the lazi dog"; // this text has 3 errors
$result = $spellCheck-&gt;checkSpelling($text1, "en-US"); // will return an array with the wrong words with associated suggestions
//$result = $spellCheck-&gt;checkSpelling($textWithErrors, "en-US", false); // will return an array with the wrong words without associated suggestions
//print_r($spellCheck-&gt;getWarnings());// get all warnings
//print_r($spellCheck-&gt;getErrors());// get all errors
if (count($result) == 0) {
    print "Text is OK !
";
} else {
    print "Text has errors !
";
    print "&lt;pre&gt;";
    print_r($result);
}
?&gt;</pre>
<p>In the package you will also get an interactive example page so you can easily test it out.</p>
<p><a title="Download class" href="http://titirit.users.phpclasses.org/browse/package/5597.html" target="_blank">Download class</a> and hope it&#8217;s useful to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.protung.ro/2009/08/php-spell-checker/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP WSDL Generator</title>
		<link>http://www.protung.ro/2009/08/php-wsdl-generator/</link>
		<comments>http://www.protung.ro/2009/08/php-wsdl-generator/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 17:50:32 +0000</pubDate>
		<dc:creator>Dragos</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php class]]></category>
		<category><![CDATA[wsdl]]></category>
		<category><![CDATA[WSDL Generator]]></category>

		<guid isPermaLink="false">http://www.protung.ro/?p=16</guid>
		<description><![CDATA[This package can be used to generate a Web Services Definition Language (WSDL) document from the code of a class that implements Web services calls. It parses the code of a given PHP class script files and generates a WSDL definition from the list of the class functions. Certain functions may be skipped to not [...]]]></description>
			<content:encoded><![CDATA[<p>This package can be used to generate a Web Services Definition Language (WSDL) document from the code of a class that implements Web services calls.</p>
<p>It parses the code of a given PHP class script files and generates a WSDL definition from the list of the class functions.</p>
<p>Certain functions may be skipped to not be included in the WSDL definition based on the function access type.</p>
<p>The generated WSDL may be saved to a given file, returned as a string or served for download.</p>
<p><a title="Download class" href="http://titirit.users.phpclasses.org/browse/package/3509.html" target="_blank">Download class</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.protung.ro/2009/08/php-wsdl-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

