<?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://dirty-motherfucker.org/blog/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://dirty-motherfucker.org/blog</link>
	<description>All kinds of shit</description>
	<lastBuildDate>Wed, 04 Jan 2012 15:38:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4-alpha-19620</generator>
		<item>
		<title>Introducing SDML</title>
		<link>http://dirty-motherfucker.org/blog/2010/09/15/introducing-sdml/</link>
		<comments>http://dirty-motherfucker.org/blog/2010/09/15/introducing-sdml/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 19:50:35 +0000</pubDate>
		<dc:creator>gencha</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sdml]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.dirty-motherfucker.org/blog/?p=316</guid>
		<description><![CDATA[On the server-backend of a project I am currently working on, I was also faced with the task of installation and setup procedures for said backend software. It&#8217;s a PHP application with a MySQL database behind it. I was looking for a simple solution to have a PHP script that would set up the database [...]]]></description>
			<content:encoded><![CDATA[<p>On the server-backend of a project I am currently working on, I was also faced with the task of installation and setup procedures for said backend software. It&#8217;s a PHP application with a MySQL database behind it.</p>
<p>I was looking for a simple solution to have a PHP script that would set up the database for me. Using SQL export/import files is just a pain in the ass. They&#8217;re just quite verbose. So usually I would construct the database in a GUI and then export the .sql file and later re-import it. One positive aspect of this was, that the .sql file could be put under version control.</p>
<p>But I wasn&#8217;t satisfied. So I came up with my own solution to the issue and designed a language with a few keywords and even less parameters, which would allow me to model exactly the database as it was at that point.</p>
<p>SDML is really only intended to be used with InnoDB tables (because of the way foreign key constraints are used) and it always defaults to UTF8 usage. And there is no support for user-defined triggers, function or stored procedures. Given MySQL and PHP, I don&#8217;t like to use functions and SPs in the database anymore. Which is the reason no support is planned in SDML.<br />
However, SDML does automatically create triggers for certain constructs that I use quite often (creating/updating timestamp).</p>
<p>Documentation is quite lacking right now, as, well, I literally just released it. You can find it on this <a href="http://code.google.com/p/sdml/">Google Code</a> site.</p>
<p>TL;DR: I wrote a simple language for fast database prototyping &#8211; <a href="http://code.google.com/p/sdml/">Simple Database Markup Language</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dirty-motherfucker.org/blog/2010/09/15/introducing-sdml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passing SOAP faults from NuSoap to C#</title>
		<link>http://dirty-motherfucker.org/blog/2010/04/27/passing-soap-faults-from-nusoap-to-c/</link>
		<comments>http://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; title: ; notranslate">
&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; title: ; notranslate">
&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://dirty-motherfucker.org/blog/2010/04/27/passing-soap-faults-from-nusoap-to-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flash Player version in AWStats &#8211; Revised</title>
		<link>http://dirty-motherfucker.org/blog/2008/11/20/flash-player-version-in-awstats-revised/</link>
		<comments>http://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. In this version I put the JavaScript code inline. Although I&#8217;m not a big fan of [...]]]></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; title: ; notranslate">
&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://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://dirty-motherfucker.org/blog/2008/11/12/including-flash-player-version-in-awstats/</link>
		<comments>http://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; title: ; notranslate">
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; title: ; notranslate">
&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; title: ; notranslate">
&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; title: ; notranslate">
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://dirty-motherfucker.org/blog/2008/11/12/including-flash-player-version-in-awstats/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

