For six months in 2004, Intranet Journal's Peter Zeidman published a tutorial on using the PHP programming language to build a content management system (CMS). Writing your own CMS can lead to a solution that is better suited to your requirements, better addresses the needs of your users, and is better understood by your development team. If you have the time and expertise to write your own in-house system, it may well prove the better option. Part 1 of the series begins with a look at the overall plan for the CMS, and a look at PHP and the concept of object-oriented programming. Part 2 takes a look at the basic PHP code that will power the CMS. Part 3 examines the creation of the database and the database connector. Part 4 explores validation, and the creation of a validator class and the creation of sections for the content that needs to be managed. Part 5 introduces security to the content management system, and shows how to create a system that is accessible only to those with authorization to access it. It also takes a look at creating a log-in for users. Part 6 discusses layouts for the content, templating systems, and talks about possible add-ons and features that can enhance your PHP-based content management system.

While I am a fan or roll-your-own software, there are some times when it doesn't make a lot of sense. CMS is one of those. There are so many open source options that you should be able to find a really close fit and modify it. See http://www.opensourcecms.org for long list with links and demos of everything.

I was actually thinking from a business perspective, but you make a great point. A CMS is a really good way to learn and it has a lot of "programmer feel good" which makes it fun. Sort of like software development stage 1 where a programmer has a problem then writes a tool to help. It's cool when you see your tedious workload reduced by something you've written.

It would be a great project for beginners, as a CMS is generally a fairly logical, straight forward system to assemble. Basic features present nothing terribly complicated and it would be a good exercise in learning database connectivity as well as basic text parsing. They'd either modularize it or learn quickly they should have A modular system would be easy to add later more advanced stuff to.

I rolled a CMS, once upon a time -- the intent was to build something that was free of any database -- all flat file based storage for the purpose of portability. It worked well enough, but not being a consistent blogger I found the software got more attention than the actual use of it and abandoned it altogether