Auteursarchief

relative naar absolute url’s

4 April 2007

Ik was een functie aan het schrijven om relative urls om te zetten naar absolute. Bijvoorbeeld:

PHP:
  1. ... href="/foo.php?bar=1" ...

moet worden vervangen door

PHP:
  1. ... href="http://www.example.net/foo.php?bar=1" ...

Aangezien ik hier wel wat moeite mee gehad heb, deel ik graag de functie.

PHP:
  1. /**
  2. * Convert relative urls into absolute urls
  3. *
  4. * @param    string    $prefix
  5. * @param    string    $text
  6. * @return    string
  7. */
  8. function relativeToAbsolute($prefix, $text)
  9. {
  10. // search for single quotes and replace them by double quotes
  11. $search = '\'';
  12. $replace = '"';
  13. $text = str_replace($search, $replace, $text);
  14.  
  15. // replace relative urls by absolute (prefix them with $prefix)
  16. $pattern = '/href="(?!http|https|ftp|irc|feed|mailto)([\/]?)(.*)"/i';
  17. $replace = 'href="'.$prefix.'/$2"';
  18. $text = preg_replace($pattern, $replace, $text);
  19.  
  20. // return
  21. return $text;
  22. }

Technorati , , , ,

PHP5 en SOAP

12 March 2007

Ik ben de laatste dagen aan het uitzoeken hoe ik een webservice kan maken. Na veel lezen, opzoeken, vragen stellen hebben de mannen van Openminds mij op het juiste pad gebracht (waarvoor dank), namelijk SOAP.

Omdat ik heel wat problemen ben tegengekomen zet ik hieronder even de code om anderen te helpen. Let wel, ik ben ook nieuw met SOAP. Dus sla mij niet dood als het niet direct werkt.

Eerst heb ik de "server geschreven".

PHP:
  1. <?php
  2. // require the class that will handle the calls
  3. require_once 'classes/API.php';
  4.  
  5. // disable the soap.wsdl_cache
  6. ini_set("soap.wsdl_cache_enabled", "0");
  7.  
  8. // get RAW_POST_DATA
  9. if(!isset($HTTP_RAW_POST_DATA)) $HTTP_RAW_POST_DATA = file_get_contents('php://input');
  10.  
  11. // set options for the server
  12. $options = array('uri' => 'http://localhost/SOAP/');
  13.  
  14. // init server
  15. $server = new SoapServer(null, $options);
  16.  
  17. // set the class that will handle the SOAP-requests
  18. $server->setClass('API');
  19.  
  20. // handle SOAP-requests
  21. $server->handle();
  22. ?>

Dan de class die de SOAP-requests zal afhandelen.

PHP:
  1. <?php
  2. class API
  3. {
  4. /**
  5. * returns 'Hello World'
  6. *
  7. * @return string
  8. */
  9. public function sayHello()
  10. {
  11. return 'Hello World';
  12. }
  13. }
  14. ?>

Dan de "client".

PHP:
  1. <?php
  2. // set client options
  3. $options = array('location' => 'http://localhost/SOAP/server.php', 'uri' => 'http://localhost/SOAP/');
  4.  
  5. try {
  6. // init client
  7. $client = new SoapClient(null, $options);
  8. // make SOAP-request and print it
  9. echo '<pre>';
  10. echo "\n".$client->sayHello();
  11. echo '</pre>';
  12. }
  13. // catch SOAP-errors
  14. catch(SoapFault $e)
  15. {
  16. // print error
  17. print_r($e);
  18. }
  19. ?>

Opmerkingen zijn uiteraard welkom!

Technorati , , , ,

SQL joins

21 February 2007

Als je in aanraking komt met SQL dan kom je hoogst waarschijnlijk ook in aanraking met het probleem dat je velden uit twee (of meerdere) tabellen wil selecteren. Dit kan je doen door middel van JOIN.

Hieronder kan je de meest gebruikte terugvinden.

INNER JOIN
Met behulp van INNER JOIN krijg je alle record uit de eerste tabel met een bijhorend record uit de tweede tabel.
let op: indien er geen bijhorend record is gevonden in de tweede tabel dan zal het record uit tabel één niet worden weergegeven in de resultaattabel. Indien er meerdere bijhorende records worden gevonden in de tweede tabel dan zullen deze allemaal in de resultaattabel voorkomen.
SQL:
  1. SELECT * FROM tabel1 AS t1 INNER JOIN tabel2 AS t2 ON t1.id = t2.id;

LEFT OUTER JOIN
De LEFT OUTER JOIN zorgt ervoor dat alle records uit tabel één worden weergegeven, ook als er geen bijhorend record is gevonden in tabel twee. Indien er geen bijhorend record is gevonden zullen de velden null bevatten.
SQL:
  1. SELECT * FROM tabel1 AS t1 LEFT OUTER JOIN tabel2 AS t2 ON t1.id = t2.id;

RIGHT OUTER JOIN
De RIGHT OUTER JOIN doet hetzelfde als de LEFT OUTER JOIN maar zorgt ervoor dat alle record uit tabel twee worden weergegeven in de resultaattabel.
SQL:
  1. SELECT * FROM tabel1 AS t1 RIGHT OUTER JOIN tabel2 AS t2 ON t1.id = t2.id;

Indien de velden in alle twee de tabellen dezelfde naam hebben kan je 't1.id = t2.id' vervangen door 'USING(id)' gebruiken.

Opmerkingen, tips zijn steeds welkom.

Technorati , , ,

Mod_Rewrite en PHP

16 February 2007

Mod_rewrite is heel leuk, maar kan soms wel de site vertragen (persoonlijke mening), dan kan je beter de mod_rewrite regelen samen met PHP.

Stap 1

Maak een .htacces-file aan, met daarin onderstaande code:

CODE:
  1. RewriteEngine On
  2. RewriteCond %{REQUEST_URI} !^$
  3. RewriteCond %{REQUEST_FILENAME} !-f
  4. RewriteCond %{REQUEST_FILENAME} !-d
  5. RewriteRule . index.php [NC,L]

Door deze code zal indien de file of de map niet bestaat alles doorgestuurd worden naar index.php.

Stap 2

In index.php moet je natuurlijk de url gaan uitlezen en parsen, dit kan je met behulp van onderstaande functie doen.

PHP:
  1. function parseUrl()
  2. {
  3. // remove trailing slashes
  4. $qryString = trim($_SERVER[‘REQUEST_URI’], ‘/’);
  5.  
  6. if(!empty($qryString))
  7. {
  8. // split into chunks
  9. return explode(‘/’, $qryString);
  10. }
  11. else
  12. {
  13. // no querystring provided, return default page
  14. return array(‘insert_default_page’);
  15. }
  16. }

Uiteraard zal je deze functie aanpassen in functie van je website.

Let wel op dat je alle links op je website nu absolute maakt, dus elke link start nu met /

//edit: de mannen van openminds hebben me op een fout gewezen, namelijk ik doe geen mod_rewrite met php, maar met mod_rewrite en php

Technorati , ,

echo ‘hello world’;

15 February 2007

Wel we wachten nog op het design van designers.netlash.com.

Maar bij deze is deze blog officieel open, hier zal je handige stukjes code, tips, ... kunnen terugvinden. Laat zeker en vast niet na om je mening, opmerkingen, toevoegingen, enzovoort achter te laten in de comments.

Technorati ,