<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>PHPDeveloper.org</title>
    <link>http://www.phpdeveloper.org</link>
    <description>Up-to-the Minute PHP News, views and community</description>
    <language>en-us</language>
    <pubDate>Tue, 21 May 2013 13:07:56 -0500</pubDate>
    <ttl>30</ttl>
    <item>
      <title><![CDATA[Community News: XPath Explained (by Tobias Schlitt and Jacob Westhoff)]]></title>
      <guid>http://www.phpdeveloper.org/news/11937</guid>
      <link>http://www.phpdeveloper.org/news/11937</link>
      <description><![CDATA[<p>
<i>Tobias Schlitt</i> and <i>Jacob Westhoff</i> have written up and article (and posted it <a href="http://schlitt.info/opensource/blog/0704_xpath.html">over on Tobias' blog</a>) that wants to help you understand XPath better - whether you're a novice or have been using it for a while.
</p>
<blockquote>
This paper will give an overview on XPath an addressing language for XML documents. XPath is a W3C recommendation currently in version 1.0. XPath was created in relation to the XSL recommendation and is intended to be used with XSLT and XPointer. Beside that, XPath can be used in a variety of programming languages, commonly in combination with a DOM API.
</blockquote>
<p>
The article starts with an <a href="http://schlitt.info/opensource/blog/0704_xpath.html#introduction">introduction to the concept</a> of XPath, moves on to <a href="http://schlitt.info/opensource/blog/0704_xpath.html#addressing">addressing</a>, talks about <a href="http://schlitt.info/opensource/blog/0704_xpath.html#xpath-axes">XPath axes</a>, mentions <a href="http://schlitt.info/opensource/blog/0704_xpath.html#functions-operators-and-conditions">functions/operators/conditions</a> and looks at <a href="http://schlitt.info/opensource/blog/0704_xpath.html#xpath-and-xslt">styling XML with XPath and XSLT</a>.
</p>]]></description>
      <pubDate>Thu, 12 Feb 2009 10:28:04 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Felix Geisendorfer's Blog: Model::save() now returns an array!]]></title>
      <guid>http://www.phpdeveloper.org/news/8991</guid>
      <link>http://www.phpdeveloper.org/news/8991</link>
      <description><![CDATA[<p>
<i>Felix Geisendorfer</i> has a <a href="http://www.thinkingphp.org/2007/11/03/modelsave-now-returns-an-array/">quick tip</a> for CakePHPers out there today - an update to the framework that might cause a "gotcha" moment in your code:
</p>
<blockquote>
Just got bitten by this one when updating to the latest version of CakePHP. If you use code [checking to see if the return from a save() is true] in your app, you're in for a surprise. Because as of revision 5895 Model::save() now returns Model::data on success if its not empty.
</blockquote>
<p>
He notes that most developers don't seem to do it this way, but it tripped him up enough to where he wanted to share it with the CakePHP community so they'd know. Check out the comments on the post for other issues that might be caused by the change.
</p>]]></description>
      <pubDate>Wed, 07 Nov 2007 10:23:00 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Andy Bakun's Blog: Race Conditions with Ajax and PHP Sessions]]></title>
      <guid>http://www.phpdeveloper.org/news/6700</guid>
      <link>http://www.phpdeveloper.org/news/6700</link>
      <description><![CDATA[<p>
Race conditions in applications can be one of the hardest things to work out the kinks on, especially in a more complex application you're adding the new functionality to. One such instance comes up when you add Ajax functionality into the mix. Because of its asynchronous nature, it can cause a race condition version easily. <i>Andy Bakun</i> has been there and done that in his code and has found some helpful hints he's sharing in <a href="http://thwartedefforts.org/2006/11/11/race-conditions-with-ajax-and-php-sessions/">this (info packed) post</a> over on his blog.
</p>
<blockquote>
One of the problem with race conditions is that it is often difficult to actually witness the ramifications of one when it happens, especially if you are not aware of it. If you've used PHP's built-in, default session handling (that uses files), you'll never come across the problem. However, things get interesting once you start using <a href="http://us2.php.net/manual/en/function.session-set-save-handler.php">session_set_save_handler</a> to write your own session handler.
</blockquote>
<p>
He <a href="http://thwartedefforts.org/2006/11/11/race-conditions-with-ajax-and-php-sessions/">breaks it down</a> into some more manageable chunks:
<ul>
<li>A Multi-processing but non-Threaded Environment
<li>The Default PHP Session Handler
<li>Observing the Race Condition
<li>The Demo App Interface
<li>Resource Contention
<li>Minimizing Lock Holding Time
<li>Why is per-variable locking important?
<li>Rolling Your Own Session Handler
<li>The Code
</ul>
See? You didn't believe me when I said it was long...there's tons of great info in there about working with sessions in PHP and how to get Ajax to play nice when manipulating the data inside them. There's plenty of test code and some sidebars with additional information to keep you reading for a while. Be sure to check this one out, even if you're just working with PHP sessions and Ajax and don't have a race condition issue in your app - never hurts to be prepared.
</p>]]></description>
      <pubDate>Tue, 14 Nov 2006 09:49:00 -0600</pubDate>
    </item>
    <item>
      <title><![CDATA[Felix Geisendorfer's Blog: Basic CakePHP templating skills]]></title>
      <guid>http://www.phpdeveloper.org/news/6486</guid>
      <link>http://www.phpdeveloper.org/news/6486</link>
      <description><![CDATA[<p>
From the ThinkingPHP blog today, <i>Felix Geisendorfer</i> <a href="http://www.thinkingphp.org/2006/10/11/basic-cakephp-templating-skills/">has shared</a> some of his experience to help those CakePHP users out there that are looking at doing more templating to their applications than just the normal index changes.
</p>
<blockquote>
One of the things I don't see getting to much coverage is how to create good templates when working with CakePHP. Since those are written in plain PHP, this does not apply to CakePHP only. So I'm sure many people have already developed their own style that they are comfortable with and I don't ask for them to change it. However, maybe some people new to the framework / language can benifit by taking a look at the one I'm using.
</blockquote>
<p>
He <a href="http://www.thinkingphp.org/2006/10/11/basic-cakephp-templating-skills/">covers</a> a few different topics: 
<ul>PHP tags
<li>Conditions
<li>Loops
<li>the linebreak issue
<li>avoiding multi-line statements
<li>Creating Zebra striped table rows
</ul>
The code included on some of the points (not the multi-line or the PHP tags items) is simple and is summed up in less than six lines.
</p>]]></description>
      <pubDate>Thu, 12 Oct 2006 07:44:00 -0500</pubDate>
    </item>
    <item>
      <title><![CDATA[Hardened-PHP Project: Advisory - PHP open_basedir Race Condition Vulnerability]]></title>
      <guid>http://www.phpdeveloper.org/news/6419</guid>
      <link>http://www.phpdeveloper.org/news/6419</link>
      <description><![CDATA[<p>
The Hardened-PHP Project has released another vulnerability today, this time it's <a href="http://www.hardened-php.net/advisory_082006.132.html">an issue</a> with one of PHP's own internal functions - open_basedir.
</p>
<blockquote>
<p>
The design of the open_basedir feature of PHP that is meant to disallow access to files outside a set of configured directories is vulnerable to race conditions.
</p>
<p>
It was discovered that this design flaw can be exploited with the usage of PHP's symlink() function in a very easy way. We believe that the only solution to this problem is disabling the function symlink() while open_basedir is used (this feature was therefore added to our Suhosin PHP Security Extension).
</p>
</blockquote>
<p>
They also <a href="http://www.hardened-php.net/advisory_082006.132.html">note</a>, unfortunately, that the problem may not be fixable due to how it can be implemented. They provide a more detailed explaination and some PHP psuedo-code to help illustrate the point.
</p>]]></description>
      <pubDate>Wed, 04 Oct 2006 09:10:00 -0500</pubDate>
    </item>
  </channel>
</rss>
