Speciální znaky v názvech externích proměnných
Převážně z historických důvodů (kdy se ještě hojně používala direktiva register_globals a neexistovaly proměnné jako $_GET) se s některými speciálními znaky uvnitř názvů externích proměnných zachází odlišně:
- Ignorují se mezery na začátku názvu
- Neregistrují se proměnné s prázdným názvem
- Mezery, neuzavřené
[
a tečky se převádějí na podtržítko - Pokus o vytvoření globální proměnné
GLOBALS
selže
Tečka se do seznamu nahrazovaných znaků dostala s největší pravděpodobností proto, že ji používá <input type="image">
pro oddělení X a Y souřadnice kliknutí.
Jediný způsob, jak se těchto omezení zbavit, je vytvořit si vlastní zpracování proměnné QUERY_STRING (pro parametry URL), php://input
(pro metodu POST) a HTTP_COOKIE (pro cookies).
Ostatní speciální znaky se zaregistrují, ale přes globální proměnnou k nim nejde snadno přistoupit. Použít jde buď $GLOBALS[","]
nebo konstrukce ${","}
.
Diskuse
GLOBALS:
Pokus o vytvoření globální proměnné GLOBALS selže, neboť GLOBALS obsahuje všechny globální proměnné, včetně sebe sama. to dělá problémy, pokud si chcete rekurzivně vypsat všechny proměnné. je třeba ji z takového výpisu vyloučit.
Jakub Vrána
:
Popis proměnné GLOBALS je správně, ale důvod zákazu jejího přepsání spočívá v bezpečnosti a ne v tom, že by to principiálně nešlo.


Diskuse je zrušena z důvodu spamu.

