00001 <?php if(defined(__FILE__)){return(NULL);}define(__FILE__,TRUE);
00002
00055 define ( "EURL_VAR_PROTOCOL" , "EURL_VAR_PROTOCOL" );
00056
00063 define ( "EURL_VAR_USER" , "EURL_VAR_USER" );
00064
00071 define ( "EURL_VAR_PASS" , "EURL_VAR_PASS" );
00072
00080 define ( "EURL_VAR_DOMAIN" , "EURL_VAR_DOMAIN" );
00081
00089 define ( "EURL_VAR_SUB_DOMAIN" , "EURL_VAR_SUB_DOMAIN" );
00090
00097 define ( "EURL_VAR_PORT" , "EURL_VAR_PORT" );
00098
00106 define ( "EURL_VAR_INDEX_PATH" , "EURL_VAR_INDEX_PATH" );
00107
00115 define ( "EURL_VAR_PATH_WITH_KEYS" , "EURL_VAR_PATH_WITH_KEYS" );
00116
00124 define ( "EURL_VAR_PATH_VARS" , "EURL_VAR_PATH_VARS" );
00125
00133 define ( "EURL_VAR_FILE_NAME" , "EURL_VAR_FILE_NAME" );
00134
00142 define ( "EURL_VAR_GET_VARS" , "EURL_VAR_GET_VARS" );
00143
00150 define ( "EURL_VAR_FRAGMENT" , "EURL_VAR_FRAGMENT" );
00151
00158 define ( "EURL_SCOPE_INTERNAL" , "EURL_SCOPE_INTERNAL" );
00159
00166 define ( "EURL_SCOPE_MINING" , "EURL_SCOPE_MINING" );
00167
00174 define ( "EURL_SCOPE_ENVIRONMENT" , "EURL_SCOPE_ENVIRONMENT" );
00175
00182 define ( "EURL_SCOPE_CONSTANTS" , "EURL_SCOPE_CONSTANTS" );
00183
00191 define ( "EURL_SCOPE_DEFAULTS" , "EURL_SCOPE_DEFAULTS" );
00192
00200 define ( "EURL_SCOPE_GLOBAL" , "EURL_SCOPE_GLOBAL" );
00201
00209 define ( "EURL_SCOPE_SETTINGS" , "EURL_SCOPE_SETTINGS" );
00210
00218 define ( "EURL_SCOPE_PARAMETERS" , "EURL_SCOPE_PARAMETERS" );
00219
00220
00222 define ( "EURL_DEBUG" , FALSE );
00223
00225 define ( "EURL_DEBUG_KEYNAMES" , EURL_DEBUG || FALSE );
00226
00228 define ( "EURL_DEBUG_SCOPEORDER" , EURL_DEBUG || FALSE );
00229
00231 define ( "EURL_DEBUG_CONSTANTTOKEY" , EURL_DEBUG || FALSE );
00232
00234 define ( "EURL_DEBUG_ENVIRONMENTTOKEY" , EURL_DEBUG || FALSE );
00235
00237 define ( "EURL_DEBUG_EURL" , EURL_DEBUG || FALSE );
00238
00240 define ( "EURL_DEBUG_INTERNAL" , EURL_DEBUG || FALSE );
00241
00243 define ( "EURL_DEBUG_MINING" , EURL_DEBUG || FALSE );
00244
00246 define ( "EURL_DEBUG_ENVIRONMENT" , EURL_DEBUG || FALSE );
00247
00249 define ( "EURL_DEBUG_CONSTANTS" , EURL_DEBUG || FALSE );
00250
00252 define ( "EURL_DEBUG_DEFAULTS" , EURL_DEBUG || FALSE );
00253
00255 define ( "EURL_DEBUG_GLOBAL" , EURL_DEBUG || FALSE );
00256
00258 define ( "EURL_DEBUG_GETVALUES" , EURL_DEBUG || FALSE );
00259
00261 define ( "EURL_DEBUG_SETVALUE" , EURL_DEBUG || FALSE );
00262
00264 define ( "EURL_DEBUG_GENERATE" , EURL_DEBUG || FALSE );
00265
00266
00282 class EUrl
00283 {
00291 var $_Settings;
00292
00302 function _KeyNames()
00303 {
00304
00305 if(EURL_DEBUG_KEYNAMES)
00306 {
00307 print(__CLASS__."::".__FUNCTION__."(");
00308 foreach(func_get_args() as $arg)
00309 {
00310 print(var_export($arg,TRUE).",");
00311 }
00312 print(")\n");
00313 }
00314
00315
00316 return(array(
00317 EURL_VAR_PROTOCOL ,
00318 EURL_VAR_USER ,
00319 EURL_VAR_PASS ,
00320 EURL_VAR_DOMAIN ,
00321 EURL_VAR_SUB_DOMAIN ,
00322 EURL_VAR_PORT ,
00323 EURL_VAR_INDEX_PATH ,
00324 EURL_VAR_PATH_WITH_KEYS ,
00325 EURL_VAR_PATH_VARS ,
00326 EURL_VAR_FILE_NAME ,
00327 EURL_VAR_GET_VARS ,
00328 EURL_VAR_FRAGMENT ,
00329 ));
00330 }
00331
00343 function _ScopeOrder()
00344 {
00345
00346 if(EURL_DEBUG_SCOPEORDER)
00347 {
00348 print(__CLASS__."::".__FUNCTION__."(");
00349 foreach(func_get_args() as $arg)
00350 {
00351 print(var_export($arg,TRUE).",");
00352 }
00353 print(")\n");
00354 }
00355
00356
00357 return(array(
00358 EURL_SCOPE_PARAMETERS ,
00359 EURL_SCOPE_SETTINGS ,
00360 EURL_SCOPE_GLOBAL ,
00361 EURL_SCOPE_DEFAULTS ,
00362 EURL_SCOPE_CONSTANTS ,
00363 EURL_SCOPE_ENVIRONMENT ,
00364 EURL_SCOPE_MINING ,
00365 EURL_SCOPE_INTERNAL ,
00366 ));
00367 }
00368
00378 function _ConstantToKey()
00379 {
00380
00381 if(EURL_DEBUG_CONSTANTTOKEY)
00382 {
00383 print(__CLASS__."::".__FUNCTION__."(");
00384 foreach(func_get_args() as $arg)
00385 {
00386 print(var_export($arg,TRUE).",");
00387 }
00388 print(")\n");
00389 }
00390
00391
00392 return(array(
00393 "EURL_VAL_PROTOCOL" => EURL_VAR_PROTOCOL ,
00394 "EURL_VAL_USER" => EURL_VAR_USER ,
00395 "EURL_VAL_PASS" => EURL_VAR_PASS ,
00396 "EURL_VAL_DOMAIN" => EURL_VAR_DOMAIN ,
00397 "EURL_VAL_SUB_DOMAIN" => EURL_VAR_SUB_DOMAIN ,
00398 "EURL_VAL_PORT" => EURL_VAR_PORT ,
00399 "EURL_VAL_INDEX_PATH" => EURL_VAR_INDEX_PATH ,
00400 "EURL_VAL_PATH_WITH_KEYS" => EURL_VAR_PATH_WITH_KEYS ,
00401 "EURL_VAL_FILE_NAME" => EURL_VAR_FILE_NAME ,
00402 "EURL_VAL_FRAGMENT" => EURL_VAR_FRAGMENT ,
00403 ));
00404 }
00405
00416 function _EnvironmentToKey()
00417 {
00418
00419 if(EURL_DEBUG_ENVIRONMENTTOKEY)
00420 {
00421 print(__CLASS__."::".__FUNCTION__."(");
00422 foreach(func_get_args() as $arg)
00423 {
00424 print(var_export($arg,TRUE).",");
00425 }
00426 print(")\n");
00427 }
00428
00429
00430 return(array(
00431 "EURL_ENV_PROTOCOL" => EURL_VAR_PROTOCOL ,
00432 "EURL_ENV_USER" => EURL_VAR_USER ,
00433 "EURL_ENV_PASS" => EURL_VAR_PASS ,
00434 "EURL_ENV_DOMAIN" => EURL_VAR_DOMAIN ,
00435 "EURL_ENV_SUB_DOMAIN" => EURL_VAR_SUB_DOMAIN ,
00436 "EURL_ENV_PORT" => EURL_VAR_PORT ,
00437 "EURL_ENV_INDEX_PATH" => EURL_VAR_INDEX_PATH ,
00438 "EURL_ENV_PATH_WITH_KEYS" => EURL_VAR_PATH_WITH_KEYS ,
00439 "EURL_ENV_FILE_NAME" => EURL_VAR_FILE_NAME ,
00440 "EURL_ENV_FRAGMENT" => EURL_VAR_FRAGMENT ,
00441 ));
00442 }
00443
00453 function EUrl()
00454 {
00455
00456 if(EURL_DEBUG_EURL)
00457 {
00458 print(__CLASS__."::".__FUNCTION__."(");
00459 foreach(func_get_args() as $arg)
00460 {
00461 print(var_export($arg,TRUE).",");
00462 }
00463 print(")\n");
00464 }
00465
00466
00467 $this->_Settings = array();
00468 foreach(EUrl::_KeyNames() as $key)
00469 {
00470 $this->_Settings[$key] = NULL;
00471 }
00472 }
00473
00486 function & _Internal()
00487 {
00488
00489 if(EURL_DEBUG_INTERNAL)
00490 {
00491 print(__CLASS__."::".__FUNCTION__."(");
00492 foreach(func_get_args() as $arg)
00493 {
00494 print(var_export($arg,TRUE).",");
00495 }
00496 print(")\n");
00497 }
00498
00499
00500 static $defaults = array(
00501 EURL_VAR_PROTOCOL => "http" ,
00502 EURL_VAR_USER => NULL ,
00503 EURL_VAR_PASS => NULL ,
00504 EURL_VAR_DOMAIN => "localhost" ,
00505 EURL_VAR_SUB_DOMAIN => NULL ,
00506 EURL_VAR_PORT => NULL ,
00507 EURL_VAR_INDEX_PATH => NULL ,
00508 EURL_VAR_PATH_WITH_KEYS => FALSE ,
00509 EURL_VAR_PATH_VARS => NULL ,
00510 EURL_VAR_FILE_NAME => NULL ,
00511 EURL_VAR_GET_VARS => NULL ,
00512 EURL_VAR_FRAGMENT => NULL ,
00513 );
00514
00515 return($defaults);
00516 }
00517
00531 function & _Mining()
00532 {
00533
00534 if(EURL_DEBUG_MINING)
00535 {
00536 print(__CLASS__."::".__FUNCTION__."(");
00537 foreach(func_get_args() as $arg)
00538 {
00539 print(var_export($arg,TRUE).",");
00540 }
00541 print(")\n");
00542 }
00543
00544
00545 static $return = NULL;
00546
00547 if(NULL === $return)
00548 {
00549 $return = array(
00550 EURL_VAR_PROTOCOL => NULL,
00551 EURL_VAR_USER => NULL,
00552 EURL_VAR_PASS => NULL,
00553 EURL_VAR_DOMAIN => NULL,
00554 EURL_VAR_SUB_DOMAIN => NULL,
00555 EURL_VAR_PORT => NULL,
00556 EURL_VAR_INDEX_PATH => NULL,
00557 EURL_VAR_PATH_WITH_KEYS => NULL,
00558 EURL_VAR_PATH_VARS => NULL,
00559 EURL_VAR_GET_VARS => NULL,
00560 EURL_VAR_FRAGMENT => NULL,
00561 );
00562
00563 if(isset($_SERVER))
00564 {
00565 if(isset($_SERVER['HTTPS']))
00566 {
00567
00568 if(EURL_DEBUG_MINING)
00569 {
00570 print(__CLASS__."::".__FUNCTION__."(): ");
00571 print("SSL Enabled\n");
00572 }
00573
00574
00575 $return[EURL_VAR_PROTOCOL] = "https";
00576 }
00577 if(isset($_SERVER['PHP_AUTH_USER']))
00578 {
00579
00580 if(EURL_DEBUG_MINING)
00581 {
00582 print(__CLASS__."::".__FUNCTION__."(): ");
00583 print("User found: ");
00584 print($_SERVER['PHP_AUTH_USER']);
00585 print("\n");
00586 }
00587
00588
00589 $return[EURL_VAR_USER] = $_SERVER['PHP_AUTH_USER'];
00590 }
00591 if(isset($_SERVER['PHP_AUTH_PW']))
00592 {
00593
00594 if(EURL_DEBUG_MINING)
00595 {
00596 print(__CLASS__."::".__FUNCTION__."(): ");
00597 print("Password found: ");
00598 print($_SERVER['PHP_AUTH_PW']);
00599 print("\n");
00600 }
00601
00602
00603 $return[EURL_VAR_PASS] = $_SERVER['PHP_AUTH_PW'];
00604 }
00605 if(isset($_SERVER['HTTP_HOST']))
00606 {
00607 $host = $_SERVER['HTTP_HOST'];
00608 $regex = "/^(([^\.]+)\.){0,}([^\.]+\..{2,3})$/";
00609
00610 if(preg_match($regex, $host, $match))
00611 {
00612 $subdomain = $match[2];
00613 $domain = $match[3];
00614
00615 if($subdomain)
00616 {
00617
00618 if(EURL_DEBUG_MINING)
00619 {
00620 print(__CLASS__."::".__FUNCTION__."(): ");
00621 print("Subdomain found: ");
00622 print($subdomain);
00623 print("\n");
00624 }
00625
00626
00627 $return[EURL_VAR_SUB_DOMAIN] = $subdomain;
00628 }
00629
00630
00631 if(EURL_DEBUG_MINING)
00632 {
00633 print(__CLASS__."::".__FUNCTION__."(): ");
00634 print("Domain found: ");
00635 print($domain);
00636 print("\n");
00637 }
00638
00639
00640 $return[EURL_VAR_DOMAIN] = $domain;
00641 }
00642 }
00643 if(isset($_SERVER['SCRIPT_NAME']))
00644 {
00645 $path = $_SERVER['SCRIPT_NAME'];
00646 $path = trim($path, "\\/");
00647
00648
00649 if(EURL_DEBUG_MINING)
00650 {
00651 print(__CLASS__."::".__FUNCTION__."(): ");
00652 print("Scriptname found: ");
00653 print($path);
00654 print("\n");
00655 }
00656
00657
00658 $return[EURL_VAR_INDEX_PATH] = $path;
00659 }
00660 if(isset($_SERVER['SERVER_PORT']))
00661 {
00662
00663 if(EURL_DEBUG_MINING)
00664 {
00665 print(__CLASS__."::".__FUNCTION__."(): ");
00666 print("Port number found: ");
00667 print($_SERVER['SERVER_PORT']);
00668 print("\n");
00669 }
00670
00671
00672 $return[EURL_VAR_PORT] = $_SERVER['SERVER_PORT'];
00673 }
00674 }
00675 }
00676
00677 return($return);
00678 }
00679
00693 function & _Environment()
00694 {
00695
00696 if(EURL_DEBUG_ENVIRONMENT)
00697 {
00698 print(__CLASS__."::".__FUNCTION__."(");
00699 foreach(func_get_args() as $arg)
00700 {
00701 print(var_export($arg,TRUE).",");
00702 }
00703 print(")\n");
00704 }
00705
00706
00707 static $return = NULL;
00708
00709 if(NULL === $return)
00710 {
00711 foreach(EUrl::_EnvironmentToKey() as $env_key => $key)
00712 {
00713 if(isset($_ENV[$env_key]))
00714 {
00715
00716 if(EURL_DEBUG_ENVIRONMENT)
00717 {
00718 print(__CLASS__."::".__FUNCTION__."(): ");
00719 print("$key found in environment\n");
00720 }
00721
00722
00723 $return[$key] =& $_ENV[$env_key];
00724 }
00725 elseif(isset($_SERVER[$env_key]))
00726 {
00727
00728 if(EURL_DEBUG_ENVIRONMENT)
00729 {
00730 print(__CLASS__."::".__FUNCTION__."(): ");
00731 print("$key found in server vars\n");
00732 }
00733
00734
00735 $return[$key] =& $_SERVER[$env_key];
00736 }
00737 else
00738 {
00739 $return[$key] = NULL;
00740 }
00741 }
00742 }
00743
00744 return($return);
00745 }
00746
00761 function & _Constants()
00762 {
00763
00764 if(EURL_DEBUG_CONSTANTS)
00765 {
00766 print(__CLASS__."::".__FUNCTION__."(");
00767 foreach(func_get_args() as $arg)
00768 {
00769 print(var_export($arg,TRUE).",");
00770 }
00771 print(")\n");
00772 }
00773
00774
00775 static $defined = array();
00776
00777
00778 foreach(EUrl::_ConstantToKey() as $val_key => $key)
00779 {
00780
00781 if(!isset($defined[$key]))
00782 {
00783
00784 if(defined($val_key))
00785 {
00786
00787 if(EURL_DEBUG_CONSTANTS)
00788 {
00789 print(__CLASS__."::".__FUNCTION__."(): ");
00790 print("$key found in constant\n");
00791 }
00792
00793
00794 $defined[$key] = constant($val_key);
00795 }
00796 else
00797 {
00798 $defined[$key] = NULL;
00799 }
00800 }
00801 }
00802
00803 return($defined);
00804 }
00805
00816 function & _Defaults()
00817 {
00818
00819 if(EURL_DEBUG_DEFAULTS)
00820 {
00821 print(__CLASS__."::".__FUNCTION__."(");
00822 foreach(func_get_args() as $arg)
00823 {
00824 print(var_export($arg,TRUE).",");
00825 }
00826 print(")\n");
00827 }
00828
00829
00830 static $internal = NULL;
00831
00832 if(NULL === $internal)
00833 {
00834
00835 if(EURL_DEBUG_DEFAULTS)
00836 {
00837 print(__CLASS__."::".__FUNCTION__."(): ");
00838 print("Initializing static defaults\n");
00839 }
00840
00841
00842 $internal = array();
00843 foreach(EUrl::_KeyNames() as $key)
00844 {
00845 $internal[$key] = NULL;
00846 }
00847 }
00848
00849 return($internal);
00850 }
00851
00862 function & _Global()
00863 {
00864
00865 if(EURL_DEBUG_GLOBAL)
00866 {
00867 print(__CLASS__."::".__FUNCTION__."(");
00868 foreach(func_get_args() as $arg)
00869 {
00870 print(var_export($arg,TRUE).",");
00871 }
00872 print(")\n");
00873 }
00874
00875
00876 static $global_refs = NULL;
00877
00878 if(NULL === $global_refs)
00879 {
00880
00881 if(EURL_DEBUG_GLOBAL)
00882 {
00883 print(__CLASS__."::".__FUNCTION__."(): ");
00884 print("Referencing _GLOBALS\n");
00885 }
00886
00887
00888 foreach(EUrl::_KeyNames() as $key)
00889 {
00890 $global_refs[$key] =& $GLOBALS[$key];
00891 }
00892 }
00893
00894 return($global_refs);
00895 }
00896
00909 function GetValues($Params=NULL)
00910 {
00911
00912 if(EURL_DEBUG_GETVALUES)
00913 {
00914 print(__CLASS__."::".__FUNCTION__."(");
00915 foreach(func_get_args() as $arg)
00916 {
00917 print(var_export($arg,TRUE).",");
00918 }
00919 print(")\n");
00920 }
00921
00922
00923 static $empty = array();
00924 static $static_vars = NULL;
00925
00926
00927
00928 if(NULL === $static_vars)
00929 {
00930
00931 if(EURL_DEBUG_GETVALUES)
00932 {
00933 print(__CLASS__."::".__FUNCTION__."(): ");
00934 print("Initializing completely static returns\n");
00935 }
00936
00937
00938 $static_vars = array();
00939 $static_vars[EURL_SCOPE_INTERNAL ] =& EUrl::_Internal();
00940 $static_vars[EURL_SCOPE_CONSTANTS ] =& EUrl::_Constants();
00941 $static_vars[EURL_SCOPE_MINING ] =& EUrl::_Mining();
00942 $static_vars[EURL_SCOPE_ENVIRONMENT] =& EUrl::_Environment();
00943 $static_vars[EURL_SCOPE_DEFAULTS ] =& EUrl::_Defaults();
00944 $static_vars[EURL_SCOPE_GLOBAL ] =& EUrl::_Global();
00945 }
00946
00947
00948 $vars = array();
00949
00950
00951
00952 EUrl::_Constants();
00953
00954
00955
00956 if(isset($this))
00957 {
00958
00959 if(EURL_DEBUG_GETVALUES)
00960 {
00961 print(__CLASS__."::".__FUNCTION__."(): ");
00962 print("Getting instantiated settings, too\n");
00963 }
00964
00965
00966 $vars[EURL_SCOPE_SETTINGS] =& $this->_Settings;
00967 }
00968
00969
00970
00971 if(NULL !== $Params)
00972 {
00973
00974 if(EURL_DEBUG_GETVALUES)
00975 {
00976 print(__CLASS__."::".__FUNCTION__."(): ");
00977 print("Including parameters in parse\n");
00978 }
00979
00980
00981 $vars[EURL_SCOPE_PARAMETERS] =& $Params;
00982 }
00983
00984
00985 $return = array();
00986 $scopeorder = EUrl::_ScopeOrder();
00987 $keynames = EUrl::_KeyNames();
00988 foreach($scopeorder as $scope)
00989 {
00990 $scoped =& $empty;
00991
00992 if(isset($static_vars[$scope]))
00993 {
00994 $scoped =& $static_vars[$scope];
00995 }
00996
00997 if(isset($vars[$scope]))
00998 {
00999 $scoped =& $vars[$scope];
01000 }
01001
01002 foreach($keynames as $key)
01003 {
01004 if(!isset($return[$key]) && isset($scoped[$key]))
01005 {
01006
01007 if(EURL_DEBUG_GETVALUES)
01008 {
01009 print(__CLASS__."::".__FUNCTION__."(): ");
01010 print("$key from $scope\n");
01011 }
01012
01013
01014 $return[$key] = $scoped[$key];
01015 }
01016 }
01017 }
01018
01019 return($return);
01020 }
01021
01049 function SetValue( $VarName, $Value )
01050 {
01051
01052 if(EURL_DEBUG_SETVALUE)
01053 {
01054 print(__CLASS__."::".__FUNCTION__."(");
01055 foreach(func_get_args() as $arg)
01056 {
01057 print(var_export($arg,TRUE).",");
01058 }
01059 print(")\n");
01060 }
01061
01062
01063
01064 if(!in_array($VarName, EUrl::_KeyNames()))
01065 {
01066
01067 if(EURL_DEBUG_SETVALUE)
01068 {
01069 print(__CLASS__."::".__FUNCTION__."(): ");
01070 print("Unknown variable $VarName\n");
01071 }
01072
01073
01074 trigger_error(
01075 "Unknown EURL_VAR_*: "
01076 . var_export($VarName, TRUE)
01077 , E_USER_ERROR
01078 );
01079 }
01080
01081
01082 if(isset($this))
01083 {
01084
01085 if(EURL_DEBUG_SETVALUE)
01086 {
01087 print(__CLASS__."::".__FUNCTION__."(): ");
01088 print("Storing $VarName in instantiated object\n");
01089 }
01090
01091
01092 $array =& $this->_Settings;
01093 }
01094 else
01095 {
01096
01097 if(EURL_DEBUG_SETVALUE)
01098 {
01099 print(__CLASS__."::".__FUNCTION__."(): ");
01100 print("Storing $VarName in static defaults\n");
01101 }
01102
01103
01104 $array =& EUrl::_Defaults();
01105 }
01106
01107
01108 $array[$VarName] = $Value;
01109
01110
01111 return(NULL);
01112 }
01113
01125 function Generate($Extra=NULL)
01126 {
01127
01128 if(EURL_DEBUG_GENERATE)
01129 {
01130 print(__CLASS__."::".__FUNCTION__."(");
01131 foreach(func_get_args() as $arg)
01132 {
01133 print(var_export($arg,TRUE).",");
01134 }
01135 print(")\n");
01136 }
01137
01138
01139
01140 $KeyNames = EUrl::_KeyNames();
01141 if(is_array($Extra))
01142 {
01143 foreach($Extra as $Key => $Value)
01144 {
01145
01146 if(!in_array($Key, $KeyNames))
01147 {
01148
01149 if(EURL_DEBUG_GENERATE)
01150 {
01151 print(__CLASS__."::".__FUNCTION__."(): ");
01152 print("Unknown variable $Key\n");
01153 }
01154
01155
01156 trigger_error(
01157 "Unknown EURL_VAR_*: "
01158 . var_export($Key, TRUE)
01159 , E_USER_ERROR
01160 );
01161 }
01162 }
01163 }
01164 elseif(NULL !== $Extra)
01165 {
01166
01167 if(EURL_DEBUG_GENERATE)
01168 {
01169 print(__CLASS__."::".__FUNCTION__."(): ");
01170 print("Unexpected parameter: ");
01171 print(var_export($Extra, TRUE));
01172 print("\n");
01173 }
01174
01175
01176
01177 trigger_error(
01178 "Extra must be NULL or Array: "
01179 . var_export($Extra, TRUE)
01180 , E_USER_ERROR
01181 );
01182 }
01183
01184
01185 if(isset($this))
01186 {
01187
01188 if(EURL_DEBUG_GENERATE)
01189 {
01190 print(__CLASS__."::".__FUNCTION__."(): ");
01191 print("Calling from instantiated object\n");
01192 }
01193
01194
01195 $vars = $this->GetValues($Extra);
01196 }
01197 else
01198 {
01199
01200 if(EURL_DEBUG_GENERATE)
01201 {
01202 print(__CLASS__."::".__FUNCTION__."(): ");
01203 print("Calling statically\n");
01204 }
01205
01206
01207 $vars = EUrl::GetValues($Extra);
01208 }
01209
01210
01211 $url = "";
01212
01213
01214 if(!isset($vars[EURL_VAR_PROTOCOL]))
01215 {
01216
01217 if(EURL_DEBUG_GENERATE)
01218 {
01219 print(__CLASS__."::".__FUNCTION__."(): ");
01220 print("Protocol must be defined\n");
01221 }
01222
01223
01224 trigger_error(
01225 "No protocol set!"
01226 , E_USER_ERROR
01227 );
01228 }
01229 $url .= $vars[EURL_VAR_PROTOCOL];
01230 $url .= "://";
01231
01232
01233 if(isset($vars[EURL_VAR_USER]))
01234 {
01235
01236 if(EURL_DEBUG_GENERATE)
01237 {
01238 print(__CLASS__."::".__FUNCTION__."(): ");
01239 print("Including user in URL\n");
01240 }
01241
01242
01243 $url .= rawurlencode($vars[EURL_VAR_USER]);
01244 if(isset($vars[EURL_VAR_PASS]))
01245 {
01246
01247 if(EURL_DEBUG_GENERATE)
01248 {
01249 print(__CLASS__."::".__FUNCTION__."(): ");
01250 print("Including password in URL\n");
01251 }
01252
01253
01254 $url .= ':'.rawurlencode($vars[EURL_VAR_PASS]);
01255 }
01256 $url .= '@';
01257 }
01258
01259
01260 if(isset($vars[EURL_VAR_SUB_DOMAIN]))
01261 {
01262
01263 if(EURL_DEBUG_GENERATE)
01264 {
01265 print(__CLASS__."::".__FUNCTION__."(): ");
01266 print("Including sub-domain\n");
01267 }
01268
01269
01270 $url .= $vars[EURL_VAR_SUB_DOMAIN];
01271 $url .= ".";
01272 }
01273 if(!isset($vars[EURL_VAR_DOMAIN]))
01274 {
01275
01276 if(EURL_DEBUG_GENERATE)
01277 {
01278 print(__CLASS__."::".__FUNCTION__."(): ");
01279 print("Domain must be set\n");
01280 }
01281
01282
01283 trigger_error(
01284 "No domain set!"
01285 , E_USER_ERROR
01286 );
01287 }
01288 $url .= $vars[EURL_VAR_DOMAIN];
01289
01290
01291 if(isset($vars[EURL_VAR_PORT]) && $vars[EURL_VAR_PORT])
01292 {
01293
01294 if(EURL_DEBUG_GENERATE)
01295 {
01296 print(__CLASS__."::".__FUNCTION__."(): ");
01297 print("Adding port number to URL\n");
01298 }
01299
01300
01301 $url .= ":";
01302 $url .= $vars[EURL_VAR_PORT];
01303 }
01304 $url .= "/";
01305
01306
01307 if(isset($vars[EURL_VAR_INDEX_PATH]))
01308 {
01309
01310 if(EURL_DEBUG_GENERATE)
01311 {
01312 print(__CLASS__."::".__FUNCTION__."(): ");
01313 print("Adding index file path to URL\n");
01314 }
01315
01316
01317 $url .= $vars[EURL_VAR_INDEX_PATH];
01318 }
01319
01320
01321 if(!isset($vars[EURL_VAR_PATH_WITH_KEYS]))
01322 {
01323
01324 if(EURL_DEBUG_GENERATE)
01325 {
01326 print(__CLASS__."::".__FUNCTION__."(): ");
01327 print("No determination for handling PATH vars found\n");
01328 }
01329
01330
01331 trigger_error(
01332 "EURL_VAR_PATH_WITH_KEYS must be boolean!"
01333 , E_USER_ERROR
01334 );
01335 }
01336 if(isset($vars[EURL_VAR_PATH_VARS]))
01337 {
01338
01339 if(EURL_DEBUG_GENERATE)
01340 {
01341 print(__CLASS__."::".__FUNCTION__."(): ");
01342 print("Including PATH variables in URL\n");
01343 }
01344
01345
01346 foreach($vars[EURL_VAR_PATH_VARS] as $key=>$value)
01347 {
01348 if($vars[EURL_VAR_PATH_WITH_KEYS])
01349 {
01350 $url .= "/";
01351 $url .= rawurlencode($key );
01352 }
01353
01354 $url .= "/";
01355 $url .= rawurlencode($value);
01356 }
01357 }
01358
01359
01360 if(isset($vars[EURL_VAR_FILE_NAME]))
01361 {
01362
01363 if(EURL_DEBUG_GENERATE)
01364 {
01365 print(__CLASS__."::".__FUNCTION__."(): ");
01366 print("Including an effective file in URL\n");
01367 }
01368
01369
01370 $url .= "/";
01371 $url .= $vars[EURL_VAR_FILE_NAME];
01372 }
01373
01374
01375 if(isset($vars[EURL_VAR_GET_VARS]) && $vars[EURL_VAR_GET_VARS])
01376 {
01377
01378 if(EURL_DEBUG_GENERATE)
01379 {
01380 print(__CLASS__."::".__FUNCTION__."(): ");
01381 print("Including GET variables in URL\n");
01382 }
01383
01384
01385 $gets = array();
01386 foreach($vars[EURL_VAR_GET_VARS] as $key=>$value)
01387 {
01388 $gets[] = rawurlencode($key ).
01389 '='.rawurlencode($value);
01390 }
01391 $url .= "?";
01392 $url .= join("&",$gets);
01393 }
01394
01395
01396 if(isset($vars[EURL_VAR_FRAGMENT]) && $vars[EURL_VAR_FRAGMENT])
01397 {
01398
01399 if(EURL_DEBUG_GENERATE)
01400 {
01401 print(__CLASS__."::".__FUNCTION__."(): ");
01402 print("Including FRAGMENT in URL\n");
01403 }
01404
01405
01406 $url .= "#";
01407 $url .= $vars[EURL_VAR_FRAGMENT];
01408 }
01409
01410
01411 if(EURL_DEBUG_GENERATE)
01412 {
01413 print(__CLASS__."::".__FUNCTION__."(): ");
01414 print("$url\n");
01415 }
01416
01417
01418 return($url);
01419 }
01420 }
01421
01422 ?>