<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dirty Motherfucking Blog &#187; php</title>
	<atom:link href="http://www.dirty-motherfucker.org/blog/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dirty-motherfucker.org/blog</link>
	<description>All kinds of shit</description>
	<lastBuildDate>Tue, 17 Aug 2010 18:19:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>Passing SOAP faults from NuSoap to C#</title>
		<link>http://www.dirty-motherfucker.org/blog/2010/04/27/passing-soap-faults-from-nusoap-to-c/</link>
		<comments>http://www.dirty-motherfucker.org/blog/2010/04/27/passing-soap-faults-from-nusoap-to-c/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 19:59:06 +0000</pubDate>
		<dc:creator>gencha</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[nusoap]]></category>
		<category><![CDATA[soap]]></category>

		<guid isPermaLink="false">http://www.dirty-motherfucker.org/blog/?p=308</guid>
		<description><![CDATA[I am currently implementing a SOAP interface for a PHP application I am working on. The built-in SOAP support in PHP didn&#8217;t really provide everything I needed (namely WSDL generation), so I went with NuSoap. After a lot of pain trying to get a WSDL out of it, that Visual Studio would consume, and correctly [...]]]></description>
			<content:encoded><![CDATA[<p>I am currently implementing a SOAP interface for a PHP application I am working on. The built-in SOAP support in PHP didn&#8217;t really provide everything I needed (namely WSDL generation), so I went with NuSoap.<br />
After a lot of pain trying to get a WSDL out of it, that Visual Studio would consume, and correctly parse the SOAP messages I return, I came along the next big issue today.<br />
Whenever I tried to pass a fault from the server to my C# application, I would receive a nasty exception:</p>
<blockquote><p>Server returned an invalid SOAP Fault.  Please see InnerException for more details.</p></blockquote>
<p>Ok, so let&#8217;s look at that InnerException:</p>
<blockquote><p>Element &#8216;faultstring&#8217; with namespace name &#8221; was not found. Line 6, position 126.</p></blockquote>
<p>What? No &#8220;faultstring&#8221; element? Impossible!<br />
After double-checking my code for obvious errors and confirming with SoapUI that the &#8220;faultstring&#8221; element was indeed present, I started looking for the source of the issue. First I checked the nusoap_fault source, if there was anything weird in there that might confuse the CLR. But it seemed fine.</p>
<p>So I was sure the problem must be in the .Net libraries. I went on to decompile the binaries that are in use when making SOAP requests (namely System.ServiceModel). The actual issue was in System.ServiceModel.Channels.ReceivedFault.CreateFault11(). That function expects the elements of a SOAP fault&#8217;s body to be in a precise order! If the order is anything else than what it expects, it will throw the exception mentioned above.</p>
<p>I did not take the time to check whether this behavior is actually defined by the SOAP definition (although I highly doubt it). I just went on to extend the NuSoap classes to fix the issue. And here they are:</p>
<p>NuSoapServer.php:</p>
<pre class="brush: php;">
&lt;?php
  require_once( &quot;nusoap/nusoap.php&quot; );

  require_once( dirname( __FILE__ ) . &quot;/NuSoapFault.php&quot; );

  /**
  * Wraps a NuSoap server.
  * This class overrides the fault method of nusoap_server to use a customized version of nusoap_fault.
  */
  class NuSoapServer extends nusoap_server {
    /**
     * Specify a fault to be returned to the client.
     * This also acts as a flag to the server that a fault has occured.
     *
     * @param        string $faultcode
     * @param        string $faultstring
     * @param        string $faultactor
     * @param        string $faultdetail
     * @access   public
     */
    function fault( $faultcode, $faultstring, $faultactor='', $faultdetail='' ) {
      if( $faultdetail == &quot;&quot; &amp;&amp; $this-&gt;debug_flag ) {
        $faultdetail = $this-&gt;getDebug();
      }
      $this-&gt;fault = new NuSoapFault( $faultcode, $faultactor, $faultstring, $faultdetail );
      $this-&gt;fault-&gt;soap_defencoding = $this-&gt;soap_defencoding;
    }

  }
?&gt;
</pre>
<p>NuSoapFault.php:</p>
<pre class="brush: php;">
&lt;?php
  require_once( &quot;nusoap/nusoap.php&quot; );

  /**
  * Wraps a SOAP fault.
  * This class overrides nusoap_fault's serialize() method to fix the order in which it's members are serialized.
  * This is necessary to allow for communication with .Net clients.
  */
  class NuSoapFault extends nusoap_fault {
    /**
     * serialize a fault
     *
     * @return       string  The serialization of the fault instance.
     * @access   public
     */
    function serialize() {
      $ns_string = '';
      foreach( $this-&gt;namespaces as $k =&gt; $v ) {
        $ns_string .= &quot;\n  xmlns:$k=\&quot;$v\&quot;&quot;;
      }
      $return_msg =
        '&lt;?xml version=&quot;1.0&quot; encoding=&quot;' . $this-&gt;soap_defencoding . '&quot;?&gt;' .
        '&lt;SOAP-ENV:Envelope SOAP-ENV:encodingStyle=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot;' . $ns_string . &quot;&gt;\n&quot; .
          '&lt;SOAP-ENV:Body&gt;' .
            '&lt;SOAP-ENV:Fault&gt;' .
              $this-&gt;serialize_val( $this-&gt;faultcode,   'faultcode'   ) .
              $this-&gt;serialize_val( $this-&gt;faultstring, 'faultstring' ) .
              $this-&gt;serialize_val( $this-&gt;faultactor,  'faultactor'  ) .
              $this-&gt;serialize_val( $this-&gt;faultdetail, 'detail'      ) .
            '&lt;/SOAP-ENV:Fault&gt;' .
          '&lt;/SOAP-ENV:Body&gt;' .
        '&lt;/SOAP-ENV:Envelope&gt;';
      return $return_msg;
    }

  }
?&gt;
</pre>
<p>So now in my actual code I don&#8217;t use nusoap_server anymore, but my own NuSoapServer. And now everything works fine.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dirty-motherfucker.org/blog/2010/04/27/passing-soap-faults-from-nusoap-to-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash Player version in AWStats &#8211; Revised</title>
		<link>http://www.dirty-motherfucker.org/blog/2008/11/20/flash-player-version-in-awstats-revised/</link>
		<comments>http://www.dirty-motherfucker.org/blog/2008/11/20/flash-player-version-in-awstats-revised/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 10:46:43 +0000</pubDate>
		<dc:creator>gencha</dc:creator>
				<category><![CDATA[administration]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[awstats]]></category>
		<category><![CDATA[flash player]]></category>
		<category><![CDATA[javacsript]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.dirty-motherfucker.org/blog/?p=198</guid>
		<description><![CDATA[My first implementation of this idea may have been sufficient for general use. For inclusion in WordPress however it was problematic at best. Now that I have revised (and tested) it, I thought I&#8217;d share this updated WordPress plugin. &#60;?php /* Plugin Name: Flash version Detection Plugin URI: http://www.dirty-motherfucker.org/ Description: Detects flash version Version: 0.1 [...]]]></description>
			<content:encoded><![CDATA[<p>My <a href="http://www.dirty-motherfucker.org/blog/2008/11/12/including-flash-player-version-in-awstats/">first implementation</a> of this idea may have been sufficient for general use. For inclusion in WordPress however it was problematic at best.<br />
Now that I have revised (and tested) it, I thought I&#8217;d share this updated WordPress plugin.</p>
<pre class="brush: php;">
&lt;?php
/*
Plugin Name: Flash version Detection
Plugin URI: http://www.dirty-motherfucker.org/
Description: Detects flash version
Version: 0.1
Author: gencha
Author URI: http://www.dirty-motherfucker.org
*/

$plugin_root = get_settings('siteurl') . '/wp-content/plugins/'.dirname(plugin_basename(__FILE__));

if( preg_match(&quot;/(\/\?feed=|\/feed)/i&quot;,$_SERVER['REQUEST_URI']) ) {
        // RSS Feeds
        // do nothing
} else {
        add_action('wp_head', 'add_head');
}

function add_head() {
	global $plugin_root;
	echo '
	&lt;!-- Flash player version detection --&gt;
	&lt;script src=&quot;' . $plugin_root . '/swfobject.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
		window.onload = function() {
			var version = deconcept.SWFObjectUtil.getPlayerVersion();
			if( document.getElementById &amp;&amp; version[&quot;major&quot;]&gt; 0 ) {
				var flash_version = version[&quot;major&quot;] +&quot;.&quot;+ version[&quot;minor&quot;] +&quot;.&quot;+ version[&quot;rev&quot;];
				document.getElementById(&quot;flashversion&quot;).innerHTML = &quot;&lt;iframe src=\&quot;' . get_settings(&quot;siteurl&quot;) . '/flash_player_version.php?version=&quot; + flash_version + &quot;\&quot; style=\&quot;display: none;\&quot;&gt;&lt;/iframe&gt;&quot;;
			}
		}
	&lt;/script&gt;
	';
}
?&gt;
</pre>
<p>In this version I put the JavaScript code inline. Although I&#8217;m not a big fan of that, it&#8217;s reasonable in this case and I have all the code in one place. This made it easier to fix the second bug. Which was that the whole concept only worked on the main page. On other pages the browser couldn&#8217;t find the flash_version.php file. Which resulted in nasty 404 errors. Now I can simply put the blogs base path into the JavaScript code and everything is well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dirty-motherfucker.org/blog/2008/11/20/flash-player-version-in-awstats-revised/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Including Flash Player version in AWStats</title>
		<link>http://www.dirty-motherfucker.org/blog/2008/11/12/including-flash-player-version-in-awstats/</link>
		<comments>http://www.dirty-motherfucker.org/blog/2008/11/12/including-flash-player-version-in-awstats/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 11:22:09 +0000</pubDate>
		<dc:creator>gencha</dc:creator>
				<category><![CDATA[administration]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[awstats]]></category>
		<category><![CDATA[flash player]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.dirty-motherfucker.org/blog/?p=178</guid>
		<description><![CDATA[I was interested in what Flash Player version people are using when visiting my site. So i looked around the web for a solution including AWStats. At first i was out of luck until i noticed that AWStats has a discussion forum on sourceforge as well. Someone there came up with a solution which was [...]]]></description>
			<content:encoded><![CDATA[<p>I was interested in what Flash Player version people are using when visiting my site. So i looked around the web for a solution including <a href="http://awstats.sourceforge.net/">AWStats</a>. At first i was out of luck until i noticed that AWStats has a discussion forum on sourceforge as well.<br />
Someone there came up with a <a href="http://sourceforge.net/forum/message.php?msg_id=4711036">solution</a> which was almost perfect for me.</p>
<p>First of all you&#8217;re gonna want to put this in your awstats config file for your site:</p>
<pre class="brush: plain;">
ExtraSectionName1=&quot;Flash Player Version&quot;
ExtraSectionCodeFilter1=&quot;200 304&quot;
ExtraSectionCondition1=&quot;URL,\/flash_player_version\.php&quot;
ExtraSectionFirstColumnTitle1=&quot;Version&quot;
ExtraSectionFirstColumnValues1=&quot;QUERY_STRING,version=([^&amp;]+)&quot;
ExtraSectionFirstColumnFormat1=&quot;%s&quot;
ExtraSectionStatTypes1=PL
ExtraSectionAddAverageRow1=0
ExtraSectionAddSumRow1=1
MaxNbOfExtra1=100
MinHitExtra1=1
</pre>
<p>Note that i made some slight adjustments to some strings compared to the original version.<br />
Now you need to add some JavaScript to make appropriate URL requests that AWStats can read from.<br />
Note that this is the original code, not the one i finally ended up with.</p>
<pre class="brush: jscript;">
&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;../swfobject/swfobject.js&quot;&gt;&lt;/script&gt; 

&lt;script type=&quot;text/javascript&quot;&gt;
var version = deconcept.SWFObjectUtil.getPlayerVersion();
if (document.getElementById &amp;&amp; version[&quot;major&quot;] &gt; 0) {
var flash_version = version['major'] +&quot;.&quot;+ version['minor'] +&quot;.&quot;+ version['rev'];
document.getElementById('flashversion').innerHTML = &quot;&lt;iframe src=\&quot;../version.php?version=&quot; + flash_version + &quot;\&quot; style=\&quot;display: none;\&quot;&gt;&lt;/iframe&gt;&quot;;
}
&lt;/script&gt;
</pre>
<p>As i did not want to just jam this into my theme files, i wrote a little WordPress plugin to do the above task.</p>
<pre class="brush: php;">
&lt;?php
/*
Plugin Name: Flash Player Version Detection
Plugin URI: http://www.dirty-motherfucker.org/
Description: Detects flash version
Version: 0.1
Author: gencha
Author URI: http://www.dirty-motherfucker.org
*/

$plugin_root = get_settings('siteurl') . '/wp-content/plugins/'.dirname(plugin_basename(__FILE__));

if( preg_match(&quot;/(\/\?feed=|\/feed)/i&quot;,$_SERVER['REQUEST_URI']) ) {
        // RSS Feeds
        // do nothing
} else {
        add_action('wp_head', 'add_head');
}

function add_head() {
	global $plugin_root;
	echo '
        &lt;!-- Flash player version detection --&gt;
        &lt;script src=&quot;' . $plugin_root . '/swfobject.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
        &lt;script src=&quot;' . $plugin_root . '/flash_version.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
	';
}
?&gt;
</pre>
<p>I took some small bits from the <a href="http://kimili.com/plugins/kml_flashembed">KML Flash Embed</a> plugin. This will include the appropriate JavaScript files in your blog. Obviously, if you&#8217;re not using WordPress, this is of no use to you. You can just directly include <a href="http://blog.deconcept.com/swfobject/">SWFObject</a> in the head section of your site.</p>
<p>Now the important bit is the JavaScript file that actually performs the URL request which AWStats will later see.</p>
<pre class="brush: jscript;">
window.onload = function() {
	var version = deconcept.SWFObjectUtil.getPlayerVersion();
	if( document.getElementById &amp;&amp; version[&quot;major&quot;] &gt; 0 ) {
		var flash_version = version['major'] +&quot;.&quot;+ version['minor'] +&quot;.&quot;+ version['rev'];
		document.getElementById(&quot;flashversion&quot;).innerHTML = &quot;&lt;iframe src=\&quot;../flash_player_version.php?version=&quot; + flash_version + &quot;\&quot; style=\&quot;display: none;\&quot;&gt;&lt;/iframe&gt;&quot;;
	}
}
</pre>
<p>Now the only thing that is left is that you include an empty div tag with the id &#8220;flashversion&#8221; somewhere in your site. Now THIS i did just jam into my theme :P<br />
Although i am sure there is some hook i can use in the WordPress plugin architecture. But i&#8217;m lazy. So there you have it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dirty-motherfucker.org/blog/2008/11/12/including-flash-player-version-in-awstats/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
