Archief van de categorie ‘PHP’

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: Functies in functies (vies!)

25 March 2007

Om de één of andere reden is zondag de leukste dag om te programmeren in PHP. Dit is nu de 3de week op rij dat ik iets "nieuw" ontdek op een zondag in PHP. Deze week het feit dat je functies in functies in functies kan definiëren EN gebruiken. Hieronder een vies voorbeeldje ;)

function_foo.png

Geeft als output:

function_foo_output.png

Ps: Graag wil ik ook even vermelden dat je bvb niet de functie "foo" kan definiëren in een reeds bestaande functie foo. Ook best wel vies ;)

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 , , , ,

PHP5: Referenties naar niet bestaande objecten

10 March 2007

Een tijdje geleden zat ik vrij OO bezig en stuitte ik op iets wat ik eigenlijk had moeten voorzien. Eén hoofdclass hield een template object bij en een drietal andere classes hadden een referentie naar dit object. Onder zekere voorwaarden werd het eigenlijke object opnieuw aangemaakt. Hierdoor gingen alle referenties in die drie andere classes op zichzelf bestaan en was de "verwijzing" niet langer..

code1.png

output.png

Het relaas van dit alles is vrij simpel. Als je éénzelfde object van verschillende locaties aanspreekt, kijk dan goed uit als je dit object om de één of andere reden opnieuw zou moeten aanmaken, want de verwijzingen zijn "dood".

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 , ,