<?php 
/** 
*          USER ENTERED  U R L  IS  R E Q U E S T  
* J:\awww\www\fwphp\glomodul\z_examples\03_test_parse_url.php 
* http://dev1:8083/fwphp/glomodul/z_examples/03_test_parse_url.php?i/SOME_METHOD/param1/PARAM1VALUE 
* U R L is page webadress,  i/SOME_METHOD/param1/PARAM1VAL are page parameters 
* in form key/keyvalue 
* 
* Routing is extract key and keyvalue pairs from  U R L (behind "?") 
* Dispatching is call SOME_METHOD in some Home_ctr of some module, 
* or if PATH/SOME_METHOD.PHP include this script 
* 
*   http://php.net/manual/en/ref.array.php  
*/ 
define('QS', '?'); //to avoid web server url rewritting  if (!defined('QS')) define( 'QS', '?' );  
define('DS', DIRECTORY_SEPARATOR); 
/** 
*           A D R E S S E S 
*/ 
$module_towsroot = '../../../' ; //eg to wsroot ='J:/awww/www/' 
// J:/awww/www/ : 
$wsroot_path = str_replace('\\','/', realpath($module_towsroot) .'/') ;  
$wsroot_url =  // http://dev1:8083/    //=URL_PROTOCOL or : 
  ( (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://' ) 
  . filter_var( $_SERVER['HTTP_HOST'] //URL_DOM AIN  .$_SERVER['REQUEST_URI'] 
  .'/', FILTER_SANITIZE_URL ) ; 
 
// J:/awww/www/fwphp/glomodul/z_examples/ : 
$module_path = str_replace('\\','/', __DIR__.'/') ; 
// fwphp/glomodul/z_examples : 
$module_relpath = rtrim(str_replace($wsroot_path,'', $module_path),'/') ; 
     //rtrim(ltrim($module_path, $wsroot_path),'/') ; 
 
// R E Q U E S T : 
// /fwphp/glomodul/z_examples/03_test_parse_url.php?i/SOME_METHOD/param1/PARAM1VALUE : 
//error on Linux : $REQUEST_URI = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_STRING); 
//Error on win: $REQUEST_URI = filter_input($_SERVER['REQUEST_URI'], FILTER_SANITIZE_STRING); 
$REQUEST_URI = filter_var($_SERVER['REQUEST_URI'], FILTER_SANITIZE_URL) ; 
 
$REQUEST_URI_arr = explode(QS, $REQUEST_URI) ;  
$module_relpath_requested = rtrim(ltrim(dirname($REQUEST_URI_arr[0]),'/'),'/'); 
 
$REQUEST_URI_qrystring_arr = [] ; 
if (isset($REQUEST_URI_arr[1])) { //there is some key-value pairs  behind "?" char : 
  // $REQUEST_URI_arr[1] is uri_qrystring 
  $REQUEST_URI_qrystring_arr = explode('/', $REQUEST_URI_arr[1]) ; 
} 
 
 
$urlarr['module_towsroot'] = $module_towsroot ; //eg '../../../' 
 
$urlarr['_____wsroot_path_label']='str_replace(\'\\\',\'/\', realpath($module_towsroot) .\'/\') ' ; 
$urlarr['wsroot_path']     = $wsroot_path ; 
 
$urlarr['_____wsroot_url_label'] = 'From HTTPS, HTTP_HOST' ; 
$urlarr['wsroot_url']      = $wsroot_url ; 
 
$urlarr['_____module_path_label'] = 'str_replace(\'\\\',\'/\', __DIR__.\'/\')' ; 
$urlarr['module_path']     = $module_path ; 
 
$urlarr['_____module_relpath_label']  = 'rtrim(str_replace($wsroot_path,\'\', $module_path,\'/\')' ; 
$urlarr['module_relpath'] = $module_relpath ; 
 
$urlarr['_____module_url_label'] =  '$wsroot_url.$module_relpath.\'/\'' ; 
$urlarr['module_url']       =  $wsroot_url.$module_relpath.'/' ; 
// R E Q U E S T : 
$urlarr['_____module_relpath_requested_label'] = 'rtrim(ltrim($REQUEST_URI_arr[0],\'/\'),\'/\')' ; 
$urlarr['module_relpath_requested']  = $module_relpath_requested ; 
 
 
// REQUEST_URI_qrystring_arr=[key1,val1, key2,val2...]  
// transform to $uriq=[key1=>val1,...] pairs : 
//Next statement means url is module's url and we call home() method in Home_ctr : 
$uriq = ['i' => 'home'] ; //$uriq = [] ; 
 
for ( $ii = 0 ; //expr1 executed once unconditionally at loop begin. Or: ,$x=1,... 
      $ii < count($REQUEST_URI_qrystring_arr) ; //expr2 is evaluated at iteration begin 
      $ii++ ) : //expr3 is evaluated at iteration end 
{ 
  if (isset($REQUEST_URI_qrystring_arr[$ii + 1])) { 
    $uriq[$REQUEST_URI_qrystring_arr[$ii]] = $REQUEST_URI_qrystring_arr[++$ii] ; 
  } 
} endfor; 
?> 
 
 
 
<!DOCTYPE HTML> 
<html lang="hr-HR"><head><title>EXAMPLES</title><meta charset="utf-8"> 
  <link rel="shortcut icon" href="/zinc/img/favicon.ico"> 
  <!--link type="text/css" rel="stylesheet" media="all" href="/zinc/themes/simplest.css" /--> 
  <style></style><!--script src="utl_inc.js"></script--> 
</head> 
 
<body>  <b>Tests parse URLqueryString (in URL after "?")</b> 
 
  <!--              2. izbornik 2.redak (Banner)                --> 
  <div id="hMenu"> 
     
          <a href="?i/SOME_METHOD/param1/PARAM1VALUE" 
             title=''> 
               <?php 
               if ($uriq['i'] == 'home') { 
                    echo 'ctr, akc, one akcparam are in URL'; 
               } else { echo '<b>ctr, akc, one akcparam are in URL--- THIS LINK WAS CLICKED</b>'; } ?> 
          </a> 
          <br />http://dev1:8083/fwphp/glomodul/z_examples/03_test_parse_url.php?QRY 
          <br />B12phpfw QRY  =i/SOME_METHOD/param1/PARAM1VALUE 
                    <b>i means "include script or call Home_ctr method"</b> 
          <br />Orher fw-s QRY=ctrclassname/actmethodname/param1value/ 
 
                <br /><br /> 
          <a href="?" 
             title=''> 
               <?php 
               if ($uriq['i'] == 'home') { 
                   echo '<b>No ctr, akc, akcparams in URL --- THIS LINK WAS CLICKED</b>'; 
               } else { echo 'No ctr, akc, akcparams in URL'; } ?> 
          </a> 
 
 
 
    <h3>REQUEST (U R L) query string IS NOT  ctr, akc, firstakcparamValue...</h3> 
    <pre> 
      1. $REQUEST_URI = <?php print_r($REQUEST_URI); ?><br /> 
         =filter_var($_SERVER['REQUEST_URI'], FILTER_SANITIZE_URL) 
       
      2. $urlarr = <?php print_r($urlarr); ?> 
       
      3. $REQUEST_URI_qrystring_arr = <?php print_r($REQUEST_URI_qrystring_arr); ?> 
       
      4. Transformed REQUEST_URI_qrystring_arr is $uriq = <?php print_r($uriq); ?> 
 
    </pre> 
 
 
    <h3>We call Home_ctr method in $uriq['i']</h3> 
    IF NEXT TWO RELPATHS ARE NOT EQUAL then called method is in some other module Home_ctr (in some other dir) : 
    <pre> 
    $urlarr['module_relpath']           =<?php print_r($urlarr['module_relpath']); ?> 
    <br /> 
    $urlarr['module_relpath_requested'] =<?php print_r($urlarr['module_relpath_requested']);?> 
          <!-- /*parse_url($uri)=Array 
            ( 
                [scheme] => http 
                [host] => dev1 
                [port] => 8083 
                [path] => / 
            ) */ --> 
    </pre> 
 
 
 
    <pre> 
ERROR : 
http://phporacle.eu5.net/fwphp/glomodul/z_examples/03_test_parse_url.php?i/SOME_METHOD/param1/PARAM1VALUE 
 
 
      1. $REQUEST_URI =        
      2. $urlarr = Array 
( 
    [module_towsroot] => ../../../ 
    [_____wsroot_path_label] => str_replace('\','/', realpath($module_towsroot) .'/')  
    [wsroot_path] => /srv/disk16/3266814/www/phporacle.eu5.net/ 
    [_____wsroot_url_label] => From HTTPS, HTTP_HOST 
    [wsroot_url] => http://phporacle.eu5.net/ 
    [_____module_path_label] => str_replace('\','/', __DIR__.'/') 
    [module_path] => /srv/disk16/3266814/www/phporacle.eu5.net/fwphp/glomodul/z_examples/ 
    [_____module_relpath_label] => rtrim(str_replace($wsroot_path,'', $module_path,'/') 
    [module_relpath] => fwphp/glomodul/z_examples 
    [_____module_url_label] => $wsroot_url.$module_relpath.'/' 
    [module_url] => http://phporacle.eu5.net/fwphp/glomodul/z_examples/ 
    [_____module_relpath_requested_label] => rtrim(ltrim($REQUEST_URI_arr[0],'/'),'/') 
    [module_relpath_requested] =>  
) 
       
      3. $REQUEST_URI_qrystring_arr = Array 
( 
) 
       
      4. Transformed REQUEST_URI_qrystring_arr is $uriq = Array 
( 
    [i] => home 
) 
 
     
 
We call Home_ctr method in $uriq['i'] 
IF NEXT TWO RELPATHS ARE NOT EQUAL then called method is in some other module Home_ctr (in some other dir) : 
 
    $urlarr['module_relpath']           =fwphp/glomodul/z_examples     
 
    $urlarr['module_relpath_requested'] =           
     
 
 
 
 
    </pre> 
 
 
 
 
    </div> 
 
 
 
 
 
<?php 
echo '<br /><br /><hr />'; include(dirname(dirname(dirname(__DIR__))) .'/zinc/showsource.php');
 
 |