<?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>Patrick&#039;s playground &#187; PHP</title>
	<atom:link href="http://www.vankouteren.eu/blog/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.vankouteren.eu/blog</link>
	<description>Random thoughts, problems and solutions</description>
	<lastBuildDate>Sun, 29 Jan 2012 07:53:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>PEAR install on Linux by a n00b for n00bs</title>
		<link>http://www.vankouteren.eu/blog/2010/01/pear-install-on-linux-by-a-n00b-for-n00bs/</link>
		<comments>http://www.vankouteren.eu/blog/2010/01/pear-install-on-linux-by-a-n00b-for-n00bs/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 12:04:23 +0000</pubDate>
		<dc:creator>Patrick van Kouteren</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webhosting]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PEAR]]></category>
		<category><![CDATA[PEAR install]]></category>

		<guid isPermaLink="false">http://www.vankouteren.eu/blog/?p=186</guid>
		<description><![CDATA[Okay, I must admit: I'm a programmer and I know some commands. Because I want to use PEAR packages, I needed to install it. The installing command is quite easy to find, but I had a hard time determining the directory structure. Some searching on the internet and an IRC conversation (EFNet #pear, thanks davidc_!) [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.vankouteren.eu/blog/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCpp.js"></script>
<p>Okay, I must admit: I'm a programmer and I know some commands. Because I want to use PEAR packages, I needed to install it. The installing command is quite easy to find, but I had a hard time determining the directory structure. Some searching on the internet and an IRC conversation (EFNet #pear, thanks davidc_!) later I was able to install PEAR in a quite reasonable directory structure.<span id="more-186"></span></p>
<p>Now that all is done it sounds logical. This blogpost is meant for people who want to install PEAR, but are not sure how to do it or about the directories which need to be specified.</p>
<p><strong>Starting install</strong></p>
<p>Log on to your server on the command line (as root). The install acan then be started as follows:</p>
<pre>lynx -source http://pear.php.net/go-pear | php</pre>
<p><strong>Directories</strong></p>
<p>After some questions (which in 99% of the cases just get the default answer), you'll get the prompt for the directories. After adjustment, my structure looks as follows:</p>
<pre>1. Installation prefix ($prefix) : /usr
2. Temporary files directory     : $prefix/temp
3. Binaries directory            : $prefix/bin
4. PHP code directory ($php_dir) : $prefix/share/PEAR
5. Documentation base directory  : $php_dir/docs
6. Data base directory           : $php_dir/data
7. Tests base directory          : $php_dir/tests</pre>
<p><strong>Finishing installation</strong></p>
<p>When the installation is done, the config (php.ini) file can automatically be adjusted. Note that you have to restart apache to load this new config.</p>
<p><strong>The full overview</strong></p>
<p>A complete overview from my PEAR install in- and output is given below.</p>
<p><pre class="brush: cpp">[root@server usr]# lynx -source http://pear.php.net/go-pear | php
Welcome to go-pear!

Go-pear will install the 'pear' command and all the files needed by
it.&Acirc;&nbsp; This command is your tool for PEAR installation and maintenance.

Go-pear also lets you download and install the following optional PEAR
packages: PEAR_Frontend_Web-beta, PEAR_Frontend_Gtk2, MDB2.


If you wish to abort, press Control-C now, or press Enter to continue:

HTTP proxy (http://user:password@proxy.myhost.com:port), or Enter for none::

Below is a suggested file layout for your new PEAR installation.&Acirc;&nbsp; To
change individual locations, type the number in front of the
directory.&Acirc;&nbsp; Type 'all' to change all of them or simply press Enter to
accept these locations.

1. Installation prefix ($prefix) : /usr
2. Temporary files directory&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; : $prefix/temp
3. Binaries directory&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; : $prefix/bin
4. PHP code directory ($php_dir) : $prefix/PEAR
5. Documentation base directory&Acirc;&nbsp; : $php_dir/docs
6. Data base directory&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; : $php_dir/data
7. Tests base directory&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; : $php_dir/tests

1-7, 'all' or Enter to continue: 4
PHP code directory ($php_dir) [$prefix/PEAR] : $prefix/share/PEAR

Below is a suggested file layout for your new PEAR installation.&Acirc;&nbsp; To
change individual locations, type the number in front of the
directory.&Acirc;&nbsp; Type 'all' to change all of them or simply press Enter to
accept these locations.

1. Installation prefix ($prefix) : /usr
2. Temporary files directory&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; : $prefix/temp
3. Binaries directory&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; : $prefix/bin
4. PHP code directory ($php_dir) : $prefix/share/PEAR
5. Documentation base directory&Acirc;&nbsp; : $php_dir/docs
6. Data base directory&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; : $php_dir/data
7. Tests base directory&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; : $php_dir/tests

1-7, 'all' or Enter to continue:
PHP Warning:&Acirc;&nbsp; putenv(): Safe Mode warning: Cannot set environment variable 'TMPDIR' - it's not in the allowed list in /usr/- on line 1264

The following PEAR packages are bundled with PHP: PEAR_Frontend_Web-beta,
PEAR_Frontend_Gtk2, MDB2.
Would you like to install these as well? [Y/n] : n

Loading zlib: ok

Bootstrapping Installer...................
Bootstrapping PEAR.php............(remote) ok
Bootstrapping Archive/Tar.php............(remote) ok
Bootstrapping Console/Getopt.php............(remote) ok

Extracting installer..................
Downloading package: PEAR.............ok
Downloading package: Structures_Graph....ok

Preparing installer..................
Updating channel &quot;doc.php.net&quot;
Update of Channel &quot;doc.php.net&quot; succeeded
Updating channel &quot;pear.php.net&quot;
Update of Channel &quot;pear.php.net&quot; succeeded
Updating channel &quot;pecl.php.net&quot;
Update of Channel &quot;pecl.php.net&quot; succeeded

Installing selected packages..................
Downloading and installing package: PEAR.............warning: pear/PEAR requires package &quot;pear/Archive_Tar&quot; (recommended version 1.3.3)
warning: pear/PEAR requires package &quot;pear/Structures_Graph&quot; (recommended version 1.0.2)
warning: pear/PEAR requires package &quot;pear/Console_Getopt&quot; (recommended version 1.2.3)
warning: pear/PEAR requires package &quot;pear/XML_Util&quot; (recommended version 1.2.1)
downloading PEAR-1.9.0.tgz ...
Starting to download PEAR-1.9.0.tgz (291,634 bytes)
.............................................................done: 291,634 bytes
install ok: channel://pear.php.net/PEAR-1.9.0
PEAR: Optional feature webinstaller available (PEAR's web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)
PEAR: To install optional features use &quot;pear install pear/PEAR#featurename&quot;
Installing bootstrap package: Structures_Graph.......install ok: channel://pear.php.net/Structures_Graph-1.0.3
Downloading and installing package: Archive_Tar-stable.......downloading Archive_Tar-1.3.5.tgz ...
Starting to download Archive_Tar-1.3.5.tgz (17,184 bytes)
...done: 17,184 bytes
install ok: channel://pear.php.net/Archive_Tar-1.3.5
Downloading and installing package: Console_Getopt-stable.......downloading Console_Getopt-1.2.3.tgz ...
Starting to download Console_Getopt-1.2.3.tgz (4,011 bytes)
...done: 4,011 bytes
install ok: channel://pear.php.net/Console_Getopt-1.2.3

******************************************************************************
WARNING!&Acirc;&nbsp; The include_path defined in the currently used php.ini does not
contain the PEAR PHP directory you just specified:
&amp;lt;/usr/share/PEAR&amp;gt;
If the specified directory is also not in the include_path used by
your scripts, you will have problems getting any PEAR packages working.


Would you like to alter php.ini &amp;lt;/etc/php.ini&amp;gt;? [Y/n] : Y

php.ini &amp;lt;/etc/php.ini&amp;gt; include_path updated.

Current include path&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; : .:
Configured directory&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; : /usr/share/PEAR
Currently used php.ini (guess) : /etc/php.ini
Press Enter to continue:

The 'pear' command is now at your service at /usr/bin/pear
[root@server usr]# /etc/init.d/httpd restart
Stopping httpd:&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; [&Acirc;&nbsp; OK&Acirc;&nbsp; ]
Starting httpd:&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; [&Acirc;&nbsp; OK&Acirc;&nbsp; ]</pre></p>
]]></content:encoded>
			<wfw:commentRss>http://www.vankouteren.eu/blog/2010/01/pear-install-on-linux-by-a-n00b-for-n00bs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing using WampServer 2: additions</title>
		<link>http://www.vankouteren.eu/blog/2009/12/developing-using-wampserver-2-additions/</link>
		<comments>http://www.vankouteren.eu/blog/2009/12/developing-using-wampserver-2-additions/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 13:42:38 +0000</pubDate>
		<dc:creator>Patrick van Kouteren</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[crontab]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[WampServer]]></category>

		<guid isPermaLink="false">http://www.vankouteren.eu/blog/?p=175</guid>
		<description><![CDATA[WampServer 2.0 is a nice tool to help you develop a new site on your local computer. However, you'll probably need more packages/libraries than those included with WampServer. This post is about installing extra common features which are mostly present at hosting servers, but not (directly) on WampServer. PHPUnit One of the features which I [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.vankouteren.eu/blog/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCpp.js"></script>
<p><a title="WampServer 2.0" href="http://www.wampserver.com/en/" target="_blank">WampServer 2.0</a> is a nice tool to help you develop a new site on your local computer. However, you'll probably need more packages/libraries than those included with WampServer. This post is about installing extra common features which are mostly present at hosting servers, but not (directly) on WampServer.</p>
<p><span id="more-175"></span></p>
<p><strong>PHPUnit</strong></p>
<p>One of the features which I need when starting a new project is a Unittest framework. The two most common are <a title="SimpleTest" href="http://www.simpletest.org/" target="_blank">SimpleTest</a> and <a title="PHPUnit" href="http://www.phpunit.de/" target="_blank">PHPUnit</a>. SimpleTest can be downloaded and used right away. The <a title="PHPUnit manual" href="http://www.phpunit.de/manual/current/en/installation.html" target="_blank">PHPUnit manual</a> advises to use PEAR to install PHPUnit. <a title="Install PEAR and PHPUnit" href="http://jsdoodnauth.wordpress.com/2008/11/05/installing-wamp-and-phpunit-on-windows/" target="_blank">Joshua Doodnauth</a> explains how to activate PEAR and how to install PHPUnit on WampServer. However, as I was running WampServer 2.0i with PHP 5.3, the file go-pear.phar in the PEAR subdirectory was not working correctly. The solution to this is presented <a title="Install PEAR and PHPUnit on WampServer 2.0 with PHP 5.3" href="http://blog.pear.php.net/2009/07/01/php-53-windows-and-pear/" target="_blank">here</a>. By executing the command</p>
<p><code>php -d phar.require_hash=0 go-pear.phar</code></p>
<p>the problem is solved and PEAR is installed.</p>
<p>After that however, when I tried to get back to Joshua's how-to, the PEAR version was not correct. <a title="Update PEAR" href="http://www.electricmonk.nl/log/2009/04/12/easy-pear-package-creation/" target="_blank">This site</a> helped me to update PEAR. When PEAR is installed, type</p>
<p><code>pear channel-update pear.php.net</code></p>
<p>in the terminal. This will update the PEAR channel. After that, by typing in</p>
<p><code>pear upgrade PEAR</code></p>
<p>the PEAR installation will be updated. From that point on PHPUnit can be installed as described at Joshua's blog.</p>
<p><strong>Crontab</strong></p>
<p>A feature which I use pretty often is the crontab. It can schedule and execute scripts at particular moments. A crontab is not provided by WampServer. However, there are external solutions available. One such solutions is <a title="nnSoft :: nnCron" href="http://www.nncron.ru/" target="_blank">nnCron of nnSoft</a>. This is a crontab which can be installed by executing the installer file. The LITE (free) version already provides the desired functionality. The way it works is pretty simple: in the install directory there are batch files startcron.bat and stopcron.bat which allow to start the crontab and stop it. The file cron.tab contains the <a title="Crontab lines" href="http://www.willmaster.com/library/web-development/using_cron.php" target="_blank">crontab lines</a>.</p>
<p>N.B. Using WampServer and this Crontab, you can write automated tasks in PHP for executing tasks on your local machine. (Nice!).</p>
<p><strong>Mootools</strong></p>
<p>Today I was unpleasantly surprised that Mootools doesn't work on WampServer. I tried various demo's of AJAX calls, but none of them worked. When I tried one on an online web server it worked directly. So far I haven't been able to find topics about this problem, so any help is appreciated!'</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vankouteren.eu/blog/2009/12/developing-using-wampserver-2-additions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple PHP SOAP example</title>
		<link>http://www.vankouteren.eu/blog/2009/03/simple-php-soap-example/</link>
		<comments>http://www.vankouteren.eu/blog/2009/03/simple-php-soap-example/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 10:15:15 +0000</pubDate>
		<dc:creator>Patrick van Kouteren</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP SOAP example]]></category>
		<category><![CDATA[PHP Web service example]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[WSDL file analyzation]]></category>

		<guid isPermaLink="false">http://www.vankouteren.eu/blog/?p=46</guid>
		<description><![CDATA[This post will show a simple example of how to interpretate a WSDL file and a very simple, yet quick example of how to extract information from this file through PHP. Prior assumptions In this example I assume that you've already have SOAP enabled in your PHP configuration because this is beyond the scope of [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.vankouteren.eu/blog/wp-content/plugins/wordpress-code-snippet/scripts/shBrushCpp.js"></script>
            <script type="text/javascript" src="http://www.vankouteren.eu/blog/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
            <script type="text/javascript" src="http://www.vankouteren.eu/blog/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
<p>This post will show a simple example of how to interpretate a WSDL file and a very simple, yet quick example of how to extract information from this file through PHP.</p>
<p><strong>Prior assumptions</strong></p>
<p>In this example I assume that you've already have SOAP enabled in your PHP configuration because this is beyond the scope of this example. If you're not sure, you can check your <a title="How to check your PHP configuration" href="https://support.kayako.com/index.php?_m=knowledgebase&amp;_a=viewarticle&amp;kbarticleid=103&amp;nav=0" target="_blank">phpinfo file</a>. There should be something like this:</p>
<div id="attachment_47" class="wp-caption aligncenter" style="width: 160px"><a href="http://www.vankouteren.eu/blog/wp-content/uploads/2009/03/phpini_soap.jpg"><img class="size-thumbnail wp-image-47" title="SOAP information" src="http://www.vankouteren.eu/blog/wp-content/uploads/2009/03/phpini_soap-150x101.jpg" alt="SOAP information" width="150" height="101" /></a><p class="wp-caption-text">SOAP information</p></div>
<p><span id="more-46"></span></p>
<p><strong>Example WSDL file</strong></p>
<p>For the example WSDL file we'll take <a href="http://footballpool.dataaccess.eu/data/info.wso?wsdl" target="_blank">this WSDL file</a>. It's about the World Championship football 2010 held in South Africa.</p>
<p><strong>Analyzing the WSDL file</strong></p>
<p>Let's analyze this file for a simple method we can call. I usually work with <a title="Notepad++" href="http://notepad-plus.sourceforge.net/" target="_blank">Notepad++</a> or <a title="Smultron" href="http://tuppis.com/smultron/" target="_blank">Smultron</a>. The following line number apply to Notepad++ and probably also to Smulton.</p>
<p>Let's try and print the top goal scorers of the tournament. For doing this, we can see the following on line 1295 - 1300:</p>
<p><pre class="brush: xml">&lt;operation name=&quot;TopGoalScorers&quot;&gt;
  &lt;documentation&gt;
Returns an array with the top N goal scorers and their current score. Pass 0 as TopN and you get them all.
  &lt;/documentation&gt;
  &lt;input message=&quot;tns:TopGoalScorersSoapRequest&quot;/&gt;
  &lt;output message=&quot;tns:TopGoalScorersSoapResponse&quot;/&gt;
&lt;/operation&gt;</pre></p>
<p>We now see that the operation we should call is called <span style="color: #ff0000;">TopGoalScorers</span>. This operation expects as input a <span style="color: #0000ff;">TopGoalScorersSoapRequest</span>. We don't know what it is yet, so let's find out. If we search the document for this message, we get to line 999 - 1002 which says:</p>
<p><pre class="brush: xml">&lt;message name=&quot;TopGoalScorersSoapRequest&quot;&gt;
  &lt;part name=&quot;parameters&quot; element=&quot;tns:TopGoalScorers&quot; /&gt;
&lt;/message&gt;</pre></p>
<p>Right. So now we know that the <span style="color: #0000ff;">TopGoalScorersSoapRequest </span>consists of just one part (the parameters). We know that the element is called <span style="color: #0000ff;">TopGoalScorers</span>, but we do not know anything about this parameter yet. So we search the document for the element <span style="color: #0000ff;">TopGoalScorers</span>. We can find this element at line 384 - 390. These lines say</p>
<p><pre class="brush: xml">&lt;xs:element name=&quot;TopGoalScorers&quot;&gt;
  &lt;xs:complexType&gt;
    &lt;xs:sequence&gt;
      &lt;xs:element name=&quot;iTopN&quot; type=&quot;xs:int&quot; /&gt;
    &lt;/xs:sequence&gt;
  &lt;/xs:complexType&gt;
&lt;/xs:element&gt;</pre></p>
<p>Now there we have it: we now finally know that the method <span style="color: #0000ff;">TopGoalScorers </span>which we saw in the first WSDL fragment expects one parameter as input. This parameter is called <span style="color: #ff0000;">iTopN </span>and is of the type <span style="color: #339966;">int</span>.</p>
<p><strong>Getting to the code</strong></p>
<p>Finally we can do something with the WSDL. Actually we can do this in a very short way thanks to the PHP SoapClient!</p>
<p>Calling the service with the parameter and obtaining the results can be done in just 2 lines of code. Let's give it a try and obtain the top 5 goal scorers. We can do this by the following two lines:</p>
<p><pre class="brush: php">$client = new SoapClient(&quot;http://footballpool.dataaccess.eu/data/info.wso?wsdl&quot;);
$result = $client-&gt;TopGoalScorers(array('iTopN'=&gt;5));</pre></p>
<p>Note that we use the information we obtained from the WSDL file here: on the $client object, we call the method <span style="color: #ff0000;">TopGoalScorers </span>and provide an array of parameters. In this case the array contains only one parameter: the <span style="color: #ff0000;">iTopN </span>parameter with an <span style="color: #339966;">int </span>value of 5.</p>
<p>The result will contain an object, so you will need to traverse the object structure.</p>
<p><strong>Choose how much results</strong></p>
<p>There are a lot of possibilities for abstracting such a Web Service call further. I will just give a very simple example file where you can choose how many results you want to see and visualize this in a table.</p>
<p>Code:</p>
<p><pre class="brush: php">&lt;?php

if ($_POST['topn'] &gt; 0 &amp;&amp; (int) $_POST['topn'] &lt;= 20){
  $topn = (int) $_POST['topn'];
  $client = new SoapClient(&quot;http://footballpool.dataaccess.eu/data/info.wso?wsdl&quot;);
  $result = $client-&gt;TopGoalScorers(array('iTopN' =&gt; $topn));
  // Note that $array contains the result of the traversed object structure
  $array = $result-&gt;TopGoalScorersResult-&gt;tTopGoalScorer;

  print &quot;
    &lt;table border='2'&gt;
      &lt;tr&gt;
        &lt;th&gt;Rank&lt;/th&gt;
        &lt;th&gt;Name&lt;/th&gt;
        &lt;th&gt;Goals&lt;/th&gt;
      &lt;/tr&gt;
  &quot;;
  
  foreach($array as $k=&gt;$v){
    print &quot;
      &lt;tr&gt;
        &lt;td align='right'&gt;&quot; . ($k+1) . &quot;&lt;/td&gt;
          &lt;td&gt;&quot; . $v-&gt;sName . &quot;&lt;/td&gt;
          &lt;td align='right'&gt;&quot; . $v-&gt;iGoals . &quot;&lt;/td&gt;
        &lt;/tr&gt;&quot;;
  }
  
  print &quot;&lt;/table&gt;&quot;;
}
else {

?&gt;

  &lt;form id=&quot;topscorers&quot; action=&quot;index.php&quot; method=&quot;post&quot;&gt;
    How long should your topscorers list be? (Choose a digit between 1 and 20).
    &lt;input id=&quot;topn&quot; name=&quot;topn&quot; size=&quot;2&quot; type=&quot;text&quot; value=&quot;10&quot; /&gt;
    &lt;input id=&quot;submit&quot; name=&quot;submit&quot; type=&quot;submit&quot; value=&quot;submit&quot; /&gt;
  &lt;/form&gt;

&lt;?php

}

?&gt;</pre></p>
<p>Note that the form calls <span style="color: #993366;">index.php</span>. This is because I called this script index.php. If you call your script differently, the action should be your script file name. (The reason why I didn't use $_SERVER['PHP_SELF'] is because of <a title="How $_SERVER['PHP_SELF'] can cause an XSS problem" href="http://www.scriptorama.nl/security/tips-veiligere-site-phpself" target="_blank">this</a> Dutch source about how this element can cause an XSS problem).</p>
<p>I hope you found the example useful. If not, let me know! Now go and play with PHP, SOAP and WSDL some more!</p>
<p>Edit 11/08/2010: Noticed that the WSDL was removed. Changed to WC 2010 WSDL file which seems to have the same format as the original WSDL.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.vankouteren.eu/blog/2009/03/simple-php-soap-example/feed/</wfw:commentRss>
		<slash:comments>93</slash:comments>
		</item>
	</channel>
</rss>

