Monday, June 14, 2010

PhpFox 2.0.5 Released

We are pleased to announce that phpFox 2.0.5 has been released. 2.0.5 is a maintenance release, however it also includes several new beta features we are testing that will be part of 2.1. This will be the final maintenance release that will include new features for communities to test publicly. Our next release with new features will be 2.1, however we will still continue to release any needed maintenance versions up until v2.1 is stable.

Whats New?

  • Admins will be able to approve new members before they can be part of the community.
  • Admins can now manage (add/edit/delete) currencies and not be forced to use the default USD.
  • Marketplace has been updated to support multiple currencies and not be forced to use the default USD.
  • Exchange Rate API support. We use this in certain areas like the marketplace where User A is selling an item in USD, while User B has selected EUR as their default currency so we use the API to make a on-the-spot currency exchange.
  • Added a new “no image found” for items without photos (eg. groups, events etc…), which before would show the default “no image found” for users. So we separated the “no image found” for users and items.
  • Admins can control if during registration it will display “Full Name” or “Display Name”.
  • Admins can now disable the “Username” on registration allowing users to create usernames at a later time. This can bring down the registration form to: Email, Display Name, Password
  • We have added the ability to resend the verification email in case the user was not able to find the email the first time.
  • Support included to store data (eg. photos, videos, mp3s) on Amazon S3
  • Users can now create ad campaigns which are purchased on the spot.
  • Users can purchase sponsorship spots for items on the site (eg. photos, marketplace listing, events) so they can promote their items.
  • Users can sell items via the marketplace and funds are automatically sent to their payment gateway of choice (default: PayPal, 2checkout etc…)
  • TinyMCE Editor Plug-in included
  • Facebook Like Button added on several items: Blogs, Photos, Videos, Groups, Events, Marketplace
  • Memcached support added
  • MySQL Replication support added
  • Admins can enable an option to force a secure connection via HTTPS on their registration, login, account and privacy setting pages.
  • Approval System has been updated to include support to moderate: Blogs, Forum Threads, Forum Posts, Groups, Bulletins and Comments
  • Flood Control System has been updated to include support for the following: Blogs, Photos, Groups, Videos, Quiz, Events, Marketplace
  • Promotions System added where Admins can create promotions to automatically upgrade users to another user group based on their activity points and/or days they have been a member.
  • Admins can now mass approve, ban, un-ban, verify, resend verification email and delete members.
  • Added ability for Admins to search for a users IP and perform a mass action.
  • Added the ability to add multiple genders based on client requests.

How to Setup a Dedicated Web Server for Free

Setting Up a Dedicated Web Server
All great websites have a great server behind them. In this tutorial, I’ll show you how to set up a dedicated web server (with Apache, MySQL, and PHP) using that old computer you have lying around the house and some free software.


1. A Quick Overview

In this tutorial, we are aiming to accomplish several things:
  • We’re going to install the Ubuntu Server operating system. I commonly use Ubuntu because of its ease of use and
    simple administration. It also has a rather large and extremely active community behind it, which makes getting
    support a breeze.
  • We’re going to install an OpenSSH server. This allows you to administer your server from remote computers.
  • A LAMP (Linux, Apache, MySQL, and PHP) stack is going to be installed. This provides the backbone that will run
    your web site. Apache is the industry standard web server on Unix-based operating systems; it’s what most web hosts
    use (NETTUTS is using it right now!) and it’s what we’re going to use.
  • We’re going to install a firewall to protect your server from unauthorized access.
In order to follow this tutorial, you’re going to need a few items:
  • A computer to use as your server. It doesn’t need to be powerful; as long as it’s not ancient, it’ll work fine. Please
    don’t do this on your desktop PC; Ubuntu will completely wipe your computer.
  • A CD burner and a blank CD. These are so that you can burn Ubuntu to a disk in order to install it.
  • Time. Seriously, this process is time-consuming, especially if you run into problems. Try to set aside an afternoon
    to follow this tutorial.
You may be asking why you’d want to have your own web server. There are several reasons, a few of them being: you can have your own testing
ground for your websites; with a little modification, you could host your own site; and, you will learn a lot about Linux/Unix as you go.
With that said, let’s get started!

2. Download Ubuntu Server

First and foremost, we’re going to need a CD with Ubuntu on it. Point your web browser to http://www.ubuntu.com/,
and click download from the menu to the left. You will now be presented with a box with two tabs: “Desktop Edition” and
“Server Edition”. Click the “Server Edition” tab, and select “Ubuntu 8.04 LTS”. Next, select a download location from the
drop-down box. Finally, hit the “Begin Download” button.
Now you need to burn the ISO (the file that you downloaded) to a blank CD. If you don’t know how to do this, there is an
excellent guide at https://help.ubuntu.com/community/BurningIsoHowto

3. Install Ubuntu Server

Now that you’ve downloaded and burned the ISO, let’s get Ubuntu installed on your server. Put the disk in the drive, and boot from the CD. In most modern computers, this will happen by default if a disk is in the drive when you turn it on. If it doesn’t, then you need to press a key on your keyboard right when you turn it on. For my laptop, it’s F12, and for my server, it’s F2. It just depends on your computer. You can find it by looking at the text on your screen right when you turn the computer on, during the BIOS. You’ll see something like “Press [KEY] to change boot order”. Press that key, and select your CD drive.
Still with me? Good. Now that you’ve booted up Ubuntu, you should see the following screen:
Select your language, and hit enter. Now you’ll see this screen:
Select “Install Ubuntu Server”, and away we go!
The installer will now ask you if you want it to detect your keyboard layout. Personally, I always choose no, because
it’s faster to select a standard american keyboard from the list than to have the installer detect it. Either option is fine,
just follow the on-screen instructions.
After you’ve done that, you’ll now see a bunch of loading screens saying things like “Detecting CD-ROM drives” and such.
These should pass quickly and without problems. However, during these screens, the installer will try to auto-configure your
network settings. For most cases, this will work without complaint. However, if it doesn’t work for you, just follow the
on-screen instructions to get it working.
After it’s done with all of that, it will ask you for a host name. You can usually set this to anything; I always set
mine to “web-server”.
The system will now want you to set the time zone for your clock. For me, it’s Pacific. Choose the one that applies to
you.
Now, the system will detect more hardware, and you’ll be prompted to “partion the disk(s)”. Select “Guided – use entire
disk”.
You will now need to select the disk you wish to partition. For most setups, only one disk will be available; however,
for more specialized systems, more options will be available here. Choose the one that applies to you.
It will ask you if you want to write the changes to the disk. Select “Yes” and hit enter. The installer will now proceed
to format the drive and set up the partitions.
Now the magic happens. The system will begin to install. While this happens, go get a cup of coffee. This can take anywhere
from 10 minutes to an hour. It just depends on your system. There might be times that it seems like it’s frozen; don’t worry,
it isn’t. Just let it do it’s thing. However, if it’s stuck on one thing for upwards of an hour, then yes, it is frozen.
Now that the system is installed, it needs to set up the account you are going to login with. First, give it your full
name and hit “Continue”.
Now give it your username. It will normally just set it as your first name,
but you can change it. One name you may not use is “root”.
You will now be asked to provide a password. It is ESSENTIAL that you choose a strong password, or your server will not
be secure at all. I recommend at LEAST a mixture of numbers, lowercase letters, and uppercase letters. However, for my servers
I use symbols, as well as a mixture of the above. DO NOT use a password shorter than 7 characters.
Then, re-enter your password to verify that you typed it correctly.
The system will now attempt to configure the “Package Manager” (we’ll get to what that is shortly). Provide it with your
proxy information, or leave it blank if you don’t use a proxy, and select “Continue”.
The system will now scan several servers looking for updates and configuration settings.
After that has completed, you will be presented with several options to install server software. Now, listen VERY carefully.
Select OpenSSH server, and press SPACE, NOT ENTER. If you hit enter, the install will proceed without installing the OpenSSH server.
You could install “LAMP server” as well, but I have no experience with this option, so we’re going to install it all with a different
command later on.
The system will now install your selected software, as well as other system components.
Finally, the install will finish. Remove the CD, and hit enter. The computer will reboot. If all goes well, you will be
presented with a screen that looks similar to the following:
Congratulations! You’ve just finished the hardest part. Ubuntu is now installed, and it is time to turn this computer into
a web server.

4. Update Your New Server

Before we go any further, we need to make sure your server is up-to-date. To do this, you need to login. First, type your username
(the one you chose earlier), press enter, and then type your password. As you’re typing your password, you’ll notice that nothing
seems to be happening. Don’t worry, that’s the way it was designed to work. After you’ve finished typing your password, hit enter,
and your screen should look similar to the one below if all went well:
Now, type:
sudo aptitude update && sudo aptitude dist-upgrade
It will ask you for you password, and again, you won’t see anything as you’re typing it. After you’ve done that, it will ask you if
you want to continue. Type “y” and press enter. Your screen will look similar to the following:
Your system will now download and install all the latest updates. This will take a while depending on your internet connection. After
it has finished, your computer will need to be rebooted. To do this, type:
sudo shutdown -r now
And let it reboot. Your server is now completely updated.

A Quick Note About “Sudo”

By now, you may have noticed that all of the commands you have typed have started with “sudo”. This is because they require
administrator privileges, and that’s what “sudo” does. It runs the command (i.e. “shutdown”) as an administrator, allowing it to work
properly. This is also why it asks you for your password. However, after you have typed “sudo” once and entered your password,
you do not have to enter your password again for five minutes. Not all commands require sudo, only ones that modify parts of the system.
Got all of that? Good.

5. Install Apache, MySQL, and PHP

It is now time to install some programs. In order to access your sites from the internet, we’re going to need to install a web server (Apache). In additon to the web server, we’ll
also want a database server (MySQL) and a server-side language (PHP) so that we can run popular applications such as WordPress. So,
let’s get to it!
Installing programs on Ubuntu is a lot different than installing programs on Windows or
OS X, in that Ubuntu will download and install the programs for you with a simple command. This is because Ubuntu has something called
a Package Manager, which manages nearly all the programs on your system. All we have to do is tell the package manager
(called “aptitude”) that we want it to install Apache, MySQL, and PHP. To do this, type the following command:
sudo aptitude install apache2 php5-mysql libapache2-mod-php5 mysql-server
And press enter. Aptitude will download and install of the programs you specified. It will also download and install any
dependencies.
During the install process, MySQL will ask you for a root password. You can set this to anything, just be sure you make it long and secure.
Whatever you do, DO NOT leave this blank.
After that has all finished, you now have a fully working web server. To test it out, first find your server’s IP by typing:
ifconfig | grep inet
It’s usually the first IP returned. In my case, it’s 192.168.177.129. Now that you know the IP, open your web browser and point it
to your server IP. If you see the “It works!” message, then congratulations, it works.
However, we’re not done yet. We don’t want Apache or PHP to disclose any information about themselves, as this information is not needed
by your users and could pose a security risk. First, back up the original Apache configuration file:
sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak
Now open the configuration file:
sudo nano /etc/apache2/apache2.conf
Scroll down (down arrow) to where it says “ServerTokens Full” and change it to read “ServerTokens Prod”
Now, scroll down a little further and change “ServerSignature On” to “ServerSignature Off”
Finally, press Control-O followed by Control-X. That will save the file and exit the text editor.
Now, we need to do the same thing for PHP. First, back up the original PHP configuration file:
sudo cp /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.bak
Open the configuration file:
sudo nano /etc/php5/apache2/php.ini
Change “expose_php = On” to “expose_php = Off”
Again, press Control-O followed by Control-X. Now that the configuration files are updated, restart Apache:
sudo /etc/init.d/apache2 restart
You are done setting up Apache, MySQL, and PHP.

6. Install a Firewall

We now are going to lock down our server a bit more by installing Shorewall, a command-line firewall. To install it:
sudo aptitude install shorewall
By default, Shorewall is installed with no rules, allowing complete access. However, this is not the behavior we want.
Instead, we’re going to block all connections to anything other than port 80 (HTTP) and port 22 (SSH). First, copy the configuration
files to the Shorewall directory:
sudo cp /usr/share/doc/shorewall-common/examples/one-interface/* /etc/shorewall/
Now, open the “rules” file:
sudo nano /etc/shorewall/rules
Add these lines above where it says “#LAST LINE”
HTTP/ACCEPT net  $FW
SSH/ACCEPT net  $FW
Then press Control-O and Control-X. Your firewall is now configured to only accept HTTP and SSH traffic. The last thing we need to
do is tell Shorewall to start on boot. So, open up the main Shorewall configuration file:
sudo nano /etc/shorewall/shorewall.conf
Scroll down to “STARTUP_ENABLED=No” and set it to “STARTUP_ENABLED=Yes”
Press Control-O and Control-X. Now, open the Shorewall default configuration file:
sudo nano /etc/default/shorewall
And change “startup=0″ to “startup=1″. Press Control-O and Control-X. Finally, start your firewall:
sudo /etc/init.d/shorewall start
Congratulations! Your firewall is now set up and protecting your server.

7. Add Your Website to Your Web Server

Now that you’ve got everything all set up, you’d probably like to add a website to it. By default, all of the files Apache serves
up to the internet are located at “/var/www/”. However, you cannot write to this folder. Let’s make it so you can:
sudo usermod -g www-data [YOUR USERNAME]
sudo chown -R www-data:www-data /var/www
sudo chmod -R 775 /var/www
What happened there was you added yourself to the “www-data” group, and made the website folder writable to the members of the “www-data”
group.
Now, you’re going to log into your server using SFTP (not to be confused with FTPS). Some clients that support SFTP are:
WinSCP (Windows, Free), FileZilla (Windows, Linux, OS X, Free),
Cyberduck (OS X, Free), and, my personal favorite, Transmit
(OS X, $30)
Connect to your server using your username and password, and, if your client supports it, a default path of “/var/www” (if it doesn’t,
simply browse to /var/www once you have logged in): (Transmit pictured)
You may now add your files to this folder (/var/www) and they will show up on your server when you browse to it with your
web browser.
Now, you may wonder why we’re using SFTP instead of FTP. Mainly, because SFTP is already built into OpenSSH (which you installed
earlier). However, it is also a lot more secure than FTP, and makes it difficult (if not impossible) for malicious users to gain access
to your login credentials.

8. Make Your Server Accesible to the Internet

Most modern home networks are behind a router these days. Because of this, your web server will not be visible to the internet without
a little work. As I don’t have every router available to test with, I can only give you general directions in this area.
There are two ways to open your server up to the internet: a DMZ or Port Forwarding. The main difference you’ll notice is that with a DMZ, your server uses the
firewall we installed earlier to protect itself. However, with Port Forwarding, your server will be protected by your router’s firewall.
However, before we go on, you’re going to want to give your server a static LAN address. To do that, login to your router, and look for something
along the lines of “Static IPs” or “Static Routing”. After you have given your server a static LAN address, you can do these next parts. Remember,
Google is your friend.
To port foward, there is an excellent website, PortForward.com, that, while ugly, can
help you get the job done for almost any router. The ports that you want to forward are 22 and 80.
To create a DMZ, you need to login to your router and look for something like “DMZ settings”. Once you find it, add your server to
the DMZ, and you’ll be set. Again, Google is helpful in situations like this.
Now, find your public IP, and voila! You can access your server from anywhere as long
as your IP doesn’t change.

9. Managing Your Server Remotely

Beside allowing you to upload files, OpenSSH allows you to login to your server from anywhere as long as you know it’s IP. For Windows, you’ll
need an SSH client. I recommend Putty. For OS X, SSH is
already installed. Simply open up Terminal, and type “ssh you@yourip“. For Putty, choose SSH, and put in your IP, username, and password
when it asks for it. You’ll notice that, once you login, it looks exactly the same as the screen on the server:
You can do anything from here that you would do actually sitting at the server. To logout from the server, simply type “exit” and hit enter.

10. That’s It!

You now have a completely functioning web server. It makes for a great testing ground, and would even be suitable to host websites with fairly
low traffic. There is obviously a lot left to be learned, but hopefully you have gained a little insight into how web servers work.
If you’d like to read more on the topics I covered, here are some great guides:

Saturday, June 12, 2010

The Bits of JavaScript that Every Designer Needs to Know

Although not programmers, every web designer needs to know at least a bit of JavaScript to do decently in one's career. XHTML and CSS are great, but they can only do so much for a web page. Adding the interactivity and/or special effects that JavaScript can allow can not only enhance a design, but also lead to a more pleasant user experience.
Bits of JavaScript

This is not going to be an in-depth post on JavaScript, or anything like object-oriented material. Instead, this post will cover the basics of JavaScript that every designer must know to become better designers. In this post, we'll cover some JavaScript features (and trends) that focus more on user experience and design elements themselves.

Accessing HTML Elements with JavaScript

Once a web page is loaded in plain HTML, it is set. There's no more the browser can do with it to alter the image of a button, the style of a form, or the display of certain pieces of content. What the user sees is what the user gets.
However, JavaScript can play an excellent role in changing up the page after it's loaded. This means we can do image rollovers (changing the image after the first image has been loaded), and we can change the style of a form as the user interacts with it. We can also use JavaScript to do some even cooler things, like show or hide divs for tabbed content.

How to Change up the HTML

So how do you change the HTML of a page after it's loaded to do all the neat things we've mentioned above? First, we must access the element:
1document.getElementById("elementid").HTMLATTRIBUTE = "value";
Once we've gotten a hold of a piece of HTML with JavaScript, we can change its attribute to whatever we like. Our main piece of code here is a built-in JavaScript function: getElementById(). With it, as long as we give any HTML element an id, we can grab it with our JavaScript code. Let's take a look at a more specific example below:
1<img id="slideshowimage" src="flower.jpg" alt="An image of a flower." />
Above is some basic HTML showing an image, with an id of "sideshowimage". We can use the id to style it any way we want in our stylesheet, just as anyone would expect. We've also given our image an alt tag with an adequate description.
1document.getElementById("slideshowimage").src = "bear.jpg";
Now, by using our JavaScript to grab out "slideshowimage" id element, we can change the source of our image. We can also change the alt tag to make it more relevant:
1document.getElementById("slideshowimage").alt = "An image of a bear by the water.";
JavaScript has now altered our code, which with only HTML and CSS was set, to the following code:
1<img id="slideshowimage" src="bear.jpg" alt="An image of a bear by the water." />
Easy enough right? Simple knowledge of this kind of JavaScript action is the start to making pages more dynamic.

Accessing CSS with JavaScript

Accessing CSS styles is very similar to getting and changing the HTML attributes via JavaScript. In fact, it technically is changing an HTML attribute itself: the style attribute:
1<img src="image.gif" alt="An Image" id="myImage" style="padding: 5px; background: #fff; border: 1px solid #ccc;" />
As anyone can guess, we just place style for the HTML attribute when accessing the image:
1document.getElementById("elementid").style.STYLEATTRIBUTE = "value";
CSS
Because the style attribute in HTML can hold so many different values, we must get a bit more specific with our JavaScript code. We have to include "style" then the name of the specific CSS attribute afterwards. To clarify, below are the correct and incorrect ways of changing up the CSS:
Incorrect:
1document.getElementById("elementid").style = "padding: 5px; background: #fff; border: 1px solid #ccc;";
Correct:
1document.getElementById("elementid").style.padding = "10px"; document.getElementById("elementid").style.backgroundColor = "#aaa"; document.getElementById("elementid").style.border = "1px solid #555";
One more thing to point out is that CSS styles can vary a bit from JavaScript's style syntax. For example, notice that in JavaScript, to change the background color we had to use backgroundColor. In CSS, we would use background or background-color. For the most part JavaScript abides by camelCase (first word lower case, and all remaining words capitalized, no spaces/dashes/underscores). However, if any others have you stumped there are plenty of resources online.

Events: Making it All Actually Happen

Just as the word implies, JavaScript events make things happen. We've covered so far the syntax for how to alter code, but we currently have no way to trigger it. Events are what do this.
The onClick event is one of the more popular JavaScript events. It can be applied to any HTML element, and when the described event happens — when the element is clicked — the event inside the quotes is triggered.
JavaScript Event
1<button onClick="changeImage()">Change Imagebutton>
The code above creates a basic HTML button, and uses the onClick attribute for a JavaScript event. When the user clicks the button, the changeImage() function is called.
1<button onClick="this.style.border = '2px solid #555'">Change Borderbutton>
We can also put our JavaScript code directly in our event, without going to an external function. Note that we had to change our double quotes into single quotes within our JavaScript code, to keep our HTML from getting confused on when the attribute begins and ends. We can also use the "this" keyword to access the element we're currently in — no need to grab an element by its ID if we're already there.

Other Important and Commonly-Used Events

onLoad — Used in the tag of an HTML page. The event triggers when the page is loaded. Example: (Calls the sayHello() function right when the page is loaded. Will re-trigger on every Refresh.)
onBlur — Triggers when an element is clicked, and then clicked off. A common use of this is in forms for validation. If a user clicked on field, then clicks away, onBlur can run a validation function or any other piece of JavaScript code. Basically, onBlur triggers when something is clicked away from.
onFocus — The opposite of onBlur. Triggers when an element that can be focused is clicked. For example, a form input field.
onMouseDown, onMouseUp, onMouseOut, onMouseOver — All used with the interaction of the mouse. This is usually how image rollovers are created. When the mouse moves over an image - onMouseOver, the image changes, and then changes again when it moves away from the image - onMouseOut. onMouseDown and onMouseUp are similar, but with actual clicks of the mouse.
Check out Events and Event Handlers for more information on events and a more descriptive list of available events to use.

JavaScript Libraries

While JavaScript can do a lot on its own, libraries are increasing in popularity because they can provide even more features. Of course, what designers like most, is that these new libraries can provide a lot more in terms of design.
JavaScript Libraries
Many designers just jump into learning JavaScript through a library like jQuery or Mootools. However, a step-by-step guide to easy jQuery tabs or something similar will not help anyone as a designer long-term. It is still essential to learn the basics of plain JavaScript before jumping into using a JavaScript library.
While learning JavaScript is a great start, any library requires its own learning curve and has its own syntax or plugins. For a list of all JavaScript libraries, and even features organized by special features and effects, check out the JavaScript Libraries website. Despite the many options for JavaScript libraries, there are two that are most popular: jQuery and Mootools.
Learning how to work with these two, or any other libraries, is a great way to expand JavaScript's capabilities. However, that is for another post. In the meantime, be sure to check out at least the jQuery and Mootools websites.

Conclusion

Anyone can see that JavaScript can be a powerful force to adding interaction and variation to web pages. Yet, even with all we've covered above, we've only touched the surface of what JavaScript can really do — for either developers or designers.
If you'd like to get more advanced, be sure to check out what AJAX, along with JavaScript has to offer, or just get into some more advanced JavaScript topics, from arrays to object-oriented programming. Also be sure to check out some of the resources we have listed above to find out more. Your web applications will be able to go much further with just a bit more learning!

Saturday, June 5, 2010

Check if User Logged in Joomla 1.5 x

Use the code below to check if a user is logged in. This is useful if you want to only show certain parts of your component to registered users and not non-registred users. Have fun.

$user =&JFactory::getUser();
     if($user->id)
    {
    //do user logged in stuff
      }
    else
    {
    //do user not logged in stuff
      }
?>

Friday, June 4, 2010

The Big List of PHP Frameworks

For the start of a new year, it was time to clean out the list of PHP frameworks. A few have fallen by the wayside, but many new ones have been added. It seems that patterns and MVC is still all the rage, but less are professing to being Rails clones, though the inspiration of convention is still strong. There are a wide variety of framework types. From full stack (cakePHP, Symfony) to components (eZ), a bit of both (Zend) and minimalist (LightVC, TinyMVC, Pluf).
To be on the list, the framework needed to be PHP based (4 or 5), and have releases or code updates in the last 12 months. If it was close they have been left in the list. For the purposes of this article and site, the framework needed to have information available in English, though not necessarily as the first language. At this time projects that are content systems but can function as a framework, like Joomla, have been left off. I am inclined to create a new category for them.
A few frameworks are on the watch list, but not included in this update, generally because of a lack of documentation. These are:
  • Nette Framework
  • Orinoco Framework
  • Flow3
  • Recess!
  • Kimura Framework
I am sure that at least 1 active project has been missed. If so, add a comment, and it will be checked out.
Please don't let the comments descend into a my framework is better than yours shout off. If you have comments about a particular framework, then follow the review link add a review with detail, and help out your fellow developer.
Name URL Uses
Adventure PHP Framework adventure-php-framework.org PHP4 & 5
Agavi http://www.agavi.org/ PHP5
Akelos Framework http://trac.akelos.org/ PHP4 & 5
ATK Framework http://www.atk-framework.com/
CakePHP http://cakephp.org/ PHP4 & 5
CodeIgniter Framework http://codeigniter.com/ PHP4 & 5
CoughPHP www.coughphp.com/ PHP5
evoCore evocore.net/ PHP4 & 5
eZ components http://ez.no/ezcomponents PHP5
FUSE MVC Framework http://www.phpfuse.net/ PHP5
Fusebox Framework http://www.fusebox.org/ PHP5
Horde Application Framework http://horde.org/horde/ PHP4 & 5
InterJinn http://www.interjinn.com/ PHP4 & 5
Jelix http://jelix.org/ PHP5
KISSMVC http://kissmvc.com/
KohanaPHP http://kohanaphp.com/ PHP5
Kolibri https://launchpad.net/kolibri PHP5
Konstrukt http://konstrukt.dk/ PHP5
LightVC www.lightvc.org PHP5
Limb3 http://limb-project.com/
Lion framework http://www.lionframework.org
Madeam PHP Framework http://madeam.com/ PHP5
Maintainable PHP Framework http://framework.maintainable.com/ PHP5
OpenBiz http://www.phpopenbiz.org PHP5
P4A http://p4a.crealabsfoundation.org/ PHP5
PHP on TRAX http://www.phpontrax.com/ PHP5
PHPDevShell http://www.phpdevshell.org PHP5
PHOCOA http://phocoa.com PHP5
PhpPeanuts http://www.phppeanuts.org PHP4 & 5
PHPulse http://www.phpulse.com/ PHP5
Pluf http://www.pluf.org/ PHP5
Prado Framework http://www.pradosoft.com/ PHP5
Qcodo http://qcodo.com/ PHP5
QCubed http://qcu.be/ PHP5
PHP Work QPHP http://phpwork.org/ PHP4 & 5
Sapphire http://silverstripe.org/sapphire PHP5
Seagull Framework http://seagullproject.org/ PHP4 & 5
SOLAR Framework http://solarphp.com/ PHP5
Stubbles http://www.stubbles.net/ PHP5
Swat https://code.silverorange.com/wiki/Swat PHP5
Symfony http://www.symfony-project.org/ PHP5
Tangra Framework tangraframework.net PHP5
Tigermouse http://tigermouse.epsi.pl/ PHP5
TinyMVC http://www.tinymvc.com/ PHP5
Xajax www.xajaxproject.org/ PHP4 & 5
Xataface http://xataface.com/ PHP4 & 5
Yii PHP Framework http://www.yiiframework.com/ PHP5
Zend Framework http://framework.zend.com/ PHP5
ZOOP Framework http://zoopframework.com/ PHP4 & 5