Tag Archives: webdevelopment

Working on existing PHP applications

10 Jan

We’ve all been there before, you’ve been hired to finish / work on someone elses work, and you encounter some very strange behaviour. If you’re working on a small website, going through the code should provide you with the necessairy information to solve this issue, however, if the application is somewhat bigger (multiple components, databases, caching, dynamic code building, multiple objects …) it’s always nice to know exactly what code is being executed on a certain moment.

Imagine you have found the exact page / function / action where it’s going wrong, and you are trying to debug it. Commercial companies offer solutions like Zend Platform / Zend Studio to debug, view stacktraces, variable watches & alot more…and i am mostly using Zend Studio for that too, but at this moment in time, Zend does not offer a windows library for Zend Platform that supports PHP 5.2.0, neither did they release a fix for Zend Studio 5.5 to build inspectation data over a Samba share…So let’s do the same thing using XDebug, afterall the world still spins without Zend.
Make sure to get the right windows or linux module for your php version from www.xdebug.org and use the installation instructions to get it running, make sure to check phpinfo to see if the xdebug is loaded. When everything is installed, we’ll start by profiling a certain action to find out what exactly the page/action is doing. Make sure to adapt your php.ini with the following configuration :

zend_extension_ts=”c:/apache/php/ext/php_xdebug-2.0.0rc2-5.2.1.dll”

[xdebug]
xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.profiler_append=0
xdebug.profiler_enable=1
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_dir=c:/temp/
xdebug.profiler_output_name=profile

After that restart your apache, and open the page you want to analyse. As soon as you send a request to the webserver it will create a file in the c:/temp (or whatever path you defined). For me it generated a file (c:/temp/cachegrind.out.5808). This file contains alot of information what exactly php was doing on your request. Call it a stack trace. This file is human readable but does not give an immidiate overview, that’s why i would suggest to use a program to analyse the cachegrind. To my knowledge, the best program to-do that is KCacheGrind, the downside is that is a KDE program, so if you are using windows you would need alot of hacks, just to get KCacheGrind running, thats why there is a windows port (with less features) available called WinCacheGrind. If you open WinCache use the File>Open File dialog and relocate to the cachegrind.out file (for me c:/temp/cachegrind.out.5808), depending on the size of your file, wincachegrind will start analysing and give you a visual representation of the stack trace of your action.

Note that all pages you visit from now (untill de-activating the module in php.ini) will get ‘profiled’ and generate a cachegrind file. As this is filesystem intensive, i would suggest commenting the above php.ini section as soon as you’re done and restart your webserver.

Propel / Pager / Datagrid – Part II

9 Jan

In my previous post, i talked about the writing of a custom datagrid for propel usage. The required features for this datagrid would be :

  • easy configuration
  • multi sortable columns (ascending & descending)
  • search features
  • add actions to one or multiple records (icon + action)
  • sizeable columns
  • go to page x
  • ability to change rows per page

So since my last post, 2 weeks have passed and i am proud to say we’ve finished a large part of the code. Now we are still having problems with the javascript to allow the user to change his column width in multiple browsers, IE seems to refuse some of the javascript code. I am still looking into that.

P.S. : I have been getting several e-mails with code requests. Untill i am really done i won’t give out the code. If you think you can help me with the javascript resizing issue though, you can always drop me an e-mail.

Writing Killer PHP Applications

31 Oct

Because i still have a quite visited blog (disabled comments though), i will try to post some web development idea’s / articles on a regular base. As a full-time webdeveloper i find it very important to have the right tools. I’ve told you before, as a development machine i am still using a WAMP set-up (Windows, Apache, Mysql, Php), whenever i finish some work on a project, i commit the code changes to a subversion repository (running on a Debian machine). The subversion server accepts connections over secured http to make sure no-one is reading / sniffing. To my opinion, the best tool to handle your svn actions (merge, commit, update) on a Windows platform is TortoiseSVN, they release regular updates, supports almost every svn action and has great documentation.

The most important in my daily development is my IDE, for the last three years i have been using Zend Studio Professional, at this moment i think (and i’m pretty sure), it’s the best PHP IDE Around. It has debugging capabilities, code completion, svn/cvs integration (although i prefer tortoisesvn, see above), but ofcourse it can’t be perfect…(i do expect it to come close for 300$/year).
One thing i don’t like about the Zend IDE (besides the pricing), are the updates. Zend is quite slow on the updates, (they might have too much todo), but as a registered & paying customer, i think some major fixes (Javascript errors in internal browser, Linux Visual Interface, Crashes) in Zend Studio 5.2.0 have a higher priority then deciding to build a new IDE when the current one is not finished (it never is). Nevertheless, this IDE is still the best PHP Editor around, in combination with the Zend Platform (free for developer licences & combined in the Zend Pro licence) you’ve got yourself a kickass debugging system containing the most important features as breakpoints, watches, stacks and output buffering.

Internationalization – seo – mod_rewrite : Part II

2 Aug

As a follow-up to my previous post (Internationalization – seo – mod_rewrite : Part I). If you followed my previous instructions, by now you should be the proud owner of a ‘google sitemaps‘ account and your webhost supports statistics that can tell you when a crawlbot visited your website (or raw logs, if you’re a sherlock holmes type).

Because you are reading this howto, i can conclude you have a website running on a domain or atleast a subdomain. For multi-language systems i prefer using the subdomain to set the language of the user. So if you were using www.mydomain.tld/index.php?lang=en before, you will now be using en.mydomain.tld. For a website with multiple languages that would become :

  • www.mydomain.tld : would point to the default language, or will relocate the user based on browser/os/nslookup (whatever you prefer)
  • en.mydomain.tld : would point to the website in english
  • fr.mydomain.tld : would point to the website in french
  • X.mydomain.tld : would point to the website in …

If you are using a subdomain this could be done with en.subdomain.mydomain.tld etc….
This way of working has some advantages :

  • users will be able to bookmark directly in their language.
  • Search engine optimalisation can be targetted on subdomains seperately
  • crawlbots will easily know which language they are crawling (also due to tag)

Step 1 : Set up your nameserver records

Make sure the A records all point to the same adress, i prefer setting a records for all different languages as i do not want to point *.domain.tld to the website (for various reasons). As this is not a dns administration guide, try to find more information in the docs of your dns daemon, but before doing that check if undefined subdomains do not already point to the same ip as your main domain, this could be the case and then no configuration is needed…

You can check this by doing :

 ping mydomain.tld

Compare the result ip adress with a ping to a subdomain :

 ping en.mydomain.tld

If both ip match, you will most probably have the right nameserver configuration already, you can go straight to step 2.

Step 2 : Make sure the webserver catches the subdomain

As i am using apache only at this moment, i will only explain you briefly how to do this in apache, for all other webservers check the documentation. Try to look for the virtualhost directive of your domain in the webserver configuration, by default this will be in /etc/httpd/conf, searching for httpd.conf, apache.conf or apache2.conf will tell you where it’s located…If you split up your virtualhost directives in different files, you are most probably clever enough to find your virtualhost directive, if you didn’t check the bottom of your configation file, there should be something like this :




  ServerName yourdomain
  DocumentRoot "/path/to/your/webroot"
  DirectoryIndex index.php
  
   AllowOverride All
   Order allow,deny
   Allow from All
  

Add a serveralias, so apache knows to catch the subdomains, there are 2 ways of doing this, you can add a ServerAlias for all different languages, or you could add a * alias, so from now on apache will catch all unknown subdomains for this domain.

Option 1 : Catch only the subdomains i want




  ServerName yourdomain
  ServerAlias language1.yourdomain
  ServerAlias language2.yourdomain
  DocumentRoot "/path/to/your/webroot"
  DirectoryIndex index.php
  
   AllowOverride All
   Order allow,deny
   Allow from All
  

Option 2 : Catch all subdomains




  ServerName yourdomain
  ServerAlias *.yourdomain
  DocumentRoot "/path/to/your/webroot"
  DirectoryIndex index.php
  
   AllowOverride All
   Order allow,deny
   Allow from All
  

Save your virtualhost config file, or main webserver configuration file and restart your webserver

 apachectrl -k restart

More information on setting Apache virtualhosts serveralias’es.

You should now be able to see the same website you had before, using the lang.mydomain.tld subdomains, if this is not the case, check your include paths etc….I have to stop this howto for now, we will go the the coding itself in Part III

My first project in Symfony

11 Jul

I’ve started on a project using a very good framework i am pleased about. If you take your time to have a look around on the website, you can clearly see this is a framework with alot of documentation, one of the major requirements for selection (in my case).

I decided to give it a go and use the framework on my latest project for EuPR (www.plasticsrecyclers.eu), as the timeframe for this project was quite limited, i needed a good framework, with plenty of documentation to solve the issues i would run into…

A snippet from the symfony about page :

Symfony is a web application framework for PHP5 projects.

It aims to speed up the creation and maintenance of web applications, and to replace the repetitive coding tasks by power, control and pleasure.

The very small number of prerequisites make symfony easy to install on any configuration; you just need Unix or Windows with a web server and PHP 5 installed. It is compatible with almost every database system. In addition, it has a very small overhead, so the benefits of the framework don’t come at the cost of an increase of hosting costs.

If you want to have a look at the results, go over to plasticsrecyclers.eu, i implented a login form, upload functionality (in different categories and a pager to browse through the various results of newsletters & documents…Keep in note that this is a “non-released” website still open for feedback & improvements….

Whatta ya think ?

Prado v3.0 alpha edition is out

25 Jan

I just got a very nice email concerning the release of an update of my favourite MVC php framework.

We are very pleased to announce that PRADO 3.0 alpha version is now available for downloading. Please use PRADO v3 discussion for topics about this v3 alpha release. We are working on a new website at pradosoft.com which will be available upon v3 beta release.

I got the 3.0a version just 5 minutes ago, because i am starting a new project with another user registration / signup, i decided to give prado a shot. Very nice is the v3 quickstart tutorial, the guys over at xisc realize how important it is to have good user documentation / sample applications.

I used prado v2 before to develop a small intranet, and back then the petshop example (available by CVS) helped me quite alot trying to figure things out…and it seems like they are putting a big effort into documentation once again. Another big advantage is that prado has a good / friendly community, decent questions on the forum get a fast reply, and also developers are hanging around to help people as much as possible, keep up the good work guys ! i’m with ya !

Go get it over at xisc.com

AJAX Frameworks

24 Jan

Cajax :

A PHP class library for writing powerfull reloadless web user interfaces using Ajax (DHTML+server-side) style.

Homepage : http://sourceforge.net/projects/cajax/

On the first view i can’t seem to find a webpage or online documentation, now that’s a bad start. Because there are alot of AJAX frameworks available, i decided to let this one go…i had a look at the sourcecode, some examples included but besides a README.developer file i prefer some more documentation…

AjaxAC

AjaxAC is an open-source framework written in PHP, used to develop/create/generate AJAX applications. The fundamental idea behind AJAX (Asynchronous JavaScript And XML) is to use the XMLHttpRequest object to change a web page state using background HTTP sub-requests without reloading the entire page. It is released under the terms of the Apache License v2.0.

Homepage : http://ajax.zervaas.com.au/

Also not much documentation, three nice examples are online on their homepage, one example with similar functionality as “Google Suggest”. I downloaded the source file, in total the lib comes down to 56kb (example excluded), all bundled in one big class file with 3 dependencies, i am still playing with the examples to see how this framework works…i’ll keep u posted

XAjaxÂÂ

Ajax-enable your PHP application with a simple toolkit that gets the job done fast.

Some very nice examples online, including a signup form (thats exactly what i needed), i’ll give it a try and let you guys know what i think about it

PHP Form Handling

24 Jan

Goodbye page refreshes, goodbye “post page” before being able to check the inputted data. Nowadays the life of a webdesigner is alot easier because we now have AJAX !

In the “old days”, the way to check form input was to send it to the server using a POST/GET method, then verifying the data and send the user to the appropriate page, depending on the validation of the input. This way of form validation works for everything you want todo, but with larger/more detailed forms you will soon realize that it’s very hard to maintain & extend, and then we’re not talking about the end-user annoyance.

On the internet you will see dozens of AJAX frameworks, websites using AJAX. The best example of this all is Google suggest, type in a keyword and instantly get the number of hits google found for your keyword, no need to refresh, no need to click a button…it’s magic isn’t it ?
But this **** is al over, we’re past that now! some really smart people came up with a thing called Asynchronous JavaScript And XML aka AJAX . The intent is to shift a great deal of computation to the Web surfer’s computer, so the entire Web page does not have to reload when a change is made due to user interaction. Using this technique, webdevelopers can create dynamic forms that instantly check the users input and take appropriate actions after.

In the upcoming posts i will give some AJAX frameworks a go, because i need to find a good way to check the form input on a new website i am developing, the first one that i run into that is easy to use, extendable and fits my needs will be my last post on this matter (for now)….