Sprawa 1:
Pisze sobie frameworka, problem tkwi w pliku konfiguracyjnym, przy podaniu ścieżki względnej i bezwzględnej. Przykładowo podaje taką ścieżkę do plików:
<?php // define full server directory for framework // define main directories for framework ?>
w tym przypadku framework, po przejściu przez kilka warstw MVC oraz najpotrzebniejszych klas do odpalenia akcji,
kolejno:
- router (rewrite patch http://server/controller/action/param1/value1/param2/value2/ etc...),
- dispatchertoken,
- frontcontroller (call to dispatcher),
- controller,
- config loader (if any),
- action,
- model (if any),
- view (if any),
- template (if any),
- user (if ACLmode = TRUE),
- access (if ACLmode = TRUE),
- ACL (if ACLmode = TRUE),
- dispatcher (run action from frontcontroller and set all params from $_GET to action)
wykonuje się w około 0.15 sec (plus łączenie z bazą w modelu dao). Ok wszystko wporządku (jak na tyle warstw to bardzo szybko).
Jednak jeżeli przypisze w miejsce V_DIR ścieżkę bezwzględną w oto ten sposób:
<?php ?>
(przyponnę że zmieni się ona z "./" na "D:/server/var/framework/")
szybkość działania kodu znacznie maleje (około 0.45 sec).
Jasne że mogę używać pierwszego sposobu, ale na niektórych serwerach framework nie będzie działał, poniważ główny plik klsy frameworka leży w "./core/Vframe.Class.php", gdy sprawdzamy plik "test.php" nie będzie się on odnosił do "./test.php", ale niestety do "./core/test.php" (względem pliku z klasą.
Która zmienna (wartość) w pliku php.ini zmienia zakres budowania ścieżek dla funkcji require/require_once/include/include_once oraz takich jak fopen/operndir/gzopen etc... na bezwzględną, bez straty czasu wykonywania kodu?
Sprawa 2:
Chcę aby mój framework wyłapywał błędy PARSE i FATAL, ale jak wiemy wystepują one podczas kompilacji, przed uruchomieniem programu. Nie da się czasem uruchomić programu bez względu na napotkane błędy oraz przechwycić błedy? Moja funkcja wygląda mniej wiecej tak:
<?php /** * Error handler to catch exception class * * NOTE: See at VerrorHandler() handle function */ /** * Handler for errors, warnings and notices, if * V_MODE_THROWERRHANDLE is TRUE than errors witch * $bHandle (TRUE) flag will be throw in Vexception * class * * ATTENTION: Do not modify that code! */ function VerrorHandler($iErrorNo, $sErrorString, $sErrorFile, $sErrorLine) { $bHandle = TRUE; switch ($iErrorNo) { case E_WARNING: $sOutput = "WARNING thrown: "; $bHandle = TRUE; break; case E_PARSE: $sOutput = "PARSE ERROR thrown: "; $bHandle = TRUE; break; case E_NOTICE: $sOutput = "NOTICE thrown: "; $bHandle = FALSE; break; case E_CORE_ERROR: $sOutput = "CORE ERROR thrown: "; $bHandle = TRUE; break; case E_CORE_WARNING: $sOutput = "CORE WARNING thrown: "; $bHandle = TRUE; break; case E_COMPILE_ERROR: $sOutput = "COMPILE ERROR thrown: "; $bHandle = TRUE; break; case E_COMPILE_WARNING: $sOutput = "COMPILE WARNING thrown: "; $bHandle = TRUE; break; case E_USER_ERROR: $sOutput = "USER FATAL ERROR thrown: "; $bHandle = TRUE; break; case E_USER_WARNING: $sOutput = "USER WARNING thrown: "; $bHandle = TRUE; break; case E_USER_NOTICE: $sOutput = "USER NOTICE thrown: "; $bHandle = FALSE; break; default: $sOutput = "USER (UNKNOWN) ERROR thrown: "; $bHandle = FALSE; break; } $sOutput .= $sErrorString . ' in ' . $sErrorFile . ' on line ' . $sErrorLine; if(V_MODE_THROWERRHANDLE === TRUE && $bHandle) throw new Vexception($sOutput); } ?>
pozdrawiam, Athlan
