And now for some Christmas entertainment, git, outsourcing and PHP error messages.
Note: This article was originally published at Planet PHP on 23 December 2010.Article originally from rooJSolutions blog
Well, you either have to laugh or cry at this.
One of the projects I help out on, mostly by looking after the production server, uses Joomla, the owner has employed a number of outsourced resources via odesk to do the development, in the belief that it's cheaper that way.A
After a few months of them modifying the code and occasionally breaking the site, I changed the configuration so they had to commit via git, which in turn would copy the commited code onto the live server. So there was at least some tracking of changes they where making.A
Before this, they had been in the habit of modifying a file like index.php and calling it index-2010-04-12.php then uploading via ftp, and there was about half a dozen versions of each file on the server, (basically quite a mess)
So since git had been so mindblowingly usefull for all my projects, I made the assumption that it would be effective as a revision control system on the server.
Unfortunatly over the last few months that decision has come back to bite us.A
a) pretty much all the contractors they employed used windows (usually a sign of an inexperienced developer)b) git on windows is no where near as mature (cygwin being slightly better that the msysgit version), especially when handling http-backend based repositories.c) the contractors ran into all sorts of problems dealing with the command line and messages like 'error: Untracked working tree file 'images/M_images/Thumbs.db' would be overwritten by merge. AAborting' - requiring either teamviewer sessions to walk them through the fixes or rather fruitless email conversations explaining what they should do.d) the contractors had no idea how to use command line mysql (I even saw this in one of their logs - #git mysqldump -h...)e) they would send me screenshots of the cygwin terminal???? copy and paste anyone...
So in the end I've given up on letting them use git directly, and installed subversion with a commit hook that copies the change into the git central store.
But that was the least of the problems I've seen. When the client started looking at his billing he was beginning to wonder what he was paying for. In one bill some 8 hours had been billed, yet there had been little to no change on the site. odesk provides screenshots of what the contractor was doing so I thought I would Ahave a look.
It appears the problem lay with their lack of understanding of PHP (the language they claim to know to be able to do these jobs). Our server is running PHP 5.3, which produces a few new warning messages, causing problems with older code. I've insisted that we do not downgrade, as the exim exploit illustrated, depending on the distribution provided packages for something like this can be the difference between a instant upgrade and messing around with build issues while a server is wide open for attack.
Anyway the problem they ran into was
Deprecated: Assigning the return value of new by reference is deprecated
this was in the nusoap library, and caused by this syntax.
A$this-wsdl =& new wsdl(.......
The fix is very trivial, just remove the & before the new (it's not needed in PHP5). however, rather than doing this, first they tried googling it, and apparently after not understanding the error message, they decided to comment out the whole body of the loadWSDL() Amethod, then went on to find all the calls to the method, and comment them out.
I guess it might be worth changing that error message to A"There is an '&' before 'new' on line XXX, it is not needed, so you should remove it."
Then again, as I keep reminding the client, you get what you pay for....