Which web application framework to use with existing database? [closed] - php

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
My company wants to start mobile web application development, as an addition to our own ERP software. We do not have any expert knowledge about this, that is why I have to research which tools/frameworks/languages we are going to use.
We already have an existing database, and want to be able to quickly build an extra simple web app, to deploy some handy mobile functionality for our customers. For example, we want to start with making the agenda in our software available for mobile/tablet.
We want to set it up like the following:
we host the web application internally
the web application remotely accesses to the customer's database (Advantage Database Server, can be query'd remotely through JSON), which can also be multiple customer's databases
We develop our desktop software in Delphi, and therefore are not experienced web developers. A framework should meet the following needs:
IDE available, maybe some other handy tools
Preferably small learning curve
Good documentation/support
suited for mobile web development
suited for simple and small web apps, there won't be any need for developing web apps with lots of functionality (most likely aimed at being able to perform two or three tasks)
We will be making a choice for a direction for the coming years, so any possible guarantee about the framework being continued for a period of time is also nice.
So far I've learned that we most likely won't need an ORM, since we definitely won't change our database structure to suit the web app.
So my question is:
which frameworks should I take a closer look at, and which can already be ruled out?
BTW: I'm not looking for an answer for a designer's framework such as Sencha Touch, JQueryMobile etc.
Thanks in advance!

We develop our desktop software in Delphi, and therefore are not experienced web developers.
In that case, I think you are solving the wrong problem:
Hire a team lead who is (even if it is just as a contract role for the first project or two). You need to have someone on board who is aware of all the technologies involved (HTML, JavaScript, CSS, HTTP, SSL) and how to use them appropriately and securely.
Let them determine what tools the team uses — they will have to support the team as it learns to use them.
(If I was going to name a framework, it would be Dancer as that meets most of your requirements)

I have experience with many PHP frameworks (Zend, CakePHP, Kohana, CodeIgniter, Akelos and 2 in-house solutions). Also having some experience with Python's Django framework and lot's of experience with PHP Yii framework, I can recommend Yii both hands up. Even though every robust framework has quite some learning curve, I can say that Yii was the easiest to learn and I was left with most pleasure developing with it.
It is PHP 5 framework, event driven, with support for callback closures and other PHP 5.3 features.
Exceptionally well documented
Extremely fast, due to the fact its component based - you can use only few basic components that you need, also it doesn't have hundreds of abstractions like in Zend so you won't get lost in object references
Very friendly community - I have never been left without an answer if I explain my question well
You can use Active Record ORM models but this is absolutely your own choice. You can go with its DAO (basically PDO wrapper) and write plain SQL. I would rarely do that. Using AR in most cases can save you lots of work and at least in Yii it wouldn't mind any kind of table schema. So I don't see a valid reason to not use AR except for complex queries.
It is themeable, both simple views and widgets/modules - I've been amazed how easy it is to make a mobile version of a website just by creating a new theme.
It has great support of i18n - its easy to make a multilingual web applications if at some point you need it
Both Eclipse PDT and Netbeans 7 for PHP are great web development tools that have some additional support for Yii (though with them it was easy to develop such web apps even before their Yii support).
It's comes with jQuery for it's core widgets for common tasks, yet you are free to use any JS framework you prefer (you probably would never use most of those core widgets for mobile too much anyway).
There is even more to say, but go ahead and check its website:
http://www.yiiframework.com/
No matter what framework you choose, most of the work for a successful mobile web app is left for you.

Check out web2py, as it is probably one of the easiest to set up, learn, and use. You can use it with any IDE or editor, but it also includes its own web-based IDE and administrative interface for application management and basic editing (see demo). It has great documentation, and there's a very active and response mailing list if you need any help.
Rather than an ORM, it includes a database abstraction layer (DAL), which is a little closer to SQL and should provide some extra flexibility (it also includes some scripts to auto-generate web2py DAL models for existing MySQL and PostgreSQL database tables). It includes jQuery, and there's a plugin for jQuery Mobile.
web2py has been around for about four years and is still very actively developed, with new releases every month (yet it has maintained backward compatibility of the documented API since the beginning, and will continue to do so).
InfoWorld recently published a review of six Python web frameworks, including web2py:
Overview/Comparison
web2py
In-Depth

Related

What PHP framework to choose for a Senior Project [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
I am working on my senior project, and the topic that we agreed on was a CMS that similarly to Drupal would make things easier by providing robust administration capabilities
Some of them include:
Content type and data field creation (CCK)
Views Creation
complex user management (tasks and roles)
the ability to add third party modules later on - hooks
templating capabilitites
Now the thing is, I would have to show sufficient knowledge and understanding of software architectures, and the development process. I will not start from scratch, for sure, but I can't demonstrate Drupal in my documentation either
I would like to use a framework that one could build skills on, one that is not overly complex, and one, that will still make me write code - the senior project is about my work, not about the work of the php community
I started with Kohana, yet, I didnt like it very much. Its poor documentation, and the frequent changes in the code base made me stop.
I am thinking of something very small and sweet, something that doesn't show up in every step and say : "hey you know what, I can do that better than you" Something like CakePHP, maybe.
I know that more or less, all the code I need is available out there. However, the point here is just a little bit more academical.
Any suggestions ?
You should make Kohana your choice. I don't understand your reasons for avoiding it though.
There are two Kohana versions at the minute, versions 2 and 3.
Versions
The current release for the 2.* line is: 2.3.4 and 2.4 is to be released when the documentation is done and dusted. 2.4 is an API changing release.
The current release for the 3.* line is 3.0.3 and is API frozen until the next major release (many months away).
Documentation
People complain about the Kohana documentation, which I believe is unjustified. It might of been true some time ago, but things have changed quite a lot. Kohana 3 has fantastic documentation which can be found here and has an extensive 3rd party wiki at kerkness.ca.
The documentation for the 2.* line might not be as good but it's certainly enough to get you started at least. When 2.4 is release it'll be as good as Kohana 3s
Notes on CodeIgniter
Just before you run into using CodeIgniter you should be aware of some of the idiotic design mistakes they've made.
They originally decided to disable the use of $_GET by running $_GET = array() in one of their core files. They then decided to turn this into a configuration option $allow_get. I don't understand it at all.
Staying with PHP4, they've re-implemented a fair few methods not found in PHP4. I wish they'd just move on, heck; even their users have started writing plugins and libraries in PHP5.
Sessions support is absolute crap. People still have problems with it daily. Want to have different session drivers? (native, database or cookie) No, you only ever get one choice.
Some of the points from Alex Mcp aren't really valid either.
Small File Size (download is 2.1MB, but actual files for use ~1.5MB).
Kohana is a couple of MB too, but this should never be a reason to choose a framework.
Libraries and helpers called on demand -> minimizes memory usage
This is where CodeIgniter sucks. In PHP5 you'd create a static method and call it like so Class::method();.
I used to hate the CodeIgniter way of $this->load->helper('form'), etc ...
Ask yourself, who's getting in the way now?
Great docs. Not a big fan personally of the drop-from-top effect, but they're written in readable English with good examples
See above.
Extensible - good number of libraries written by the community
Kohana has hundreds of extensions too, http://dev.kohanaphp.com/projects/ & http://github.com/search?q=kohana&type=Everything&repo=&langOverride=&start_value=1
CodeIgniter allows you to extend classes by using a special "My_" prefix to your classes. Kohana does this using a cascading file system, so a file named "form.php" in your application is automatically going to override the "form.php" in the systems directory.
If you really want something that is not going to get in your way and help you rather than hinder you then Kohana is the way to go.
Just my 2cents on the matter.
I totally enjoy CodeIgniter. It doesn't have the magic functions of CakePHP/Rails, but it automatically comes with a good MVC setup and a good basic library for forms, ActiveRecord implementation, dealing with POST data sanitization, and other nice things that I just don't prefer to deal with every project.
Their intro video on making a blog is all it took me to get hooked. Good syntax, good practices... Can't recommend it enough for your size/style project.
EDIT
As noted by commenters, I'll line up the pluses as bullet points:
Small File Size (download is 2.1MB, but actual files for use ~1.5MB)
Libraries and helpers called on demand -> minimizes memory usage
Great docs. Not a big fan personally of the drop-from-top effect, but they're written in readable English with good examples
Extensible - good number of libraries written by the community
Encourages MVC architecture
Good built-in security features
Well, personally I have tried Symphony, Zend Framework and Kohana. From those three, Zend Framework made the best first and also the best second impression on me. I have been using it for over a year now (almost two years I think) and I have coded several custom content management systems for my clients (each specific to my client's website needs).
Further, I'm currently working on my bachelor's project which is also about building a content management system of a type and I'm using Zend Framework for it.
Symphony was also great but I had two issues with it.
In Windows, executing the Symphony commands (for example for creating a new project with the default directory structure) took way too long (it always took like 10 seconds before the command would start executing). This, I believe, was a known issue but it remained unaddressed for a long time.
The documentation (at least at the time I tried Symphony) was inconsistent and there were unfunctional code examples and other errors and that could get pretty annoying.
Zend Framework has a very good documentation so that's what really persuaded me to stay with it, plus there is a very helpful community here at StackOverflow that helped me solve many problems.
I also like the fact it is not developing at such a rapid speed as Kohana or Symphony. I'm kind of a guy that like to get used to a certain way of doing things and I don't like changing my habits every three months.
Have alook at CodeIgniter: Allows you to implement clean MVC architecture, without requiring a book of instructions. The community is great too, so you will not be alone.
In addition to the choices suggested above (CakePHP, ZendFramework), I'd also suggest you take a look at Symfony

What framework(s) would you suggest for a strong, extensible dev platform? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
First, let me apologize for Yet Another Framework Question. But I think this is different enough from the usual "What framework should I choose?" to warrant it.
Here's my situation: For the past year I've been using a custom framework. It's been used on everything from small CMS's to larger sites and even a mid sized social network. It's worked great but I now see its limitations. So, I've decided to switch to a 3rd party framework. The simpler frameworks (CI, Kohana, Cake) seem too inflexible from what I've heard - so this led me towards ZF. But, I've also heard that ZF may be too flexible and thus hard to work with. What further complicates this is that I'm looking for a one-size-fits-all solution; I need a setup that works on small projects to very large projects. I am the main developer, but I need my partner to eventually be able to learn the system and help with the less complicated programming tasks.
I've researched Doctrine and I love it. So I'm leaning towards Symfony (with Doctrine) as the main framework with ZF to fill in the gaps. Plus, I need the ability to add my own pieces to this platform parallel to any 3rd party libraries. I hope this will provide me with a solid, extensible platform, as we really can't afford to be switching out frameworks every few projects.
I'm looking for advice from others who have been in the same situation as I am in now. Any advice would be greatly appreciated.
Edit: I've posted my solution below in hopes of helping other people in the same situation
After some research I've decided to go with Symfony. Here are my reasons:
Less verbose than ZF
Seems very customizable due to usage of YAML files (yet I never feel overwhelmed by them)
Autoloading of custom classes doesn't require any extra work like in ZF (albeit it's not hard to set up in ZF)
The developer toolbar is great, and they're adding some nice features to it in ver 1.3
The ability to use pieces from other frameworks (ZF, eZComponents) makes me feel confident that I won't have trouble finding what I need
Comes bundled with Doctrine and is very easy to set up (in fact Doctrine will become the default ORM in ver 1.3)
It seems like there's a much larger community for Symfony. Google "symfony tutorials" versus "zend framework tutorials" and you'll see a massive difference in the number of results
Plenty of documentation: tutorials (the Jobeet tutorial so far is very good), API references, and a more human readable description of the framework and its underlying principles
Yahoo! has used it for a few of their own projects - it's nice to see a Big Name back a framework IMHO
Edit: For the sake of hopefully helping others in the same situation, here are some things I don't like about Symfony:
Does not follow the PEAR naming scheme (ZF does)
Internal classes begin with "sf". This is contrary to the practice of capitalizing the first letter of the class name
Variables and functions are written_like_this, yet class methods are camelCased - this seems sloppy to me
These are all cosmetic issues though; things that bother me because I like to do things my way. I realize that whenever you use third party software you must be willing to make some sacrifices.
ZF is certainly a nice framework, but I feel using Symfony as the primary framework and extending it with pieces of ZF is the best choice for me and my team.
Edit
It's been 2 years since originally posting this, and since it's still getting hits I thought I'd give a quick update. I probably built about 25 - 30 projects using symfony 1.x in the last 2 years, and I'm very happy with how it performed. As a full stack MVC framework, partnered with Doctrine, it handled almost everything I threw at it. And whatever it couldn't handle, it was easy to add my own custom code. In fact, that's what I love most about symfony - how easy it is to extend. I ended up building a bunch of plugins and Doctrine behaviors that greatly reduced development time. And the admin generator tools have been a god-send. I'm still using symfony 1.4 for a few projects here and there, but have decided to mainly focus now on using Symfony2. It's a completely different beast than symfony 1, but I really appreciate its architecture. More importantly, it seems even easier to extend than symfony 1.x. I do miss some of 1.x's features, but that's the sacrafice you have to make when switching frameworks.
I like using ZF because of strong conventions. You can be sure, that everything will be as you expect it. Class names, function names, variable names, directory structure, ... all of it. It really speeds up the development if you stick to it. If you adapt it it's more like looking into your own code, when checking the ZF internals ;)
Let's be honest. ZF is not fast. Not as fast as Nette, CodeIgniter, etc. But the difference is that there is a class for everything. And if there is not, there is a class you can extend or interface you can implement.
All the other frameworks try to gain on the "wow" effect (blog in 30secs, twitter in 2 hours, etc). But when develioping a real life application, you realize, that it's the use at will, flexible and extensive architecture, that you need.
Zend Framework: Huge, Flexible, Modular.
I'd use only if am building a enterprise big ultra system.
But, I'm using Yii Framework and I like it.
Because: Very Fast, Simple, Widgets (easy to reuse component, this is very nice).
Yii it's easer to use, because is not a enterprise framework, and have all Basic features you really need in most cases.
*
EDIT: Now that I nearly understand HOW
to improve the ZendFramework using
your own code (as asked here Adding
3rd Party lib to Zend and here
Using 3rd Party lib within Zend),
I switched back to ZendFramework. I
currently design my application and
each day which I work and test
anything with ZendFramework it gets
more and more familiar and it easily
quickens my developement. My advise:
Use ZendFramework.
*
I have currently the same problem:
My story:
I was using CakePHP until I wanted to expand my project's size.
CakePHP was not as flexible as I wanted it to be.
So i tried to use ZendFramework.
The very first time I read the 'QuickStart' guide, i was a little bit afraid of having that much files for a simple guestbook application.
After a time of 'playing' with the ZendFramework I decided to use ZF as a 3rd party lib in my own custom framework.
The problem is, IF you use Zend's MVC components you might be forced to use 30% of the whole framework, because the MVC components are one of the biggest part of the ZF.
I mean if I use that much of a framework WHY shouldn't you use the rest, too?
After that, I decided to write my COMPLETE custom framework without using ZendFramework as 3rd party lib.
Now I am sitting in front of mountains of papers, full of sketches about code design.
I will keep you up to date about my further decisions.
I honestly think it really depends on your style. There's no end all be all answer to this question.
ZF relies heavily on classic and proven design principles. It's also very extensible, but requires more "configuration" than "convention". I personally do not trust 3rd party code by nature, so I'm a fan of more verbosity, for the sake of being more familiar with the technology I'm working with. But that's just me.
I've also used CakePHP successfully and two other frameworks proprietary to a company I worked for with great success. They're all trying to do similar things, just pick what feels best for you.
I've personally used CakePHP successfully for both large and small projects, however it is often difficult to make it budge the way you want. My reasons for using Cake continue to reside in the fact that the community support is top notch, the security updates are often, and they do not force meta-packages (such as unit testing) upon you (although this is bundled, you can just bin it if you're not interested in using the built in package).
Altogether, it's made a nice system for me over the past few months, however I have heard time and time again that Symphony is fantastic, so you may perhaps be on the money with your first thoughts. With NetBeans support for Symphony in the pipeline, I may too find the need to switch before long.

Which PHP frameworks are used by corporations?

There are several questions about PHP frameworks, but I'm curious as to which one(s) are used in the commercial world when developing web applications with PHP. At my first web-based job, they didn't have a framework for the PHP codebase. Is this common when dealing with PHP? If not, what frameworks to companies producing a product (either a site that provides a service of some kind or a web-based product that can be purchased) using PHP tend to use?
Is this common when dealing with PHP?
In my experience, unfortunately it is. This is of course a gross generalization, but people who tend to learn PHP as their first programming language don't learn the essentials of maintainable software development and often don't really know how to write good code. I think this is a failing of the PHP community, where historically most learning resources don't emphasize good practices (probably because the authors didn't know any better!). You can of course write good code with PHP, as long as you understand underlying programming principles.
Companies will often start out with a hap-hazzard code base of PHP scripts that get re-used and gradually extended from project to project (often without source control!). The companies that know what they're doing and take it seriously will evolve this into some kind of in-house framework, or I have often found they'll move onto something without the historical crapness of PHP, like Django or Ruby on Rails.
If you're just starting out, there are several decent MVC frameworks that will form a good base for all your developers to learn and use. In no particular order:
CakePHP
CodeIgniter
Zend Framework
There are of course others as well.
That said, as always it depends on the project. Sometimes a framework either won't make sense or will be overkill, othertimes you're better off using a pre-built product (like a CMS) and building extensions to it.
Most frameworks are strongly focused on the presentation layer. Now, "corporate" is of course a rather vague term, but I assume you mean for more typical IT tasks, such as accounting, CRM etc. For these tasks, the presentation layer is a much smaller part of the entire application. Not only does this make said frameworks less important - it actually disqualifies them somewhat, since you don't want the restrictions on your model layer, that they impose.
I think it gets more and more common to use a framework. A few years back most programmers developed their own framework. But the cost to train a new employee for such a framework gets higher and higher. Therefore many companies are moving now to well known frameworks.
I guess that Zend is currently the most used Framework in the corporate environment. One reason is that it does not give you any restrictions on the model layer.
I can not predict the future but I guess that Flow3 will be used in the future too. It is the new Framework behind Typo3. And many Typo3 developers (web designers) who need to write web applications will probably use Flow3 then.
In last two three places I've worked the company had their own (private, built in-house) framework.
According to a PHP Framework Popularity at Work survey by Sitepoint in 2015 (7554 survey participants) the five most used frameworks are
Laravel (22%)
Symfony2 (14%)
Nette (9%)
CodeIgniter (8%)
Yii 2 (7%)
Furthermore survey results indicate, that
5% use a company internal framework,
3% use no framework at all,
3% use a CMS for everything,
1% use a simple MVC framework.
There seem to be continent specific framework preferences: In America and Asia, Laravel seems to be the framework of choice (except for Russia: Yii 2), whereas in Europe you'll find more Symfony2.
(Be aware that this is just referenced from one source -- see links above.)
The only enterprise-level framework I can think is Zend Framework. CakePHP, Code Igniter and others are only focused on RAD development.
Having experience with CI , yiiframework and calephp (not much, really) my opinion is that CI is not flexible as ohter 2, so I do not recommend it on larger-scale projects.
Anyone who disagree, just can try a demo project with cakephp and Yii and he will see how things are easier with them as crud,form validation etc.
Of course all have their disadvantages :)
recently i talked with a CTO of a company, offering a e-lecture solution and we talked about PHP for a while ... we both agreed, it is not the best language for rock solid solutions, but he pointed out the symfony framework, they used just before moving to java ...
also, flow3 mentioned by raffael is quite powerful ... most interesting thing to me is, it brings AOP into PHP ...
greetz
back2dos
You may want to look at www.flow3.org, it's a pretty comprehensive approach to PHP application frameworking and is rapidly approaching its first mainstream Beta release.
I'm not sure if PHP has gone into the enterprise market in the US yet but when i worked in a corporate office the language what they use is Microsoft .NET.
PHP is yet to enter the corporate world IMO. It is popular with the hacker world and maybe micro and small software/web companies.

Is Drupal ready for the enterprise? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 9 years ago.
Is anyone out there using Drupal for large scale, business critical enterprise applications?
Does Drupal's lack of database transaction support dissuade potential users?
Are there any other lightweight web-frameworks based on dynamic languages that people are using for these types of apps? What about Java portals such as JBossPortal or Jetspeed as an alternative or a Drupal + J2EE hybrid architecture?
Answer One: Yes
internet_search://"drupal in the enterprise" <- use this exact phrase
Drupal "Success Stories"
Student Activities Supports 170 Drupal 6 Sites at Texas A&M
Answer Two: It depends
There are surely some who have concerns about this issue. Drupal's database support and schema have been subject to some scrutiny and criticism over its evolution. That is likely to diminish if some or all of the planned enhancements make it into Drupal 7. This is the one out of your three questions that cannot be easily and definitively answered by searching the internet.
Drupal 7 Database Plans
Drupal 7 Database Update
Answer Three:
Open Source Content Management Systems
Answer Four: (Update: 2010-02-03 11:25:04)
see also: https://stackoverflow.com/questions/1715811
I recommend against Drupal due to its inefficiency. Yes, it can do almost anything, but it does it slowly. For any but the simplest of sites, drupal will not build nearly as efficient a chain of queries and pages as a custom built site will. Something that can be done by hand with two SQL joins and a single PHP loop is likely to be handled by Drupal with five joins and a nested loop.
That said, I love Drupal and will continue using it in non-enterprise environments, and I cannot recommend any other CMS that does not have similar problems when presented with complex tasks.
It depends on what you mean by "Enterprise." It's a horrible choice if you're building a supply chain management tool, for example.
But if you mean "extremely high traffic sites" or "Sites with complex approval workflows before content goes live" or "sites that we can scale horizontally", then I'd say yes. There are quite a few very large scale Drupal deployments out there, from SonyBMG's suite of artist web sites to newspapers and magazines.
Yes, but...
Word of Caution:
Many community-based themes are coded sloppily, which completely negates the efforts Drupal has made to make their CMS secure. Worse still, common practice in theme development is to find a theme like the one you want and customize it. Since code of these themes is shared so freely, a single sloppy mistake can affect many other themes derived from it.
If you go with Drupal (or any other stock CMS), don't just hire some joe-shmo designer to theme it for you. If possible, hire one contract for the visual theme and a php developer to actually build the theme from PSD's
I was the lead developer behind the recently relaunched American Diabetes Association - http://forecast.diabetes.org/ - rebuild in Drupal. At launch, we were getting about 250k uniques/month and it's been growing significantly. While the criticism for "inefficient query chains" is mostly accurate, there is a reason for that. The Lazy Loading pattern is used as frequently and often as possible. To streamline the process a bit, you can always configure Drupal's caching, there are some addon modules, and then you could go with something like APC or memcached.
Regardless, the trade off of being easily extended, customized, and - in normally less than an hour - having something to show the customer and allow them to load content, is pretty significant.
Having helped to create drupal sites for Popular Science Magazine and soon another magazine (which I'm not sure if I can name yet?), I think it's quite suitable. We've also done an intranet site for BMW and Pregnancy.org.
It may not be perfect yet, but it's quite suitable.
My company is using Drupal to build the public facing website for one of the largest universities in the state that I live in. So far we have been pretty successful with it.
We use concrete for a bunch of other clients as well and I think we're generally happier with concrete although it is not nearly as wide spread used as Drupal.
Drupal is used all over the place and has a very large community supporting its development. There is also a large for hire community if you want a custom drupal component.
I've worked on a Drupal project with about 1 million nodes. We added transactional support and it wasn't too hard. You'll need to patch the core of course but this shouldn't be a major concern for an enterprise application with good support and documentation. I was working as the observing pair programmer on the transactional support. I think it took us about a day.
Edit:
I've been working as a Drupal Developer for a few years now. And recently, I have revised my position on Drupal in relation to best practices and enterprise application.
I don't think Drupal is particularly suited to the Enterprise space because:
Drupal's testing framework is too cumbersome (a domain specific language would be great)
There are too many contributed modules of poor quality
Drupal's content model resides partly in code and partly in the database schema
Drupal's developer community have become focused on sexy software rather than quality software
Drupal doesn't have mature developer tools (drush is changing that) or a development environment built in.
Drupal Development is browser and UI centric.
The centralized nature of Drupal.org/projects, CVS and Drupal's policy on Contrib Projects inhibits the evolution of individual software projects
Also: The enterprise Drupal Application I was once working on has now been ported into Rails.
I've used Drupal to build a combined public-facing site for an organization that also included internal features for employees such as meeting organization and internal document management. Mostly it worked out well and they are happy with it, and very happy not to have to manage two separate sites and / or something like sharepoint.
The one place I found Drupal to be a little lacking is in its LDAP support. You can use it just fine for authentication, but there are some bugs in the modules that try and bring LDAP groups down as roles, if this worked more seamlessly I would be completely on board with the "Drupal is enterprise-ready" sentiment, but it's not there yet.
That said, you can do a lot with content types and taxonomy-based access control to customize what content is available to what roles, something that is a requirement for most intranets.
For transactional support and other significant scaling improvements consider Pressflow http://fourkitchens.com/pressflow-makes-drupal-scale
Drupal is great, but it is very inefficient. But, as I keep telling my frontend developers, this is the payoff for being flexible and highly modular.
We are currently creating a Druapl site, which I consider enterprise (http://stackoverflow.com/questions/161991/what-makes-an-application-an-enterprise-or-enterprise-level-application). It has about 40 content types, 15 user roles, integrated with Ubercart, interfacing with external APIs for membership verification etc. etc. Our development servers struggle some times, but on our staging hosting, it is lightening - fast as any similar sized site.
Make sure any bespoke code is well developed, use Drupal's performance features before release and ensure quality hosting is used.
If you will see the list of sites here http://buytaert.net/tag/drupal-sites and here http://www.drupalsites.net/, you will see that Drupal is being used to build small, medium and large scale sites!
I too have issues with Drupal's slowness, but it seems that with top notch developers you can get around it.
It's a moderately difficult tool to make a company website with, its a very difficult tool to make an enterprise-application with. But when it comes to open source LAMP CMS's, there is no real competitor.
We use Drupal for the main corporate brochure and community areas of our website at http://www.tableausoftware.com
It has allowed us to add on a multitude of plug-able features and customize UX to meet our needs far beyond what we could do with either a more bare-bones platform like rails or django better suited for apps.
We still have room to grow for performance tuning, but we have millions of hits a year without a problem. We've made use of Solr indexing to improve search and allow faceted integrated search for site content and knowledge base and support forums. Additionally, our team has been empowered to create content and curate the site without development hassles.
Lastly, with recent community focus on tools like Features and Context we've been able to manage more risk free deployment and workflow/environment management in addition to improved site architecture.
Drupal is great. I've used it for several mid-scale community and personal websites, and so far is giving us very good results. I would support the comment pointing at the over-done or even low quality of the templates of many of the website's we've looked at out there, but then, just hire a good coder/designer that does this nicely for you.
As for the memory issues there's tons of articles out there that would help you in tweaking Drupal's database management. There's even a module called Drupal Tweaks that does this automatically for you. Here is an excerpt from its project page:
... provides following functionality:
Enabling and disabling modules through autocomplete suggestions
Quick search for the nodes, users, etc. to make some operations
clear the cache and rebuild permissions from one place or do them both at once
Overall we are quite happy so far with Drupal for quick development of the most varied websites and corporate Intranets.

Does anyone write really long, complex PHP apps? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
It's hard for me to imagine a php script that is more than a few hundred lines of code. It seems that, for a non-persistent environment, web-based scripting is usually done is small chunks and used for the purpose of delivering a portion of a website to the end user. I'd like to know if people are developing any type of large, or persistent, or complex apps with php, and what is it exactly you are working on. I've only done small projects for small websites, so I don't know what can be accomplished on a larger scale. It would also be nice to know what libraries you are using, and what other technologies you are integrating with. Please enlighten me so I can start to dream of bigger things!
I would look at some of the well-known open source web apps that use PHP to get a good sense of what can be accomplished, and how PHP is used in each of them. The advantage is that since they are all open source, you can actually look at the PHP code to see how various functionality was implemented.
Some good examples to look at include:
WordPress
TextPattern
MediaWiki
PhpBB *questionable code quality
SugarCRM
Joomla
Drupal
Also look at some of the popular frameworks to see what kind of functionality they offer (this should give you a good sense of what types of things PHP is most often used for):
Zend Framework
CakePHP
CodeIgniter
Symfony
For my day-job we run everything in PHP - our front-end website, our backend for agents and employees, inventory, server control interfaces, etc. These are everything from spiffy new AJAX-enabled Zend Framework apps to legacy code that we haven't ported yet. On top of that we use things like Mantis (bug tracking built in PHP), Mediawiki, and phpMyAdmin.
The only thing that isn't PHP are vendor apps because vendors love Java. The one ASP.NET application we have was actually abandoned by the vendor during the project (not really a knock against ASP.NET, that app was just the perfect definition of a runaway project and would have failed no matter what language it was written in).
With mature frameworks like Zend Framework, CodeIgnitor, and CakePHP creating just about anything in PHP is possible.
The biggest problem developing large scale programs is definitely keeping them maintainable in the long-term. Initially, a program starts out all full of ideal methods and ideas, but keeping the integrity intact, especially, over time fails, in my opinion, more often than not.
In addition, scope creep is your enemy. You HAVE to reign that in ASAP.
As far as large scale programs go the company I work for has a few internal programs constantly under development. One example is our proprietary website engine. It's a very large code-base that includes a dozen modules (user management, survey system, blogs, user galleries, etc) that allows us to build our clients sites rapidly.
We also develop our own internal project management program for managing our clients work.
You should definitely be thinking in terms of scale in the long term. In almost every project I've worked on there's a permission/group element for users involved. You might want to start thinking about the possibilities and issues involved in that and work up to more complicated functionality.
MediaWiki is one of the largest public PHP apps, and it's got very nice code. . I know some larger ones, but they're utterly awful and you'd learn nothing by reading them.
There are lots of complex OpenSource php applications. For example, the Drupal CMS, which can be considered a platform in its own right for developing other web sites.
You can browse through the source code online: http://cvs.drupal.org/viewvc.py/drupal/drupal/
+1 for Wilco
I have a software I use for some of my clients, it's a CMS, Blog, eCommerce beast, the code base is HUGE, but everything cooperates with each other nicely.
My company works on educational software. We've recently started doing web-based content delivery, including video and audio, with the backend written entirely in PHP using MySQL. We have two primary apps, one which lives on our servers and one which is delivered to the customer. One clocks in at ~42,000 lines of code (using a physical line count) and one at ~68,000 lines.
We use PEAR extensively and a recently started project is using the Zend Framework.
We use PHP at our company. (We do online language learning: http://www.livemocha.com. You should go take a look at the site. Yes, it's sort of a shameless plug, but it's also topical. :-) )
I can't give you a precise number of users, but we put out a press release a while back celebrating hitting the 3 million mark. That's a pretty large scale as web apps go.
We build on the CakePHP framework, which is based on an MVC architecture... at least in theory. In practice, they auto-generate certain methods for the models which tend to have the result of pushing some pieces of model code (caching, deciding which DB to use) into the controllers. They also have a few localization issues in 1.2 that make me think this part of the framework hasn't really reached maturity yet. That said, I find CakePHP pretty comfortable to work with overall, and you should at least take a look at it if you're considering implementing a large-scale web app in PHP. It has some excellent documentation available as well (google for "CakePHP bakery").
Get CodeIgniter and rebuild Amazon or Ebay. If you can dream it you can build it in PHP but you might not be able to maintain it because it is so easy to created bad code that works. PHP.net is your friend. Whatever framework you use make sure your read the User Guide and let it guide you.
I can't believe nobody has mentioned the MVC pattern yet. IMO, it's one of the best things you can use to help you maintain large codebases.

Categories