Autor Zpráva
xerno
Profil
Zdravím kolegy,

už nějaký ten pátek mi jede server na CentOS s balíkem php54w. Zmiňuji to, neboť tuším, že je problém právě v tom. Jinde se mi jej nepodařilo replikovat.

Vždy jsem předpokládal, že když definuji proměnnou, bude tím automaticky dostupná i ve všech includovaných scriptech a také v $GLOBALS. Ale u některých proměnných se stává, že je dostupná pouze v souboru, kde byla definována. Není v $GLOBALS a není ani v includovaných souborech. Původně jsem si myslel, že se phpku nelíbí místo kde proměnnou definuji, takže jsem ji zkusil definovat hned na začátku scriptu třeba přirazením datového typu (něco ve smyslu $obsah=[];)... nicméně to také nepomohlo. Pomůže pouze, když při prvním použití zapíšu $GLOBALS['obsah'] ...pak se s ní dá pracovat normálně jako předtím a je dostupná i v těch includovaných souborech.

Skutečně nevím čím by to mohlo být, některé proměnné to dělají a jiné zase ne. Na internetu jsem se dočetl, že podobné problémy může způsobovat PHPUnit, ten ale nepoužívám. Nemůže to být nějakým nevhodným nastavením PHP? nebo existuje elegantnější docílení výsledku než $GLOBALS['promenna'] ?

Bohužel server je to ostrý a protože scripty jsou psány pro PHP 5.4, nemohu si dovolit vyzkoušet downgrade.

Ačkoli je problém vyřešen (ono pomůže i $bla=$obsah a v includovaném souboru pracovat s $bla místo $obsah), přesto bych rád našel zakopaného psa. Za jakýkoli podnět děkuji.
ShiraNai7
Profil
Záleží na tom, kde se skript includuje. Includovaný soubor totiž dědí aktuální variable scope. Viz http://php.net/manual/en/language.variables.scope.php
Pokud potřebuješ nějaké globální registry, využij např. statické třídy/singletony.. i když to taky není ideální řešení.
xerno
Profil
ShiraNai7:
Těžko říct kde problém byl. Řekl bych, že variable scope se dědil normálně - co bylo v $GLOBALS v hlavním scriptu, to bylo i v includovaném souboru. Jen pár proměnných, které jsem si v hlavním scriptu definoval, s nimi se dalo pracovat pouze v hlavním scriptu a vůbec v $GLOBALS nebyly.

V noci jsem odstranil komplet apache i php, poté znovu nainstaloval normál z repozitářů a vše nyní funguje. I přesto, že všechny konfiguráky zůstaly stejné, nyní to funguje. Skutečně jsem se s podobným problémem za celou svou praxi ještě nesetkal.

Kde tedy problém byl asi už nikdo nezjistí. Nicméně je vyřešeno, zamykám tedy téma.

Ještě pro zajímavost pár detailů: CentOS release 6.4 (Final), PHP 5.4.17, Apache/2.2.15.
Toto téma je uzamčeno. Odpověď nelze zaslat.