Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mapowanie ścieżek oraz error handler
Forum PHP.pl > Forum > PHP
Athlan
Od kilku chwil zastanawiają mnie dwie rzeczy.

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:

  1. <?php
  2. // define full server directory for framework
  3. define('V_DIR', '.');
  4.  
  5. // define main directories for framework
  6. define('V_APP', V_DIR . '/application/');
  7. define('V_CORE', V_DIR . '/core/');
  8. ?>


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:

  1. <?php
  2. define('V_DIR', dirname(__FILE__));
  3. ?>


(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:

  1. <?php
  2.  
  3. /**
  4.  * Error handler to catch exception class
  5.  *
  6.  * NOTE: See at VerrorHandler() handle function
  7.  */
  8.  
  9. set_error_handler("VerrorHandler");
  10.  
  11. /**
  12.  * Handler for errors, warnings and notices, if
  13.  * V_MODE_THROWERRHANDLE is TRUE than errors witch
  14.  * $bHandle (TRUE) flag will be throw in Vexception
  15.  * class
  16.  *
  17.  * ATTENTION: Do not modify that code!
  18.  */
  19.  
  20. function VerrorHandler($iErrorNo, $sErrorString, $sErrorFile, $sErrorLine)
  21. {
  22. $bHandle = TRUE;
  23.  
  24. switch ($iErrorNo)
  25. {
  26. case E_WARNING:
  27. $sOutput = "WARNING thrown: ";
  28. $bHandle = TRUE;
  29. break;
  30.  
  31. case E_PARSE:
  32. $sOutput = "PARSE ERROR thrown: ";
  33. $bHandle = TRUE;
  34. break;
  35.  
  36. case E_NOTICE:
  37. $sOutput = "NOTICE thrown: ";
  38. $bHandle = FALSE;
  39. break;
  40.  
  41. case E_CORE_ERROR:
  42. $sOutput = "CORE ERROR thrown: ";
  43. $bHandle = TRUE;
  44. break;
  45.  
  46. case E_CORE_WARNING:
  47. $sOutput = "CORE WARNING thrown: ";
  48. $bHandle = TRUE;
  49. break;
  50.  
  51. case E_COMPILE_ERROR:
  52. $sOutput = "COMPILE ERROR thrown: ";
  53. $bHandle = TRUE;
  54. break;
  55.  
  56. case E_COMPILE_WARNING:
  57. $sOutput = "COMPILE WARNING thrown: ";
  58. $bHandle = TRUE;
  59. break;
  60.  
  61. case E_USER_ERROR:
  62. $sOutput = "USER FATAL ERROR thrown: ";
  63. $bHandle = TRUE;
  64. break;
  65.  
  66. case E_USER_WARNING:
  67. $sOutput = "USER WARNING thrown: ";
  68. $bHandle = TRUE;
  69. break;
  70.  
  71. case E_USER_NOTICE:
  72. $sOutput = "USER NOTICE thrown: ";
  73. $bHandle = FALSE;
  74. break;
  75.  
  76. default:
  77. $sOutput = "USER (UNKNOWN) ERROR thrown: ";
  78. $bHandle = FALSE;
  79. break;
  80. }
  81.  
  82. $sOutput .= $sErrorString . ' in ' . $sErrorFile . ' on line ' . $sErrorLine;
  83.  
  84. if(V_MODE_THROWERRHANDLE === TRUE && $bHandle)
  85. throw new Vexception($sOutput);
  86. }
  87.  
  88. ?>



pozdrawiam, Athlan smile.gif
dr_bonzo
Cytat
Chcę aby mój framework wyłapywał błędy PARSE

To jest bez sensu -- kod powinien byc poprawny skladniowo kiedy wrzucasz go na serwer.
Poczytaj o pisaniu automatycznych testow (google: TDD; unit test) gdy pokryjesz wszystkie pliki i testy beda "przechodzily" to bedziesz mial gwarancje ze pliki sie skompiluja.
Apo
[OT]
Cytat
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).


Lol jakich warstw ?
Btw 0.15sek to nie jest szybko. Moj framework obsłuży to co pisałeś poniżej 0.05
I mamy kolejną "wersje" ZF guitar.gif
[/OT]
Athlan
Cytat
Poczytaj o pisaniu automatycznych testow (google: TDD; unit test) gdy pokryjesz wszystkie pliki i testy beda "przechodzily" to bedziesz mial gwarancje ze pliki sie skompiluja.


ano w sumie faktycznie... chodziło mi głównie o wyłapanie jakiś... jak to nazwał @nospor "pierdułek" na przykład notice, albo cuś o czym zupełnie zapomniałem, żeby czasem jakiś serwer nie brał tego za błąd, nie oszukując sie - nie wyłączając repotringu tych błędów

Cytat
Lol jakich warstw ?
Btw 0.15sek to nie jest szybko. Moj framework obsłuży to co pisałeś poniżej 0.05
I mamy kolejną "wersje" ZF


zwykle MVC nazywa się "warstwami", sory bez łączenia się z bazą danych jest to około 0.0016 (tak dla sproszczenia) smile.gif

btw: a co do mojego pierwszego problemu ze ścieżkami?

pozdrawiam Athlan smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.