PHP-Coding-Practices.com: How I Turned A Slow Array Sort Into A Quick One Using Quicksort Algorithm
240604
On the PHP-Coding-Practices site, there's a sort of case study posted showing how the author (Tim Koschuetzki) took a chunk of code that was slow at sorting an array and sped it up dramatically using the Quicksort Algorithm.   Today in the morning I had a very unusual programming job to do - or at least what is for me rather unusual. I was confronted with the question whether it is easy to implement the quicksort algorithmn to sort an array of arrays based on a key in the second-dimension of the array. Join me to find out.   The key to the transformation is an application of the Quicksort method that applies a filter to the elements in the array and places items to the right and left of the pivot point. To illustrate the point, he includes both the pre-quicksort code and post-quicksort.
381461
Felix Geisendorfer has a great functionality note that CakePHP users might want to check out. It's related to the Set class and how it handles nested arrays.   So far this has been a little dark spot for me in the core and from my previous quick looks at the class I've never been quite able to figure out what it's exact purpose was. Until now all I knew was "well it's probably some fancy array manipulation code that is somewhat obfuscated and undocumented". Oh boy, I wish I had spent more time on this earlier. It's probably one of coolest new features in 1.2 and nobody realizes it.   He starts with a simple example of how the class works with a nested array of user information. Normally, you'd loop through the array and append the values you'd need to another array (like the user's name), but with Set, it's as simple as calling the static "extract" method with the "path" to what you want out of the array. A simple one-line replacement for a (normally) three to four line bit of code.   He gives a few other examples using this same user information, grabbing various results and includes one at the end that is very nice indeed - pulling in an XML document, running it through a simple xmltoArray function and pulling out the titles in a few easy lines.
649335
Michael Kimsal has posted some more thoughts on what he calls the "sad state of PHP development" pointing out some of the practices of the PHP group surrounding the development of the language.   Every few months there's a release, whether large or small, which introduces new features and bug fixes. However, with every release also comes fears of tiny, sometimes undocumented, changes that break existing code, and often for no solid reason other than someone with commit access decided they liked the 'new' way better than the old way.   He points out a specific example, get_object_vars and how its return values were changed in an earlier release as well as the update to glob made recently to change its return types.    In his opinion:   No changes should be made to the PHP core without an issue being opened, either in the 'bug' tracker or some other issues tracker.   Be sure to check out the comments for other great opinions on the topic.
674304
Mike Wallner has thrown together some stats for the latest edition of the pecl/http package to test its response performance.   The results surprised me, because it clearly shows that the performance drop for starting the PHP engine and doing the neccessary negotiation to provide caching is not that bad.   There's a chart of the results as well as a full PDF with all of the stats the graph maps out. He includes the legend to make the graph easier to understand.
49548
In a new blog post Richard Thomas takes a deeper look (well continues his ) at the performance of the Zend_Loader component of the Zend Framework.   When you use Zend_Loader your files are wrapped in conditional statements. These statements prevent APC and all other cache/accelerator programs to have problems properly caching your file. [...] Now here is the catch-22. Depending on the size of your application and how often different classes are used you can run into problems.   His result doesn't have much to do with the component, though - he points out that conditionals of any type can slow things down in an application and that "benchmarking is your friend".
48646
In this new post to the PHP Security blog, Stefan Esser points out that an issue that was previously marked as corrected - a problem with the chunk_split function - hasn't completely been corrected.   This [bugfix] fixes the chunk_split() overflow (found by SEC-CONSULT) that was according to the PHP 5.2.3 release notes already fixed. The original fix was however not only broken but complete nonsense. If you can read C you will see that the integer overflow was not fixed in PHP 5.2.3 but simply moved into a separate line and an additional bogus if clause was added.   Stefan includes a simple four line code example to illustrate his point.
90155
Based off of a previous article from Mike Willbanks, Stuart Herbert has posted some of his own thoughts on tuning and tweaking your applications for the best performance you can get out of them.   There's some good advice in there, and I thought it'd be a good idea to quickly add a bit more detail about the separate approaches that Mike raises.   He goes over the APC caching, memcache, the "gzip trick", the "Not Modified" header and optimized SQL statements.   He also mentions one thing that Mike didn't mention - a split between static files (no PHP needed) and their dynamic cousins. Having a more pure Apache (no PHP installed) can help give a minute jump in speed that, depending on the size of the site, could really add up from a user's perspective.
126500
DevShed is starting up another new series today, this time looking at the DirectoryIterator methods out of the Standard PHP Library functionality.   Because this class might be handy to use in projects where handling directories is a must, in this new series I'll be taking a close look at some of its most important methods. We will explore these methods appropriately in conjunction with the corresponding code samples.    They introduce the class, noting why it's handy to use and where's the best place to use it - including an example. They get into a bit more detail, looking at the key() and current() methods as well as using the rewind() method to reset the pointer for the directory.
573906
In a new blog entry today, Matthew O'Phinney talks about updates (and refactoring) that he's done to a PEAR package he's developed, File_Fortune.   Over the past few evenings, I've refactored File_Fortune to have it implement Iterator, Countable, and ArrayAccess -- basically allowing it to act like an array for most intents and purposes. As a result, I've eliminated the need for the File_Fortune_Writer package, and greatly simplified the usage.   The package is designed to make an interface between the casual PHP user and the fortune files common on most *nix machines. To illustrate he update, he includes some code that grabs the fortune file, parses it to grab a random one and echoes them out. Also included is the save() method so you can add your own to the list easily.
644868
The International PHP Magazine has conducted a poll on its website over the past week, this time asking "You Did Not Know That...", asking developers which of the true statements about PHP they didn't know about.   The options this time were:  The trailing '?>' in PHP is Optional You can embed other programming languages in PHP Objects can be made to look like arrays by using Standard PHP Library require is faster than require_once Anything Less than 5.1.0 is Silly All  There wasn't a whole lot of difference in the results of this poll, but the most all-inclusive of the list was the one selected the most - "All". Following that, was that the trailing closing PHP tag is optional, then a tie for third between the "embed other languages" and "Less than PHP 5.1.0" options.   Be sure to cast your vote in their latest poll that asks readers that they're really looking for in their frameworks.
104778
Latest PHPClasses.org Releases:Multi-Dimensional Array HandlerMySQL2JSONBBCode ParsersphpcompilerProcessingExponsor ModSimplePagingweb20vnRouterSStatusMagic ArraysqlExecmyAltCaptchaDynamic Methodpreg_magic
14108
On the SitePoint PHP Blog today, Troels Knak-Nielsen has written up a post concerning the current state of functional programming in PHP.   With the rise of Javascript, and languages like Python and Ruby, functional programming is becoming more mainstream. Even Java seems to be getting closures in the next version, so does this leave PHP lacking behind or is there an unrealized potential hidden within?   He looks at a few different aspects of functional programming and sees how well PHP fits into them (like dynamic dispatch, binding a variable to a function and an implementation of currying for a function). This last option is the only "true" functional feature that PHP can realistically handle.
656049
From Dotvoid.com, there's a new posting talking about the continued use of PHP4 by developers and hosting companies and how it's effecting the community as a whole.    It is true that the PHP 5 uptake has been slow. Many internet service providers as well as many developers are reluctant to switch. This is probably, as others have stated, a circular dependency.   As ISP:s are reluctant to upgrade the popular open source projects are hesitant to upgrade. I still think the wrong people are worried. Still PHP 5 is increasing it's share and finally the day will come when version 4 will be considered legacy. Hopefully before PHP 6 is here but not necessarily.    He continues on, talking about what PHP5 is really about (it's not just the objects!) and things that can help make it an easier sell to those still lagging in a PHP4 world - like the Zend Framework.
2750
On DevShed today, there's the second part in a two part series (another excerpt from the "Zend PHP Certification" from Zend) talking about getting the most out of your application and platform through some simple debugging/optimizing tools.   They start off with a look at debuggers - what they're for and a brief mention (high level) of how to use them. Next up is some simple suggestions for optimizing the performance of your application:  Hardware issues Web server issues Avoid overkill Zip it up Database optimizations  They also include a simple recommendation that all developers, looking for performance boosts or not should follow - "keep your code simple".
678152
In a new post on the Splitbrain blog today about creating and working with Semacode and QR Codes, specifically with PHP functionality.   I was more interested in Semacode, because it looks somehow cooler than QR in my opinion. Unfortunately I wasn't able to find any free (beer and speech) PHP library to create these codes.   He did, however, find a Javascript port (from a C library) to harvest the logic from and create his own PHP class to handle the semacode creation. He notes that it's probably still a bit buggy but is offering it for download to whoever might want to mess around with it.
374326
In a new post today, Alexey Zakhlestin talks about "limited implementation" of the SCGI protocol that he created in PHP.   I finally found some time (and inspiration) to do something in direction of implementing FastCGI the way I see it. Initially, I was going to implement FastCGI-functions in php-extension, but that would require more time than I currently have, so I started with a simplier task: I implemented SCGI protocol (which is way simplier than FastCGI) in pure php-code (which is easier, again, and letÃ¢ÂÂs me change API faster, during development).   The result is this project (hosted on the Google Code site) that allows you to use it with any SCGI-enabled server (apache and lighttpd. He includes a source code example to clarify its use.
716986
In his latest blog entry, Brian Moon takes a look at using big arrays in PHP - how efficient it is and what can be done to ease things a bit.   So, at dealnews, we have a category tree. To make life easy, we dump it to an array in a file that we can include on any page. It has 420 entries. So, I was curious how efficient this was. I noticed that some code that was using this array was jumping in memory usage as soon as I ran the script.   His tests showed that the memory jump from before and after the array was significant (5 MB for his test). He tested different methods of storage for the array including a var_export and serializing the data (the lowest memory option).