up vote 7 down vote favorite
6
share [g+] share [fb]

I have been building PHP-based web sites for many years, and lately it seems I'm discovering another interesting new tool or method once every few weeks. This begs the question - what is the current state of the art in PHP development stacks for the seasoned coder? I'm specifically interested in the following:

  1. High-performance web server
  2. Database
  3. MVC framework
  4. Build tool
  5. Revision control
  6. Continuous Integration
  7. Automated testing
  8. Non-persistent caching

I'd like to optimize my stack for scalability and rapid development. I'm not looking for personal preference here, I'm looking for real, quantifiable reasons to pick this-over-that.

Update

So this question was closed? when this, this and this are fine? This is Programmers, not Stack Overflow. You are being arbitrarily restrictive.

link|improve this question
1  
"scalability and rapid development" Other languages might be more suited for those criteria – Raynos Jun 30 '11 at 12:22
I don't know much of PHP but I would imagine if you want a full-stack you should look at the full-stack PHP frameworks like CakePHP (very Rails-like, basically a clone, or was last I checked) or Symfony (not quite as "Rails for PHP") and not the "DIY" type of frameworks. – Wayne M Jun 30 '11 at 12:58
But full stack applications are generally full of annoying shit you don't need. Bloat, feature creep, bad design, etc. Making your own stack is superior (but requires more effort) – Raynos Jun 30 '11 at 13:03
5  
This format of "question" (that's really a discussion) doesn't work well with Stack Exchange. Please review the FAQ to see what sort of question is on topic. – ChrisF Jun 30 '11 at 14:12
2  
@WayneM I agree a full-stack framework is better for Rapid development but not for scalability, it actively hurts scalability (Rails is a good example). – Raynos Jun 30 '11 at 14:30
show 1 more comment
feedback

closed as not constructive by George Stocker, Walter, Mark Trapp Jul 1 '11 at 17:41

This question is not a good fit to our Q&A; format. We expect answers to generally involve facts, references, or specific expertise; this question will likely solicit opinion, debate, arguments, polling, or extended discussion. See the FAQ.

5 Answers

  1. postgres (if heavy relation are needed), noSQL variant if not.
  2. Lithium, Fuel, Zend
  3. Git
  4. Hudson
link|improve this answer
feedback
  1. nginx (PHP via fast CGI) all the way - just test it yourself

  2. MySQL (but this is rather a matter of budget and preferences)

  3. Definitely Symfony2 - it provides MANY built in cache strategies, very good ORM - propel and last but not least - it's ridiculously easy once you write a project or two in it. I'd say it's a perfect choice if you keen on scalability.

  4. Phing

  5. I've never used GIT before, so I can only recommend SVN.

  6. -

  7. PHPUnit (built in Symfony2)

  8. Memcached (built-in support in Symfony2, too :) )

link|improve this answer
feedback
  1. For static content - lighttpd.

As for dynamic part of the website, nginx or Apache - I've used both and I prefer Apache simply because I'm more familiar with it. Then there's Node.js that simply blew my mind from the moment I used it. I'm experimenting with it at the moment, trying to build a website without underlying scripting language. Node.js also performs blazing fast, good job Ryan Dahl and V8 team!

  1. Database.. my choice is MySQL. Now why MySQL - because I find the fact that you can plug in storage engines as you need them an awesome feature. Why? Because you can modify the DB to suit the needs of your application.

Need a fast fulltext search engine that's not MyISAM? Install Sphinx! Want a better performing transactional engine? Install Percona's XtraDB. Is your application in need of handling large data-set while maintaining performance and preserving storage space? Use TokuDB. New buzzword in town is NoSQL? Beat them all down with HandlerSocket for MySQL. Sidenote: NoSQL solutions don't guarantee data is written to the disk so I'd be careful about where I use NoSQLs.

  1. As for frameworks, that's a matter of choice really. Some are really well known (CodeIgniter, Symfony, Kohana, Zend Framework) but lately I ran across fuelphp and I really liked it. I haven't spent much time on it but it seems promising.

  2. Phing

  3. Git - after trying CVS, Subversion and Mercurial (tho Mercurial is good) - I still prefer Git. Reasons - I have no reasons except subjective ones towards Git (over Mercurial).

  4. Nothing to mention really.

  5. PHPUnit.

  6. Memcached. Fast. Easy to work with. Tons of libraries for almost any language for speaking the memcached protocol (even for Node.js). Some say Redis, I myself haven't used it but I read this blog that didn't think highly of it. On the other hand, I heard about Membase - it seems promising.

link|improve this answer
What advantage does Lighty have over nginx for static content? – Jeremy Jun 30 '11 at 17:20
I've never mentioned that one beats another. I've used Lighttpd before I used nginx and the practice of serving static content with lighty remained while I started replacing Apache 2 with nginx. Honestly, I have no idea if lighty > nginx when it comes to serving static content. – Michael J.V. Jul 1 '11 at 9:00
feedback
   1. nginx
   2. postgres (with doctrine2) if heavy relation are needed, noSQL variant if not.
   3. Zend Framework, Symfony, ...
   4. Phing
   5. Git (you will love merging if you came from svn)
   6. phpUnderControl or Hudson
   7. PHPUnit
   8. memcached, xcache, Zend Server Caching

1, 2, 3 and 8 are depending on the project and their requirements i would say.

link|improve this answer
feedback

To elaborate (and kick off the discussion), my current setup is:

  1. nginx (with Node.js doing some of the heavy lifting)
  2. MySQL with an Active Record layer (but considering MongoDB or CouchDB)
  3. Codeigniter
  4. Phing
  5. Subversion (but considering Mercurial)
  6. Nothing yet (but considering phpUnderControl or xinc)
  7. PHPUnit (but considering adding Selenium)
  8. memcached (but considering Redis)

I am sure most of these can be improved on both scalability and rapid development, so feel free to comment on each element separately.

link|improve this answer
-1 for mysql. it just sucks compared to postgres. – Denis Jul 5 '11 at 22:54
feedback

Not the answer you're looking for? Browse other questions tagged or ask your own question.