John posted a bit about implementing an MVC design in PHP. He quotes a comment stating that MVC is overkill in PHP land, mainly because PHP isn’t Java.
I do things in a simpler way, and I really should post an example application soon!
Category Archives: PHP
A Few Tips for Writing Useful Libraries in PHP
A few? There are 20 tips here. Excellent reading!
PHP5: Coming Soon to a Webserver Near You
harry Fuecks has written a very long article on PHP5 at sitepoint. It’s been a very busy day so I haven’t had time to look at it, but after a quick scan it looks like a good read.
Geeklog security issues
There’s a major security update available now for Geeklog. If you’re hosting a Geeklog site then it’s time to upgrade. As they say themselves, This is the first major security issue with Geeklog that has been found in a long time..
Caching Smarty Database Templates
The Smarty manual explains how to use Templates from other sources such as databases. It doesn’t however give an example of caching templates from these sources. I ran into a spot of trouble when I tried to be clever about checking the freshness of a db based template.
I didn’t want to interogate the db on every request just to check if a template is stale or not. Why have caching when you have to hit the db anyway? The db_get_timestamp() function has to be modified to check the freshness in some other way then.
I used a 0-byte file in a web-server writeable directory. Unfortunately it didn’t work. The is_cached() function would return false and I’d assign Smarty variables to prepare a new version of the web page, but when I called the display() function it displayed the last cached version!
It took me a while to figure out that both is_cached() and display() call the db_get_timestamp() function. As the file I used to flag a refresh was deleted on the first run I had to retain the timestamp somehow. That’s where the global $filetimestamp array comes in.
- is_cached() checks the freshness of the cache and returns false.
- I prepare the new Smarty variables.
- The page is displayed using the Smarty display() function
- Use
touch scratch/index.tpl
to update the template cache.
function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
global $filetimestamp;
if( is_file( 'scratch/' . $tpl_name ) == false )
{
if( $filetimestamp[ $tpl_name ] != '' )
{
$tpl_timestamp = $filetimestamp[ $tpl_name ];
}
else
{
$tpl_timestamp = mktime (0,0,0,date("m")-1,date("d"), date("Y"));
}
return true;
}
else
{
$tpl_timestamp = filemtime( 'scratch/' . $tpl_name );
$filetimestamp[ $tpl_name ] = $tpl_timestamp;
unlink( 'scratch/' . $tpl_name );
}
return true;
}
if( $smarty->is_cached( 'db:index.tpl' ) == false )
{
print "regenerating cache!<br>";
$smarty->assign( 'date', time() );
}
$smarty->display("db:index.tpl");
Bug in PHP 4.3.2?
I don’t think this is much of a bug really.
String indexes of arrays should always be quoted and when they appear as part of a larger string it’s faster to seperate the strings with the dot operator. See my comment on Keith’s post above for more.
Industrial Strength MVC
php|architect posted a sample article from their latest issue. It’s a tutorial introduction to MVC. You need to have a PDF viewer to read it though, fire up xpdf and you’ll be fine!
mod_security, PHP globals, etc
I thought PHP Traveller had finished up but no, he’s still around, and pluggin his mod_security Apache module. Looks good, but I’m now 3,000 miles from our Apache dev server at work so I don’t feel like experimenting with modules as much. 🙁
PHP – oo stuff
BDKR has a rant here about OO in PHP. I agree with some of what he says. There’s lots of bad code and design out there (I can’t promise to be perfect either!) but that permeates functional and procedural programming too.
I happen to like working with objects and structuring code in that way. It was a hell of a thing to get used to in college though, Before that I had done a lot of work coding in ASM on the C64. Actually having structures to work with was a real boon!
On a related topic, John mentioned a ObjectView, a PDF magazine about OO for developers. May take a look at it later.
PHP 4.3.2 is out
A new release of PHP is out today. It looks like a required update with a HUGE amount of other bug fixes!
Update! I upgraded 2 servers. One with Apache 1.3.27, php_accelerator went fine, but the other with mod_ssl, mod_gzip and php_accelerator refused to work. Every request resulted in a seg fault. I compiled PHP with mm support for mod_ssl (is that necessary?) but haven’t got time to track down where the crash occurs. (I tried disabling both mod_gzip and php_accelerator with no luck)
I’ll give it another go later.