<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7774545175641926605</id><updated>2012-01-26T22:58:59.715-08:00</updated><title type='text'>Bogdan Albei's blog</title><subtitle type='html'>A technology blog</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bogdan-albei.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7774545175641926605/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bogdan-albei.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>bogdanalbei</name><uri>http://www.blogger.com/profile/02675960448030306069</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7774545175641926605.post-6473687020802684076</id><published>2010-06-19T05:32:00.001-07:00</published><updated>2010-09-16T01:49:12.843-07:00</updated><title type='text'>PHP remote debugging with Xdebug and Eclipse PDT</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:arial;"&gt;Debugging is an  invaluable part of software development. I find it very useful in a  variety of situations, for instance when I want to understand how a  routine works or I need to get rid of a bug that is not exactly easy to  fix just by reading the code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:arial;"&gt;There are several ways to perform debugging in PHP:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;The most straightforward  technique is to use print_r()  and var_dump(). This will alter the  output, it's quick but very dirty.&lt;/span&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;span style="font-family:arial;"&gt;If you're  using this there's  nothing to be ashemed of, everyone is doing it.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Logging into  files/database tables at specific points in  the code. This is cleaner  than the previous method, but it requires  additional effort and usually  polutes the code with logging routines.  Also this is not exactly  debugging, it's logging and analisyng the  logs.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Using proper debugging  tools  like Xdebug or the Zend Debugger, integrated into your PHP IDE.  This is  the clean way to do it, it provides a much better insight into  the  source code, as you can run it interactively, step by step.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-family:arial;"&gt;My main goal in this post is to show  you how to set your debugging environment with Eclipse PDT and Xdebug.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt; &lt;span style="font-family:arial;"&gt;If you're not already using  it, get your Eclipse PDT from &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.eclipse.org/pdt/downloads/"&gt;http://www.eclipse.org/pdt/downloads/&lt;/a&gt;&lt;span style="font-family:arial;"&gt; and install it. Next you will have to get and install  xdebug on the machine where PHP runs(it can be the same machine or some  remote machine). You should be able to get it through PHP PECL with the  following command:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;pecl install  xdebug&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;If the above does not work,  check the Xdebug installation instructions at &lt;/span&gt;&lt;a style="font-family: arial;" href="http://xdebug.org/docs/install"&gt;http://xdebug.org/docs/install&lt;/a&gt;&lt;span style="font-family:arial;"&gt; .&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Once the xdebug  extension was installed, you will have to add the extension to php.ini.  Add the following lines to php.ini:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[&lt;span class="il"  style="font-family:courier new;"&gt;xdebug&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;zend_extension=/path/to/&lt;/span&gt;&lt;span class="il"  style="font-family:courier new;"&gt;xdebug&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;.so(.dll)&lt;/span&gt;  &lt;/div&gt;&lt;div  style="text-align: justify;font-family:courier new;" id=":1es" class="ii gt"&gt;&lt;span class="il"&gt;xdebug&lt;/span&gt;.remote_enable=On&lt;br /&gt;&lt;span class="il"&gt;xdebug&lt;/span&gt;.remote_handler="dbgp"&lt;br /&gt;&lt;span class="il"&gt;xdebug&lt;/span&gt;.remote_mode="req"&lt;br /&gt;&lt;span class="il"&gt;xdebug&lt;/span&gt;.remote_port=9000&lt;br /&gt;&lt;span class="il"&gt;xdebug&lt;/span&gt;.remote_host="YOUR.IP.GOES.HERE"&lt;br /&gt;&lt;span class="il"&gt;xdebug&lt;/span&gt;.remote_log=/path/to/xdebug_remote_log&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt;:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;On Windows+PHP 5.2.14 I had to replace zend_extension with zend_extension_ts:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;zend_extension_ts="c:\\php\\ext\\php_xdebug-2.1.0-5.2-vc6.dll"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Be extra careful  with &lt;/span&gt;&lt;span class="il"  style="font-family:arial;"&gt;xdebug&lt;/span&gt;&lt;span style="font-family:arial;"&gt;.remote_host, this is the host where you develop and run  your Eclipse, and PHP will try and connect to Eclipse when debugging is  enabled.&lt;/span&gt;&lt;span style="font-family:arial;"&gt; Also make sure that the  zend_extension part was not added automatically by the installation, if  it was don't add it again.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;If there is any  mention of the Zend debugger in you php.ini file, you will have to  comment that.&lt;/span&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;span style="font-family:arial;"&gt;Restart  Apache or whatever web server you're using and make sure the Xdebug  installation was correct by running a simple PHP script that contains&lt;/span&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;a href="http://php.net/phpinfo"&gt;phpinfo&lt;/a&gt;()&lt;/span&gt;&lt;span style="font-family:arial;"&gt;  and searching for "xdebug".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Now the  tricky part, Eclipse has to be configured to accept debugging sessions  from XDebug. Follow the steps below:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Open your project in  Eclipse PDT&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;In the main menu select   Project-&gt;Properties&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;On the left  side of the window select "PHP  Debug" and then click on "Configure  Workspace Settings"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;On the "PHP  Debugger" dropdown select  Xdebug and click "Apply"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Click "Configure" to the right of  Xdebug in the same  window.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Select Xdebug and click  "Configure".&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;On the "Accept remote  session(JIT)"  select "any" and click "OK". This is extremely important  and this is  where most people get stuck.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:arial;"&gt;That's it, Eclipse is  now configured, now all we need is to be able to be in control of our  debugging sessions. For this we will need to install a Firefox extension  called "easy Xdebug"(yes Firefox, you're not developing PHP in IE are  you?).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;The extension can be installed  from &lt;/span&gt;&lt;a style="font-family: arial;" href="https://addons.mozilla.org/en-US/firefox/addon/58688/"&gt;https://addons.mozilla.org/en-US/firefox/addon/58688/&lt;/a&gt;&lt;span style="font-family:arial;"&gt; . If the link does not work just google "firefox xdebug".&lt;/span&gt;&lt;span style="font-family:arial;"&gt; Install the extension and restart Firefox. After that you  will notice a little green bug on the bottom-right of Firefox and if  you hover it it says "Start xdebug session".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;As a side note, you might have used Zend IDEs where the  debug process starts from the IDE. In Eclipse PDT the process is  reversed: you start from the page that you want to debug and PHP will  connect to Eclipse in order to establish a debug session. That is why we  have installed the firefox extension, because the debug starts from the  browser.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Now open the page that you  want to debug, on the server where you have just configured PHP with the  XDebug extension of course. Click on the green bug I just mentioned to  enable debugging and then reload the page. After this you will have to  go to Eclipse and see that a new window has just popped up, asking you  to "Select the local resource that matches the following server path".  In a simple setup you will have just a single option, select the PHP  file in that window and click "OK". Eclipse will ask you if you want to  change to "PHP Debug perspective" and obviously you have to say "Yes".  Optionally you can also check "Remember my decision". After this you  should be in the debugging perspective, with Eclipse stopped on the  first line of your code, meaning that you can now step through your  code. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;As a simple guideline you can  use the following keys:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;F5(Step  Into) - steps into everything  including function or method calls&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;F6(Step Over) - walks through but does  not step into  function or method calls&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;F8(Resume) -  runs until the first  breakpoint or end of the program&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:arial;"&gt;Breakpoints can be placed by double-clicking on the right  of the line where you need the breakpoint. Try and play with the above  keys to get a better idea of how they work.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;That's it, I'm sure you'll realise that you can't live  without debugging once you start using it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7774545175641926605-6473687020802684076?l=bogdan-albei.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bogdan-albei.blogspot.com/feeds/6473687020802684076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bogdan-albei.blogspot.com/2010/06/php-remote-debugging-with-xdebug-and.html#comment-form' title='26 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7774545175641926605/posts/default/6473687020802684076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7774545175641926605/posts/default/6473687020802684076'/><link rel='alternate' type='text/html' href='http://bogdan-albei.blogspot.com/2010/06/php-remote-debugging-with-xdebug-and.html' title='PHP remote debugging with Xdebug and Eclipse PDT'/><author><name>bogdanalbei</name><uri>http://www.blogger.com/profile/02675960448030306069</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>26</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7774545175641926605.post-71488040568037199</id><published>2009-05-20T03:39:00.000-07:00</published><updated>2009-05-20T04:52:16.642-07:00</updated><title type='text'>Quickstart web services with SOAP and Zend Framework</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family:arial;"&gt;Web services are software systems designed to support interoperable machine-to-machine interaction over a network. Nowadays if you want to connect external systems, you probably want or have to use web services. What I will discuss here is how to get your own SOAP web service up in minutes.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;SOAP(Simple Object Access Protocol ) is probably the most used web service protocol today. It relies on XML as its message format, and it uses HTTP for message transmission. The SOAP server uses WSDL(Web Services Description Language ) to describe its services to external clients. WSDL  is simply an XML-based language that provides a model for describing Web services. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Back in the old days you had to know a lot about SOAP and WSDL create a web service. Have a look at &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.php.net/soap"&gt;http://www.php.net/soap&lt;/a&gt;&lt;span style="font-family:arial;"&gt; to see what I mean. Definitely not very good looking.&lt;/span&gt; &lt;span style="font-family:arial;"&gt;Luckily Zend Framework has a nice component, Zend_Soap, that handles all the SOAP hard work you would be supposed to do. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;So without further ado, here's the code(discussing a Zend Framework component, the code presented here uses the Zend MVC, but you can use it without the Zend MVC):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;This is the source code for the controller:&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;require_once&lt;/span&gt; realpath(APPLICATION_PATH .&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'/../library/'&lt;/span&gt;).&lt;span style="color: rgb(0, 153, 0);"&gt;'/Soaptest.php'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;class &lt;/span&gt;SoapController &lt;span style="color: rgb(51, 102, 255);"&gt;extends &lt;/span&gt;Zend_Controller_Action&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;span style="color: rgb(153, 153, 153);"&gt;//change this to your WSDL URI!&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;br /&gt;   private &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;$_WSDL_URI&lt;/span&gt;=&lt;span style="color: rgb(0, 153, 0);"&gt;"http://192.168.188.128:8081/soap?wsdl"&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;span style="color: rgb(51, 102, 255);"&gt;public function &lt;/span&gt;indexAction()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    {    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(153, 0, 0);"&gt;$this&lt;/span&gt;-&gt;_helper-&gt;viewRenderer-&gt;setNoRender();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(51, 102, 255);"&gt;if&lt;/span&gt;(&lt;span style="color: rgb(51, 102, 255);"&gt;isset&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;($_GET&lt;/span&gt;[&lt;span style="color: rgb(0, 153, 0);"&gt;'wsdl'&lt;/span&gt;])) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           &lt;span style="color: rgb(153, 153, 153);"&gt; //return the WSDL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &lt;span style="color: rgb(153, 0, 0);"&gt;$this&lt;/span&gt;-&gt;hadleWSDL();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        } &lt;span style="color: rgb(51, 102, 255);"&gt;else &lt;/span&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &lt;span style="color: rgb(153, 153, 153);"&gt;//handle SOAP request&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            &lt;span style="color: rgb(153, 0, 0);"&gt;$this&lt;/span&gt;-&gt;handleSOAP();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;span style="color: rgb(51, 102, 255);"&gt;private function &lt;/span&gt;hadleWSDL() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(153, 0, 0);"&gt;$autodiscover&lt;/span&gt; = new Zend_Soap_AutoDiscover();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(153, 0, 0);"&gt;$autodiscover&lt;/span&gt;-&gt;setClass(&lt;span style="color: rgb(0, 153, 0);"&gt;'Soaptest'&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(153, 0, 0);"&gt;$autodiscover&lt;/span&gt;-&gt;handle();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;span style="color: rgb(51, 102, 255);"&gt;private function &lt;/span&gt;handleSOAP() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(153, 0, 0);"&gt;$soap&lt;/span&gt; = new Zend_Soap_Server(&lt;span style="color: rgb(153, 0, 0);"&gt;$this&lt;/span&gt;-&gt;_WSDL_URI); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(153, 0, 0);"&gt;$soap&lt;/span&gt;-&gt;setClass(&lt;span style="color: rgb(0, 153, 0);"&gt;'Soaptest'&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(153, 0, 0);"&gt;$soap&lt;/span&gt;-&gt;handle();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;span style="color: rgb(51, 102, 255);"&gt;public function &lt;/span&gt;clientAction() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(153, 0, 0);"&gt;$client&lt;/span&gt; = &lt;span style="color: rgb(51, 102, 255);"&gt;new &lt;/span&gt;Zend_Soap_Client(&lt;span style="color: rgb(153, 0, 0);"&gt;$this&lt;/span&gt;-&gt;_WSDL_URI);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(153, 0, 0);"&gt;$this&lt;/span&gt;-&gt;view-&gt;add_result = &lt;span style="color: rgb(153, 0, 0);"&gt;$client&lt;/span&gt;-&gt;math_add(&lt;span style="color: rgb(255, 0, 0);"&gt;11&lt;/span&gt;, &lt;span style="color: rgb(255, 0, 0);"&gt;55&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(153, 0, 0);"&gt;$this&lt;/span&gt;-&gt;view-&gt;not_result = &lt;span style="color: rgb(153, 0, 0);"&gt;$client&lt;/span&gt;-&gt;logical_not(&lt;span style="color: rgb(51, 102, 255);"&gt;true&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(153, 0, 0);"&gt;$this&lt;/span&gt;-&gt;view-&gt;sort_result = &lt;span style="color: rgb(153, 0, 0);"&gt;$client&lt;/span&gt;-&gt;simple_sort(&lt;br /&gt;       array(&lt;span style="color: rgb(0, 153, 0);"&gt;"d"&lt;/span&gt; =&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;"lemon"&lt;/span&gt;, &lt;span style="color: rgb(0, 153, 0);"&gt;"a" &lt;/span&gt;=&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;"orange"&lt;/span&gt;,&lt;br /&gt;             &lt;span style="color: rgb(0, 153, 0);"&gt;"b"&lt;/span&gt; =&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;"banana"&lt;/span&gt;, &lt;span style="color: rgb(0, 153, 0);"&gt;"c"&lt;/span&gt; =&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;"apple"&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;And the code for the Soaptest.php class:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;class &lt;/span&gt;Soaptest {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   &lt;span style="color: rgb(204, 204, 204);"&gt; &lt;span style="color: rgb(153, 153, 153);"&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     * Add method&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     * @param Int $param1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     * @param Int $param2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     * @return Int&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;span style="color: rgb(51, 102, 255);"&gt;public function &lt;/span&gt;math_add(&lt;span style="color: rgb(153, 0, 0);"&gt;$param1&lt;/span&gt;, &lt;span style="color: rgb(153, 0, 0);"&gt;$param2&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(51, 102, 255);"&gt;return &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;$param1&lt;/span&gt;+&lt;span style="color: rgb(153, 0, 0);"&gt;$param2&lt;/span&gt;; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;span style="color: rgb(153, 153, 153);"&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     * Logical not method&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     * @param boolean $param1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     * @return boolean&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;span style="color: rgb(51, 102, 255);"&gt;public function &lt;/span&gt;logical_not(&lt;span style="color: rgb(153, 0, 0);"&gt;$param1&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(51, 102, 255);"&gt;return &lt;/span&gt;!&lt;span style="color: rgb(153, 0, 0);"&gt;$param1&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;span style="color: rgb(153, 153, 153);"&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     * Simple array sort&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     * @param Array $array&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     * @return Array&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:courier new;" &gt;     */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;span style="color: rgb(51, 102, 255);"&gt;public function &lt;/span&gt;simple_sort(&lt;span style="color: rgb(153, 0, 0);"&gt;$array&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        asort(&lt;span style="color: rgb(153, 0, 0);"&gt;$array&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        &lt;span style="color: rgb(51, 102, 255);"&gt;return &lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;$array&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You can also download the full project &lt;a target="_blank" href="http://www.box.net/shared/jy8daftmp9"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As you can see you don't have to write a lot of code to back up the web service.&lt;br /&gt;&lt;br /&gt;Let's discuss the controller first, because there's where the “magic” happens. The index action handles two types of requests: the request for the WSDL, handled by the hadleWSDL() method and the actual SOAP request, handled by the handleSOAP() method.&lt;br /&gt;&lt;br /&gt;You can go ahead and try to see how your WSDL looks by accessing http://URL_TO_WEB_SERVICE/soap?wsdl , where  URL_TO_WEB_SERVICE is the URL where you have deployed the example. Now imagine that you would have to construct and maintain this yourself, by hand, as old school bearded guys would. Well you don't, because this is handled by Zend_Soap_AutoDiscover which will create the WSDL file for you. The only thing that Zend_Soap_AutoDiscover needs to know is the class you want to use for the web service. Also, because PHP is not strongly typed, you will have to put PHPDoc blocks, because SOAP needs to know what types you are using as parameters and what types you are returning. Have a look &lt;a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.pkg.html"&gt;here&lt;/a&gt; if PHPDoc does not ring a bell .&lt;br /&gt;&lt;br /&gt;The SOAP server is handled by the Zend_Soap_Server  class, and all it needs is the class you intend to use for the web service, and the URI to your WSDL file. Remember when you checked out how the WSDL file looks? That's exactly the URI you will have to use. In the example you will have to put that into the $_WSDL_URI variable, defined in the SoapController.&lt;br /&gt;&lt;br /&gt;That was the SOAP server. Simple, right? Now let's have some tests on the server by implementing a simple SOAP client. The client is handled by the Zend_Soap_Client class that is constructed in the same manner as the server class, it needs just the URI to the WSDL file. After you have constructed the client, you can access the methods defined by the SOAP server in the same way you would access the methods of an object. In the example above you have a simple class, called Soaptest, that defines three very simple methods. Feel free to change the class and test your own methods. While you are playing with the server, you might notice that the WSDL file is cached, so if you change something into the Soaptest.php file, you might not get the expected result. Just delete the cached WSDL file from /tmp/wsdl-* while you do your tests.&lt;br /&gt;&lt;br /&gt;You definitely want to have a look at the Zend Framework documentation located &lt;a href="http://framework.zend.com/manual/en/zend.soap.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That was it, as promissed: your SOAP web service up in minutes.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7774545175641926605-71488040568037199?l=bogdan-albei.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bogdan-albei.blogspot.com/feeds/71488040568037199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bogdan-albei.blogspot.com/2009/05/quickstart-web-services-with-soap-and.html#comment-form' title='43 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7774545175641926605/posts/default/71488040568037199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7774545175641926605/posts/default/71488040568037199'/><link rel='alternate' type='text/html' href='http://bogdan-albei.blogspot.com/2009/05/quickstart-web-services-with-soap-and.html' title='Quickstart web services with SOAP and Zend Framework'/><author><name>bogdanalbei</name><uri>http://www.blogger.com/profile/02675960448030306069</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>43</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7774545175641926605.post-5276371270167012871</id><published>2009-05-05T04:22:00.001-07:00</published><updated>2009-05-05T08:46:15.853-07:00</updated><title type='text'>Create your perfect virtualised PHP development environment</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="line-height: 18px;font-family:arial;" &gt;The development environment is one of the most important factors to be taken into consideration for successful projects. The environment has three basic elements: the operating system, the text editor and the test environment. The operating system is not really important as long as you're used to it, and this also applies to the text editor. The test environment is something else, because you want to avoid “surprises” when your code goes on the production or company test environment. Your test environment should be very similar, if not identical to the production environment. &lt;/span&gt; &lt;span style="line-height: 18px;font-family:arial;" &gt;Unfortunately a lot of organisations have rules over rules that stop you from having your perfect environment. Those of you who are allowed to develop on Linux, consider yourself lucky, because most of the companies will provide a Windows/MacOS environment.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="line-height: 18px;font-family:arial;" &gt;How are you supposed to have a  PHP test environment under Windows/MaxOS that is similar to your production Linux? The answer is quite simple: virtualisation. You can have a Linux virtual machine that runs your test environment, and the best part is that you have total control of the test environment, with root access. If that sounds good, read on, and follow these easy steps:&lt;/span&gt; &lt;span style="line-height: 18px;font-family:arial;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Start by downloading VMware Server for your operating system from &lt;a href="http://www.vmware.com/products/server/"&gt;http://www.vmware.com/products/server/&lt;/a&gt; . You have to register, but the product is free.&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Install VMWare Server on your machine&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Go to the VMware Infrastructure Web Access, located at http://127.0.0.1:8222/ui/ , and login with your operating system credentials. If you have problems with that, check out &lt;a href="http://www.tipandtrick.net/2008/whats-the-login-user-name-and-password-for-vmware-server-20/"&gt;this post&lt;/a&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Next, you have to create the virtual machine. In the Vmware Infrastructure Web Access main page, go to Virtual Machine-&gt;Create Virtual Machine.&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;In the “Name and location” screen, just give a name to your virtual machine, and select the standard datastore. Click next after each step to move forward.&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;In the “Guest and Operating System” screen, you have to choose the right operating system you intend to install. For Linux, select “Linux operating system”, and the version you want.&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;In the “Memory as Processors” screen, it depends on your machine how much you want to use for your virtual machine. I would recommend at least 512MB for a simple Linux installation. If you're not sure, start with 512MB, and you can increase the memory later if you need to. The default setting for Processors should be ok, usually 1 processor is fine for testing.&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;In the “Hard Disk” screen, select “Create a new virtual disk” and input a proper size for your Linux installation. Disk space is really cheap these days, so put enough space.&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;In the “Network adapter” screen, you definitely want to add networking capabilities to your virtual machine. Select “Add a network adapter”, and choose from the three possible connections. I would recommend bridged, so that your virtual machine will be visible not only from your computer, but from your network.&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;In the “CD/DVD drive” screen, select “Use a physical drive” if you have your Linux distribution written on a CD/DVD of “Use an ISO image” if you have just the .iso file.&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Don't add no floppy drive on the “Floppy drive” screen, unless you have a good reason to add one.&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;If you need USB, add an USB controller from the “USB controller” screen.&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;After completing all these steps, the virtual machine is ready to be created, click “Finish” to do that. Wait for the machine to be created, you can see the progress at the bottom of the screen. You have your virtual machine now, next you have to install the operating system. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Select your newly created virtual machine from the left side of the screen and go to the “Console” tab. In order for you to be able to access the virtual machine, you will need to install a browser plugin that allows you to see the virtual operating system inside your browser. Click on the install plugin link, you will get the plugin installed, and the browser will restart. Log in again to the  VMware Infrastructure Web Access (http://127.0.0.1:8222/ui/ ) and go to the Console tab of your virtual machine.&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Now you can start the machine by clicking in the middle of the console. You will have to click again the “Open console in new window” link to open the console. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:arial;"&gt;Finally you can see the console. Depending on what you have selected on the “CD/DVD drive” screen, your Linux installation will start automatically if you have selected an existing iso image, or you will have to provide the CD/DVD for the installation to start. From this point it is up to you what you install and how you install it. Try to avoid installing graphical Linux, because it's pointless and it will consume a lot of memory.&lt;/span&gt;  &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:arial;"&gt;After installing Linux, if you want to quickly install PHP and Apache, you might have a look at Zend Server Community Edition. I have detailed in my last post the installation, you might want to have a look(&lt;a href="http://bogdan-albei.blogspot.com/2009/05/zend-server-community-edition.html"&gt;http://bogdan-albei.blogspot.com/2009/05/zend-server-community-edition.html&lt;/a&gt;)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="line-height: 18px;font-family:arial;" &gt;Now you have your own Linux machine inside your Windows and you can tune it as closely as possible to your production server. It's not necessary to access your machine through the console. As long as it is started you can access it with your favourite SSH client. &lt;/span&gt;&lt;span style="line-height: 18px;font-family:arial;" &gt;&lt;br /&gt;&lt;br /&gt;Don't forget that you will have to start the virtual machine every time you start your operating system.&lt;/span&gt;     &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7774545175641926605-5276371270167012871?l=bogdan-albei.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bogdan-albei.blogspot.com/feeds/5276371270167012871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bogdan-albei.blogspot.com/2009/05/create-your-perfect-virtualised-php.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7774545175641926605/posts/default/5276371270167012871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7774545175641926605/posts/default/5276371270167012871'/><link rel='alternate' type='text/html' href='http://bogdan-albei.blogspot.com/2009/05/create-your-perfect-virtualised-php.html' title='Create your perfect virtualised PHP development environment'/><author><name>bogdanalbei</name><uri>http://www.blogger.com/profile/02675960448030306069</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7774545175641926605.post-2351482354981063087</id><published>2009-05-01T04:08:00.000-07:00</published><updated>2009-05-01T04:46:35.572-07:00</updated><title type='text'>Zend Server Community Edition setup(Fedora Linux)</title><content type='html'>&lt;span style="font-weight: bold;font-family:arial;" &gt;Problem&lt;/span&gt;&lt;span style="font-family:arial;"&gt;: Zend has published documentation on how to install the full version of Zend Server. Some might want the Community Edition, which is free&lt;/span&gt;, and has no license warnings and extra modules loaded.&lt;br /&gt;&lt;be&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;Solution&lt;/span&gt;&lt;span style="font-family:arial;"&gt;: (this works under Fedora Linux, I'm sure that simmilar solutions can be applied to other distributions).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;1. Create /etc/yum.repos.d/zend.repo with the following content:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[Zend]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;name=Zend CE $releasever - $basearch - Released Updates&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;baseurl=http://repos.zend.com/rpm/ce/$basearch/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;enabled=1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gpgcheck=0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[Zendce-noarch]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;name=Zend CE - noarch&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;baseurl=http://repos.zend.com/rpm/ce/noarch&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;enabled=1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gpgcheck=0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;2. If you have installed the full version, remove it:&lt;/span&gt;&lt;br /&gt;&lt;/be&gt;&lt;span style="font-family: courier new;"&gt;/usr/local/zend/bin/zendctl.sh stop&lt;/span&gt;&lt;br /&gt;&lt;be&gt;&lt;span style="font-family:courier new;"&gt;yum remove *zend*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;rm -rf /usr/local/zend&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3. Install Zend Server CE:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;yum install zend-ce&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;You can now go on the Zend Server admin page, which is http://127.0.0.1:10081/ZendServer/ &lt;/span&gt;&lt;span style="font-family:arial;"&gt;on my server. Unfortunately I had to discover this myself, bacause I've seen no message after the installation as the documentation specifies.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/be&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7774545175641926605-2351482354981063087?l=bogdan-albei.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bogdan-albei.blogspot.com/feeds/2351482354981063087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bogdan-albei.blogspot.com/2009/05/zend-server-community-edition.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7774545175641926605/posts/default/2351482354981063087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7774545175641926605/posts/default/2351482354981063087'/><link rel='alternate' type='text/html' href='http://bogdan-albei.blogspot.com/2009/05/zend-server-community-edition.html' title='Zend Server Community Edition setup(Fedora Linux)'/><author><name>bogdanalbei</name><uri>http://www.blogger.com/profile/02675960448030306069</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
