<?xml version="1.0"?>

<rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
>

<channel rdf:about="http://simon.incutio.com/syndicate/php/rss1.0">
  <title>PHP</title>
  <link>http://simon.incutio.com/</link>
  <description>Simon Willison's PHP cateory</description>
  <language>en-uk</language>
  <webMaster>simon@incutio.com</webMaster>
  <items>
    <rdf:Seq>
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2005/05/23/ixr" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2004/07/14/php5" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2004/05/12/simpleMiniLanguages" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2004/03/31/phpAndApache2" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2004/03/21/zendGoodies" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2004/03/19/PHP5RC1" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2004/02/18/harry" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2004/01/06/paws" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/12/20/php5XMLHighlights" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/12/09/hackedForSpam" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/12/05/phpCommunitySite" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/12/05/simple" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/11/27/ixr2" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/11/14/apology" />
      <rdf:li rdf:resource="http://simon.incutio.com/archive/2003/11/13/goodAndUgly" />
    </rdf:Seq>
  </items>
</channel>

<item rdf:about="http://simon.incutio.com/archive/2005/05/23/ixr">
  <title>Testing a new version of IXR</title>
  <description>&lt;p&gt;Almost two years to the day since the last release, I've put together a new version of &lt;acronym title=&quot;Incutio XML-RPC Library&quot;&gt;IXR&lt;/acronym&gt;, my &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; &lt;acronym title=&quot;XML Remote Procedure Calls&quot;&gt;XML-RPC&lt;/acronym&gt; library. I haven't published it on &lt;a href=&quot;http://scripts.incutio.com/xmlrpc/&quot; title=&quot;The Incutio XML-RPC Library&quot;&gt;the site&lt;/a&gt; just yet as I want to make sure any bugs are ironed out first, but you can grab a copy here:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://scripts.incutio.com/xmlrpc/tests/IXR_Library.inc.php.txt&quot;&gt;IXR version 1.7 (beta)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's mostly a bug fix release, although it also includes &lt;a href=&quot;http://trac.wordpress.org/log/trunk/wp-includes/class-IXR.php&quot;&gt;some changes&lt;/a&gt; made by the WordPress guys who have been maintaining their own fork since January. I've filed &lt;a href=&quot;http://trac.wordpress.org/ticket/1400&quot; title=&quot;Ticket #1400 WordPress should use the latest version of IXR&quot;&gt;a bug&lt;/a&gt; asking them to take a look at the new version and maybe roll it in to their codebase.&lt;/p&gt;

&lt;p&gt;If you use &lt;acronym title=&quot;Incutio XML-RPC Library&quot;&gt;IXR&lt;/acronym&gt; for anything it would be great if you could run this new version through its paces. Send any bug reports to &lt;a href=&quot;http://simon.incutio.com/contact/&quot; title=&quot;My contact form&quot;&gt;the usual address&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A big thanks to everyone who sent in bug reports and patches.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2005/05/23/ixr</link>
  <dc:subject>PHP</dc:subject>
  <dc:date>2005-05-23T02:58:39-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2004/07/14/php5">
  <title>PHP 5 is out!</title>
  <description>&lt;p&gt;It's finally here! Unfortunately &lt;a href=&quot;http://www.php.net/&quot;&gt;PHP.net&lt;/a&gt;, while a great site in most respects, fails miserably when it comes to permalinks for news items and/or new software releases. You can grab it from their &lt;a href=&quot;http://www.php.net/downloads.php&quot; title=&quot;PHP Downloads&quot;&gt;downloads page&lt;/a&gt;, and read more about it in the &lt;a href=&quot;http://www.php.net/ChangeLog-5.php&quot; title=&quot;PHP 5 ChangeLog&quot;&gt;changelog&lt;/a&gt;. Now all it needs is widespread adoption. Unfortunately, something tells me PHP 4 is going to stick around for a long, long time.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2004/07/14/php5</link>
  <dc:subject>PHP</dc:subject>
  <dc:date>2004-07-14T00:13:45-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2004/05/12/simpleMiniLanguages">
  <title>Simple mini-languages with PHP</title>
  <description>&lt;p&gt;I linked to &lt;a href=&quot;http://pdml.sourceforge.net/&quot;&gt;PDML&lt;/a&gt; the other day in &lt;a href=&quot;http://simon.incutio.com/blogmarks/2004/05/08/&quot; title=&quot;Blogmarks for 8th May 2004&quot;&gt;my blogmarks&lt;/a&gt;, but beyond a cursory glance I hadn't really dug in to what makes it tick. Dumky over at &lt;a href=&quot;http://blog.monstuff.com/archives/000175.html&quot; title=&quot;PDML PHP tricks&quot;&gt;Curiosity is bliss&lt;/a&gt; points out that it makes use of an ingenious output buffering trick. To create a &lt;acronym title=&quot;Portable Document Markup Language&quot;&gt;PDML&lt;/acronym&gt; document, you add a single line to the top of a page that includes and executes the &lt;acronym title=&quot;Portable Document Markup Language&quot;&gt;PDML&lt;/acronym&gt; library (written in &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt;). The rest of the document is written in the custom &lt;acronym title=&quot;Portable Document Markup Language&quot;&gt;PDML&lt;/acronym&gt; markup language. The script uses output buffering to capture the rest of the page, then executes a callback function that actually processes the page content (see &lt;a href=&quot;http://www.php.net/ob_start&quot;&gt;ob_start()&lt;/a&gt; for details).&lt;/p&gt;

&lt;p&gt;As Dumky points out, this can be used to implement mini-languages for pretty much anything - and &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; 5's excellent &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; support means most of the parser work is handled for you. It could also act as a neat way of hooking in to things like server-side &lt;acronym title=&quot;Extensible Stylesheet Language Transformations&quot;&gt;XSLT&lt;/acronym&gt; processors.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2004/05/12/simpleMiniLanguages</link>
  <dc:subject>PHP</dc:subject>
  <dc:date>2004-05-12T21:59:10-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2004/03/31/phpAndApache2">
  <title>PHP and Apache 2.0</title>
  <description>&lt;p&gt;For as long as Apache 2 has been stable, the &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; manual has carried this &lt;a href=&quot;http://www.php.net/manual/en/install.apache2.php&quot;&gt;strongly worded warning&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite=&quot;http://www.php.net/manual/en/install.apache2.php&quot;&gt;&lt;p&gt;Do not use Apache 2.0 and PHP in a production environment neither on Unix nor on Windows.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I've frequently wondered why they are being so slow to support the new version  - after all, Apache 2 provides &lt;a href=&quot;http://httpd.apache.org/docs-2.0/new_features_2_0.html&quot; title=&quot;Overview of new features in Apache 2.0&quot;&gt;a bunch of improvements&lt;/a&gt; over the older 1.3 and is recommended by the Apache Software Foundation as the &lt;q cite=&quot;http://httpd.apache.org/download.cgi&quot;&gt;best available version&lt;/q&gt;.&lt;/p&gt;

&lt;p&gt;I finally found the answer today in &lt;a href=&quot;http://apache.slashdot.org/comments.pl?sid=101407&amp;amp;cid=8644732&quot;&gt;this comment&lt;/a&gt; buried on Slashdot. It seems that one of the key features of Apache 2 is the new &lt;a href=&quot;http://httpd.apache.org/docs-2.0/mod/worker.html&quot;&gt;threaded worker module&lt;/a&gt; which uses threads to serve more requests more efficiently than 1.3's multi-process based server. While the core Zend engine of &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; is thread-safe many of the critical libraries that &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; relies on for its advanced functionality (image processing, database connectivity and so forth) are not, and are unlikely to become so any time in the future. In a threaded environment &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; is likely to suffer from all kinds of unpredictable bugs. Apache 2 can be run in traditional 1.3-style &lt;a href=&quot;http://httpd.apache.org/docs-2.0/mod/prefork.html&quot;&gt;prefork mode&lt;/a&gt; but doing so greatly reduces its advantages over 1.3. Combined with the lack of heavy duty testing on Apache 2 and the fact that the 1.3 series will continue to be supported for a long time to come it's clear why the &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; team are unwilling to recommend &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; and Apache 2 in a production environment.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2004/03/31/phpAndApache2</link>
  <dc:subject>PHP</dc:subject>
  <dc:date>2004-03-31T07:43:53-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2004/03/21/zendGoodies">
  <title>Zend PHP 5 Goodies</title>
  <description>&lt;p&gt;Zend have quietly released a veritable treasure trove of &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; 5 tutorials via their &lt;a href=&quot;http://www.zend.com/php5/&quot;&gt;PHP5 InfoCenter&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.zend.com/php5/articles/php5-xmlphp.php&quot;&gt;XML in PHP 5 - What's New?&lt;/a&gt; by Christian Stocker&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.zend.com/php5/articles/php5-SOAP.php&quot;&gt;PHP SOAP Extension&lt;/a&gt; by Dmitry Stogov&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.zend.com/php5/articles/php5-sqlite.php&quot;&gt;SQLite Introduction&lt;/a&gt; by Ilia Alshanetsky&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.zend.com/php5/articles/php5-tidy.php&quot;&gt;Tidying up your HTML with PHP 5&lt;/a&gt; by John Coggeshall&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.zend.com/php5/articles/php5-dotnet.php&quot;&gt;Com_dotnet&lt;/a&gt; by Wez Furlong&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://www.zend.com/php5/articles/php5-mysqli.php&quot;&gt;Using ext/mysqli: Part I - Overview and Prepared Statements&lt;/a&gt; by Zak Greant and Georg Richter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href=&quot;http://www.php.net/tidy&quot;&gt;Tidy functions&lt;/a&gt; look particularly useful, especially if you are interested in maintaining clean markup within your &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; applications.&lt;/p&gt;

&lt;p&gt;One thing that I would like to see addressed with the full release of &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; 5 is the increasing fragmentation of the &lt;a href=&quot;http://www.php.net/manual/&quot;&gt;PHP manual&lt;/a&gt;. The single online manual now covers every version of &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; from 3 upwards, making it increasingly difficult to use effectively if you are targetting older versions of &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt;. The Python site maintains archived versions of &lt;a href=&quot;http://www.python.org/doc/versions.html&quot;&gt;previous documentation snapshots&lt;/a&gt;, making it easy to  refer to the documentation of the version of the language you are using. With the major changes between versions 4 and 5 of &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; a similar approach could be highly beneficial.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2004/03/21/zendGoodies</link>
  <dc:subject>PHP</dc:subject>
  <dc:date>2004-03-21T21:34:09-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2004/03/19/PHP5RC1">
  <title>PHP 5 Release Candidate 1</title>
  <description>&lt;p&gt;I haven't blogged much about &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; in a while because I've been up to my nose in mod_python and loving every minute of it. This news is just too important to miss: &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; 5 Release Candidate 1 &lt;a href=&quot;http://www.php.net/downloads.php#v5&quot; title=&quot;PHP 5 Release Candidate 1&quot;&gt;has been released&lt;/a&gt;, bringing the first production-ready release tantilisingly close. While I doubt &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; 5 will tempt me back it's definitely an exciting upgrade - my biggest complaint with &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; 4 is the brain-dead object model which defaults to copying whole objects rather than passing references, and this is one of the many things  addressed by &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; 5. The new libxml2 powered &lt;acronym title=&quot;eXtensible Markup Language&quot;&gt;XML&lt;/acronym&gt; features sound really powerful, and SQLite as an on-board database should be ideal for knocking out small stand-alone applications without needing to set up a mySQL database for them.&lt;/p&gt;

&lt;p&gt;I may well throw a copy on my Mac over the weekend and try out the changes since version 4.3.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2004/03/19/PHP5RC1</link>
  <dc:subject>PHP</dc:subject>
  <dc:date>2004-03-19T01:27:51-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2004/02/18/harry">
  <title>Catching up with Harry</title>
  <description>&lt;p&gt;I'm not sure how I missed this, but Harry Fueck's new book &lt;a href=&quot;http://www.sitepoint.com/books/phpant1/&quot;&gt;The PHP Anthology&lt;/a&gt; was published by SitePoint back in December, as a hefty 2 volume epic. Harry is the guru behind &lt;a href=&quot;http://www.phppatterns.com/&quot;&gt;PHP Patterns&lt;/a&gt; and &lt;em&gt;really&lt;/em&gt; knows his stuff. While the book is at first glance a cookbook for solving web related problems, Harry also uses it as &lt;a href=&quot;http://www.phppatterns.com/index.php/article/articleview/101/1/11/&quot; title=&quot;The PHP Anthology and more blogging&quot;&gt;a platform for teaching sensible development practises&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite=&quot;http://phppatterns.com/index.php/article/articleview/101/1/11/&quot;&gt;
&lt;p&gt;Between the lines I've focused on teaching OOP by example, partly by developing classes in the book and also by taking advantage of Open Source class libraries I'm familiar with; in most cases projects from PEAR.&lt;/p&gt;

&lt;p&gt;That's also where I'd say The PHP Anthology is unique, in it aims to get readers to avoid re-inventing wheels already done many times in PHP. Although many of the subjects have been seen before (often online), the focus here is either to use an Open Source class library or put one together, solving a problem once and for all, as opposed a hacked script that goes half way.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sample chapters from the books are available online, including an &lt;a href=&quot;http://www.sitepoint.com/article/php-anthology-2-5-caching/&quot; title=&quot;The PHP Anthology Volume 2, Chapter 5 - Caching&quot;&gt;excellent explanation of caching techniques&lt;/a&gt;. Harry is also one of my co-bloggers over at SitePoint where he writes about (you guessed it) &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; in &lt;a href=&quot;http://www.sitepoint.com/blog-view.php?blogid=9&quot; title=&quot;PHP Blog: Dynamically Typed&quot;&gt;Dynamically Typed&lt;/a&gt;.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2004/02/18/harry</link>
  <dc:subject>PHP</dc:subject>
  <dc:date>2004-02-18T03:56:59-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2004/01/06/paws">
  <title>PaWS 2004</title>
  <description>&lt;p&gt;Here's an interesting topic for a conference: &lt;a href=&quot;http://www.pawscon.com/&quot;&gt;PHP and Web Standards&lt;/a&gt;, to be held in Manchester from February 20th to the 24th. I've devoted a lot of time and energy to combining the two for this blog - it's a shame I'll be out of the country when the conference rolls around. I should be able to make it to &lt;a href=&quot;http://www.sxsw.com/interactive/&quot;&gt;SXSW&lt;/a&gt; this year though.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2004/01/06/paws</link>
  <dc:subject>Web Standards, PHP</dc:subject>
  <dc:date>2004-01-06T03:22:55-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/12/20/php5XMLHighlights">
  <title>XML highlights for PHP 5</title>
  <description>&lt;p&gt;&lt;a href=&quot;http://slides.bitflux.ch/phpconf2003/&quot;&gt;XML in PHP5: An in-depth look into advanced XML features&lt;/a&gt; (via &lt;a href=&quot;http://keithdevens.com/weblog/archive/2003/Dec/20/links&quot; title=&quot;Links&quot;&gt;Keith&lt;/a&gt;) does exactly what it says on the tin. Here are the bits that caught my eye:&lt;/p&gt;

&lt;ul&gt;
 &lt;li&gt;&lt;a href=&quot;http://slides.bitflux.ch/phpconf2003/slide_22.html&quot;&gt;HTML Support in ext/xml&lt;/a&gt; - PHP 5 can load in not well-formed HTML documents and create a DOM tree from them.&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://slides.bitflux.ch/phpconf2003/slide_24.html&quot;&gt;XPath support&lt;/a&gt; - and it &lt;a href=&quot;http://slides.bitflux.ch/phpconf2003/slide_23.html&quot; title=&quot;HTML Example&quot;&gt;works with HTML&lt;/a&gt; loaded via the above.&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://slides.bitflux.ch/phpconf2003/slide_26.html&quot;&gt;XML Validation&lt;/a&gt;, including support for RelaxNG! I wonder if they'll support compact syntax.&lt;/li&gt;
 &lt;li&gt;&lt;a href=&quot;http://slides.bitflux.ch/phpconf2003/slide_16.html&quot;&gt;Extending DOM Classes&lt;/a&gt; - this is really cool, and demonstrates how much more mature PHP 5's OOP support is.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unforuntately, my biggest criticism of &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; remains: all of the above is supported using functions built in to the default namespace! The lack of a smart namespace system (like Python's modules) really gets in the way when you start trying to write reusable code or large applications.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/12/20/php5XMLHighlights</link>
  <dc:subject>XML, PHP</dc:subject>
  <dc:date>2003-12-20T23:44:53-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/12/09/hackedForSpam">
  <title>Hacked for Spam</title>
  <description>&lt;p&gt;From the &lt;a href=&quot;http://www.nytimes.com/2003/12/08/technology/08trojan.html?ex=1386219600&amp;amp;en=fc2a920c196b88ca&amp;amp;ei=5007&amp;amp;partner=USERLAND&quot; title=&quot;Hackers Steal From Pirates, to No Good End&quot;&gt;New York Times&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite=&quot;http://www.nytimes.com/2003/12/08/technology/08trojan.html?ex=1386219600&amp;amp;en=fc2a920c196b88ca&amp;amp;ei=5007&amp;amp;partner=USERLAND&quot;&gt;
&lt;p&gt;Computer security researchers have been watching the evolution of remote-access rogue programs as they have become more common and have put more machines under the control of hackers. Programs like Sinit infect target machines and surreptitiously open back doors that allow outsiders to control the PC's. The rings of infected computers have been used to send spam, to present online advertisements for pornographic Web sites or to trick people into giving up information like credit card numbers.&lt;/p&gt;

&lt;p&gt;In fact, &lt;em&gt;at least a third of all spam circulating on the Internet is now sent from or relayed by personal home computers that have been taken over&lt;/em&gt;, said Jesse Dougherty, director of development at Sophos, an antivirus and antispam company. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Emphasis mine. Of course, whether or not you want to believe a director from a company that directly profits from people's fear of security attacks is up to you. That said, I've seen plenty of supporting evidence in the past few months that indicates that spamming is now the number one reason that a cracker would want to take over a &lt;acronym title=&quot;Personal Computer&quot;&gt;PC&lt;/acronym&gt;, not least &lt;a href=&quot;http://www.wired.com/news/business/0,1367,60747,00.html&quot; title=&quot;Cloaking Device Made for Spammers&quot;&gt;this Wired article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Continuing on the same theme, &lt;a href=&quot;http://www.securityfocus.com/guest/24043&quot;&gt;The Rise of the Spammers&lt;/a&gt; is a fascinating article by David Barroso Berrueta describing how one of his servers was turned in to a spam relay after being compromised through a vulnerability in a &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; script. The technical details are intriguing; the attacker downloaded and uncompressed a daemon which then communicated with another host using an extended version of the &lt;acronym title=&quot;Simple Mail Transfer Protocol&quot;&gt;SMTP&lt;/acronym&gt; protocol, receiving spam email bodies along with lists of addresses to send the spam on to.&lt;/p&gt;

&lt;p&gt;Let's talk about the &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; vulnerability in question: yet again, it was the classic problem where an attacker can instruct &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; to download and execute code from their own server by feeding in a query string parameter that is passed un-checked to an &lt;code class=&quot;php&quot;&gt;include()&lt;/code&gt; function call. While there are a number of steps that can be taken to deny this kind of attack, it unveils a fundamental problem with &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; itself - that it will execute code retrieved from a &lt;acronym title=&quot;Uniform Republic of Love&quot;&gt;URL&lt;/acronym&gt; in the first place! This feature should be removed from &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; - it has almost no purpose in the real world aside from allowing servers to be cracked in to. The feature exists because &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; has the extremely useful ability to &lt;a href=&quot;http://www.php.net/manual/en/features.remote-files.php&quot;&gt;open remote files over HTTP&lt;/a&gt;. Unfortunately, this feature extends to the &lt;code class=&quot;php&quot;&gt;include()&lt;/code&gt; and &lt;code class=&quot;php&quot;&gt;require()&lt;/code&gt; functions which will execute any &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; code in the file passed to the functions. The most obvious solution to my mind would be for these functions to refuse to execute &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; in files that were opened via &lt;acronym title=&quot;HyperText Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt;. I have no doubt that this would involve an ugly hack on behalf of &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt;'s maintainers, but I believe the number of security problems it would solve would be well worth the trade-off.&lt;/p&gt;

&lt;p&gt;Incidentally, I &lt;em&gt;know&lt;/em&gt; you can &lt;a href=&quot;http://us4.php.net/manual/en/install.configure.php#install.configure.disable-url-fopen-wrapper&quot;&gt;disable opening files over HTTP&lt;/a&gt; and I &lt;em&gt;know&lt;/em&gt; you shouldnt allow the direct creation of variables from the query string in the first place. The problems here are two-fold: firstly, opening files over &lt;acronym title=&quot;HyperText Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt; is actually a very useful feature, one that would be all the more useful if it didn't carry the risk of executing arbitrary code. Secondly, the problem is mainly down to third party software which often requires insecure &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; settings (such as register_globals) in order to work.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/12/09/hackedForSpam</link>
  <dc:subject>PHP, Rants, Online Issues</dc:subject>
  <dc:date>2003-12-09T02:56:42-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/12/05/phpCommunitySite">
  <title>New PHP community site</title>
  <description>&lt;p&gt;Via &lt;a href=&quot;http://dev.r.tucows.com/blog/_archives/2003/12/4/8091.html&quot;&gt;The Farm&lt;/a&gt;, Chris Shiflett is &lt;a href=&quot;http://www.oreillynet.com/pub/wlg/4017&quot; title=&quot;PHP Community Site&quot;&gt;calling for assistance&lt;/a&gt; in setting up a new &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; community site to run along similar lines to &lt;a href=&quot;http://use.perl.org/&quot;&gt;use Perl&lt;/a&gt;. Chris has already secured an offer of hosting and support from O'Reilly and is now seeking offers of help from potential contributers. &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; has long needed a site of this kind (&lt;a href=&quot;http://www.phpbuilder.com/&quot;&gt;PHP Builder&lt;/a&gt; has lost a lot of momentum since being sold by Tim Perdue) so this could be a worth while project to get involved with if you have the time.&lt;/p&gt;

&lt;p&gt;I wonder if Python would benefit from something like this? Python already has an excellent decentralised community centered mainly around the Python newsgroups, blogs and mailing lists, but it would be nice if &lt;a href=&quot;http://www.python.org/&quot;&gt;Python.org&lt;/a&gt; provided more community oriented features.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/12/05/phpCommunitySite</link>
  <dc:subject>PHP</dc:subject>
  <dc:date>2003-12-05T02:22:29-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/12/05/simple">
  <title>Simpler content managment</title>
  <description>&lt;p&gt;&lt;a href=&quot;http://www.smh.com.au/articles/2003/12/01/1070127346271.html&quot;&gt;Perls of wisdom in a sea of site mismanagement&lt;/a&gt;, via the ever-excellent &lt;a href=&quot;http://www.steptwo.com.au/columntwo/archives/001013.html#001013&quot; title=&quot;Perls of wisdom in a sea of site mismanagement&quot;&gt;Column Two&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote cite=&quot;http://www.smh.com.au/articles/2003/12/01/1070127346271.html&quot;&gt;
&lt;p&gt;The great surprise of the past five years of content management is that, despite all the hundreds of systems, no clear winners have emerged. Instead, there's a growing dissatisfaction with the ongoing technical burden that such systems impose.&lt;/p&gt;

&lt;p&gt;Some influential voices are starting to argue that many sites should, in effect, wait out this immature phase of website management. For the moment, they should content themselves with limited automation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The article concludes with the idea that many sites can do perfectly well with a few simple Perl scripts and maybe a relational database on the back end, rather than investing in an expensive super-package that claims to be able to do anything you could possibly want. This is very sound advice. The simple fact of the matter is that many sites really don't need a complex content management platform with support for templating, user logins, workflow, versioning and a dozen other high end features. Most sites just need someone to be able to easily update them, when necessary. This is why Macromedia Contribute has been such a success - people want the ability to hit &quot;Edit This Page&quot;, make a few changes and publish straight to their site.&lt;/p&gt;

&lt;p&gt;I've worked on my fair share of content management systems (in fact I'm helping develop one at the moment) and out of all of the ones I've been involved in, the one I got the biggest kick out of took the shortest time to develop. It was based on &lt;a href=&quot;http://tavi.sourceforge.net/&quot;&gt;Tavi Wiki&lt;/a&gt;, and consisted of a password protected Tavi install for the back end and a slightly modified separate install for the front end. Both installs pointed to the same database, but the front end was altered to disable all editing features and make the site look less like a Wiki. You can see the end result &lt;a href=&quot;http://simon.incutio.com/uni/scheme/&quot; title=&quot;Home Page - Scheme&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;All in all, the &lt;acronym title=&quot;Content Management System&quot;&gt;CMS&lt;/acronym&gt; took less than an hour to put together from start to finish. It made it easy enough for contributors with no previous knowledge of HTML to update the site (using Wiki markup) and provided us with full versioning on all content contained within the project. The final site gives very few clues that the underlying engine is a Wiki, and thanks to Tavi's ease of customisation the site design can be easily changed to look even less wiki-like. It's close to the simplest thing that could possibly work and it works just fine.&lt;/p&gt;

&lt;p&gt;Of course, if you don't have a competent server-side programmer to hand your only option is to buy a pre-made solution, but with a half-decent programmer and a good set of tools a simple home built &lt;acronym title=&quot;Content Management System&quot;&gt;CMS&lt;/acronym&gt; customised to fit your needs could be a much better investment than some $100,000 one-size-fits all monstrosity.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/12/05/simple</link>
  <dc:subject>PHP, Content Management</dc:subject>
  <dc:date>2003-12-05T01:36:28-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/11/27/ixr2">
  <title>IXR 2.0</title>
  <description>&lt;p&gt;Harry Fuecks has been hacking on &lt;a href=&quot;http://scripts.incutio.com/xmlrpc/&quot;&gt;my XML-RPC library&lt;/a&gt;, and has released a new version with some significant changes. His &lt;a href=&quot;http://www.phppatterns.com/index.php/article/articleview/83/1/2/&quot; title=&quot;XML-RPC Progress&quot;&gt;article on phpPatterns&lt;/a&gt; describes the changes and provides a link to download the updated code. He's made a bunch of interesting architectural changes which take advantage of a number of useful &lt;acronym title=&quot;PHP Extension and Application Repository&quot;&gt;PEAR&lt;/acronym&gt; classes, including &lt;a href=&quot;http://pear.php.net/package/HTTP_Request&quot;&gt;HTTP_Request&lt;/a&gt; which provides support for proxies and authentication, two frequently requested features.&lt;/p&gt;

&lt;p&gt;I don't know when I'll get a chance to look at my version of the code again, since most of my current development work involves Python rather than &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt;. If you're looking for an updated version of the library you would do well to check out Harry's enhancements.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/11/27/ixr2</link>
  <dc:subject>Web Services, PHP</dc:subject>
  <dc:date>2003-11-27T03:38:41-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/11/14/apology">
  <title>An apology</title>
  <description>&lt;p&gt;It turns out that the Javascript on PHP.net &lt;a href=&quot;http://simon.incutio.com/archive/2003/11/13/goodAndUgly&quot; title=&quot;The good and the ugly&quot;&gt;mentioned previously&lt;/a&gt; was not deliberately obfuscated to protect the code from prying eyes; it was merely compressed to reduce the size of the script. See &lt;a href=&quot;http://simon.incutio.com/archive/2003/11/13/goodAndUgly#comment10&quot;&gt;this comment&lt;/a&gt; for further details. I'd like to apologise to the maintainers of PHP.net for jumping the gun on this issue. Incidentally, the unobfuscated code is now &lt;a href=&quot;http://cvs.php.net/cvs.php/phpweb/functions.js.txt&quot; title=&quot;functions.js.txt&quot;&gt;available in CVS&lt;/a&gt;.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/11/14/apology</link>
  <dc:subject>PHP</dc:subject>
  <dc:date>2003-11-14T23:16:43-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>
<item rdf:about="http://simon.incutio.com/archive/2003/11/13/goodAndUgly">
  <title>The good and the ugly</title>
  <description>&lt;p&gt;PHP.net has a new feature on their &lt;a href=&quot;http://www.php.net/search.php&quot;&gt;search page&lt;/a&gt; - a really nice implementation of an auto complete text widget in Javascript. Even better, the search page is valid &lt;acronym title=&quot;eXtensible HyperText Markup Language&quot;&gt;XHTML&lt;/acronym&gt; 1.0 Strict and uses &lt;acronym title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/acronym&gt; for the layout. Let's hope this is an indication of things to the come for the rest of the site, which still mostly consists of tag soup.&lt;/p&gt;

&lt;p&gt;Here's the ugly bit: the &lt;a href=&quot;http://www.php.net/functions.js&quot; title=&quot;functions.js&quot;&gt;javascript&lt;/a&gt; for the auto complete function is deliberately obfuscated. Now I know that this decision is completely up to the author of the script, but personally I find it exasperating. &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt; is an open source project, and obfuscation in this way is the antithesis of the open source ideal. A big part about open source is that people shouldn't have to invent something twice - why waste duplicated effort when sharing code costs nothing and benefits everyone? I'm sure the author had their reasons for hiding the code in this way but to me it seems like a wasted opportunity to teach site visitors a useful new trick. A bug concerning the obfuscation has already been &lt;a href=&quot;http://bugs.php.net/bug.php?id=26169&quot; title=&quot;Bug #26169 Search javascript Obfuscated&quot;&gt;raised&lt;/a&gt; in &lt;acronym title=&quot;PHP: Hypertext Preprocessor&quot;&gt;PHP&lt;/acronym&gt;'s bug tracker but was closed without a full explanation.&lt;/p&gt;

&lt;p&gt;Obfuscation of client side code such as Javascript is a pretty futile exercise in any case. Most of the effect of the obfuscation can be easily reversed using a tool such as Jesse Ruderman's &lt;a href=&quot;http://www.squarefree.com/bookmarklets/webdevel.html#view_variables&quot;&gt;view variables&lt;/a&gt; bookmarklet, which displays all variables on a page (including ones that contain decoded content from obfuscated variables) and pretty-prints functions to make them more readable.&lt;/p&gt;

&lt;p&gt;It's impossible to prevent &quot;theft&quot; of your Javascript, but if you really want to stop people from using it the best you can do is to place a copyright notice in the code and ask people to contact you for licensing options. If it's on the web, people can take it. Clear copyright messages are a far more ethical deterrent than ineffective tricks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; It turns out the obfuscation was the result of compressing the Javascript for efficiency reasons - see &lt;a href=&quot;http://simon.incutio.com/archive/2003/11/14/apology&quot; title=&quot;An apology&quot;&gt;my apology&lt;/a&gt; for further information.&lt;/p&gt;</description>
  <link>http://simon.incutio.com/archive/2003/11/13/goodAndUgly</link>
  <dc:subject>PHP, DHTML and Javascript, Rants</dc:subject>
  <dc:date>2003-11-13T23:33:06-00:00</dc:date>
  <dc:creator>Simon Willison</dc:creator>
</item>

</rdf:RDF>