Obsługa Request w PHP6

Znana jest już koncepcja obsługi żądań, która zostanie wprowadzona wraz z wejściem PHP6 (Unicode), informacje na ten temat opublikował Andrei Zmievski na swoim blogu.

Jednym z głównych problemów związanych z wprowadzeniem Unicode dla PHP jest poprawne rozpoznanie kodowania znaków przychodzącego żądania. Sposobów na to jest przynajmniej kilka, jednak niestety żaden nie jest w 100% pewny, i nie można na nim polegać. Co za tym idzie twórcy PHP stanęli przed wyzwaniem stworzenia skutecznego i elastycznego rozwiązania niewpływającego znacznie na wydajność całego interpretera.

Wprowadzona wraz z PHP6 implementacja mechanizmów rozpoznawania kodowania zostanie oparta na wzorcu Lazy Load, którego głównym celem jest odroczenie wykonania do chwili, gdy nastąpi odwołanie do zasobu będącego wynikiem przetwarzania dokonywanego przez dany mechanizm. W przypadku PHP odwołaniem takim będzie próba pobrania danych z tablic $_GET, $_POST, $_REQUEST. Do tego czasu całe zapytanie będzie przechowywane wyłącznie w postaci źródłowej (RAW). Dodatkowo możliwa predefiniowanie / zmiana kodowania znaków poprzez funkcję http_input_encoding(), po wywołaniu której cała procedura konwersji źródłowego zapytania będzie wywołana od początku przy pierwszym odwołaniu od tablic danych ($_POST, $_GET, $_REQUEST).
Rozwiązanie takie ma kilka zalet:

  • całkowity koszt związany z rozpoznaniem kodowania, jak również konwersją zestawu znaków będzie ponoszony tylko i wyłącznie w przypadku, gdy dane te będą faktycznie wykorzystywane,
  • ewentualne błędy związane z konwersją zestawu znaków wystąpią w trakcie wykonania dzięki czemu będą mogły być przechwycone przez programistów,
  • istniej możliwość zmiany kodowania w trakcie wywołania,

Jednak jak donosi Rasmus Lerdorf rozwiązanie takie może nieść potencjalne zagrożenie, polegające na próbach zmiany zapytania w celu umieszczenia danych powodujących błędy konwersji, niemniej jednak w planach jest bezbolesne zabezpieczenie przed tego typu próbami.